Sdílet prostřednictvím


Interoperabilita s aplikacemi POX

"Prosté staré XML" (POX) aplikace komunikují výměnou nezpracovaných zpráv HTTP, které obsahují pouze data aplikace XML, která nejsou uzavřena v obálce SOAP. Windows Communication Foundation (WCF) může poskytovat služby i klienty, kteří používají zprávy POX. Ve službě lze WCF použít k implementaci služeb, které zpřístupňují koncové body klientům, jako jsou webové prohlížeče a skriptovací jazyky, které odesílají a přijímají zprávy POX. Na klientovi lze programovací model WCF použít k implementaci klientů, kteří komunikují se službami založenými na POX.

Poznámka:

Tento dokument byl původně napsán pro rozhraní .NET Framework 3.0. .NET Framework 3.5 má integrovanou podporu pro práci s aplikacemi POX. Další informace o webovém programovacím modelu HTTP WCF.

Programování POX pomocí WCF

Služby WCF, které komunikují přes PROTOKOL HTTP pomocí zpráv POX, používají customBinding>.<

<customBinding>
   <binding name="poxServerBinding">
       <textMessageEncoding messageVersion="None" />
       <httpTransport />
   </binding>
</customBinding>

Tato vlastní vazba obsahuje dva prvky:

Standardní kodér textových zpráv WCF je speciálně nakonfigurovaný tak, aby používal None hodnotu, která umožňuje zpracovat datové části zpráv XML, které nedorazí do obálky SOAP.

Klienti WCF, kteří komunikují přes PROTOKOL HTTP pomocí zpráv POX, používají podobnou vazbu (viz následující imperativní kód).

private static Binding CreatePoxBinding()
{
    TextMessageEncodingBindingElement encoder =
        new TextMessageEncodingBindingElement( MessageVersion.None, Encoding.UTF8 );
    HttpTransportBindingElement transport = new HttpTransportBindingElement();
    transport.ManualAddressing = true;
    return new CustomBinding( new BindingElement[] { encoder, transport } );
}

Vzhledem k tomu, že klienti POX musí explicitně zadat identifikátory URI, do kterých odesílají zprávy, musí obvykle nakonfigurovat HttpTransportBindingElement režim ručního adresování nastavením ManualAddressing vlastnosti true na prvek. To umožňuje, aby zprávy byly adresovány explicitně kódem aplikace a není nutné vytvářet nové ChannelFactory pokaždé, když aplikace odešle zprávu jinému identifikátoru URI HTTP.

Vzhledem k tomu, že zprávy POX nepoužívají hlavičky SOAP ke sdělení důležitých informací protokolu, klienti a služby POX často musí manipulovat s částmi podkladového požadavku HTTP, který se používá k odesílání nebo přijímání zpráv. Informace o protokolu specifickém pro HTTP, jako jsou hlavičky HTTP a stavové kódy, se zobrazují v programovacím modelu WCF prostřednictvím dvou tříd:

  • HttpRequestMessageProperty, který obsahuje informace o požadavku HTTP, jako je metoda HTTP a hlavičky požadavků.

  • HttpResponseMessageProperty, který obsahuje informace o odpovědi HTTP, například stavový kód HTTP a popis stavu, stejně jako všechny hlavičky odpovědi HTTP.

Následující příklad kódu ukazuje, jak vytvořit zprávu požadavku HTTP GET, která je adresována http://localhost:8100/customers.

Message request = Message.CreateMessage( MessageVersion.None, String.Empty );
request.Headers.To = "http://localhost:8100/customers";

HttpRequestMessageProperty property = new HttpRequestMessageProperty();
property.Method = "GET";
property.SuppressEntityBody = true;
request.Properties.Add( HttpRequestMessageProperty.Name, property );

Nejprve se vytvoří prázdný požadavek Message voláním CreateMessage(MessageVersion, String). Parametr None se používá k označení, že obálka SOAP není povinná a Empty parametr se předává jako akce. Zpráva požadavku se pak adresuje nastavením To hlavičky na požadovaný identifikátor URI. Dále je vytvořena a Method je nastavena na metodu HTTP příkaz GET a SuppressEntityBody je nastavena tak, aby true indikovat, HttpRequestMessageProperty že v těle zprávy odchozího požadavku HTTP by neměla být odeslána žádná data. Nakonec se vlastnost požadavku přidá do Properties kolekce zprávy požadavku, takže může ovlivnit, jak přenos HTTP odešle požadavek. Zpráva je pak připravena k odeslání přes příslušnou instanci IRequestChannel.

Podobné techniky lze ve službě použít k extrakci HttpRequestMessageProperty z příchozí zprávy a vytvoření odpovědi.