Aracılığıyla paylaş


POX uygulamalarıyla birlikte çalışabilirlik

"Sade Eski XML" (POX) uygulamaları, yalnızca SOAP zarfa alınmamış XML uygulama verilerini içeren ham HTTP mesajlarını değiş tokuş ederek iletişim kurar. Windows Communication Foundation (WCF), POX iletilerini kullanan hem hizmetleri hem de istemcileri sağlayabilir. Hizmette WCF, Web tarayıcıları ve POX mesajlarını gönderen ve alan komut dosyası dilleri gibi istemcilere uç noktaları kullanıma sunan hizmetleri uygulamak için kullanılabilir. İstemcide, WCF programlama modeli POX tabanlı hizmetlerle iletişim kuran istemcileri uygulamak için kullanılabilir.

Uyarı

Bu belge başlangıçta .NET Framework 3.0 için yazılmıştır. .NET Framework 3.5, POX uygulamalarıyla çalışmak için yerleşik desteğe sahiptir. Hakkında daha fazla bilgi için bkz . WCF Web HTTP Programlama Modeli.

WCF ile POX programlama

POX iletilerini kullanarak HTTP üzerinden iletişim kuran WCF hizmetleri customBinding<> kullanır.

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

Bu özel bağlama iki öğe içerir:

Standart WCF Metin İletisi Kodlayıcısı, None değerini kullanacak şekilde özel olarak ayarlanmıştır ve bu da SOAP zarfında sarmalanmadan gelen XML ileti yüklerini işleyebilmesini sağlar.

POX iletilerini kullanarak HTTP üzerinden iletişim kuran WCF istemcileri benzer bir bağlama kullanır (aşağıdaki kesinlik temelli kodda gösterilmiştir).

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 } );
}

POX istemcilerinin ileti gönderdikleri URI'leri açıkça belirtmesi gerektiğinden, HttpTransportBindingElement öğesini ManualAddressing özelliği ile el ile adresleme moduna ayarlayarak yapılandırmaları genellikle gerekir. Bu, iletilerin uygulama koduyla açıkça ele alınmasına olanak tanır ve bir uygulama farklı bir HTTP URI'sine her ileti gönderdiğinde yeni ChannelFactory bir kod oluşturulması gerekmez.

POX iletileri önemli protokol bilgilerini iletmek için SOAP üst bilgilerini kullanmadığından, POX istemcileri ve hizmetleri genellikle ileti göndermek veya almak için kullanılan temel HTTP isteğinin parçalarını işlemelidir. HTTP üst bilgileri ve durum kodları gibi HTTP'ye özgü protokol bilgileri WCF programlama modelinde iki sınıf aracılığıyla gösterilir:

  • HttpRequestMessageProperty, HTTP yöntemi ve istek üst bilgileri gibi HTTP isteğiyle ilgili bilgileri içerir.

  • HttpResponseMessageProperty, HTTP durum kodu ve durum açıklaması gibi HTTP yanıtıyla ilgili bilgilerin yanı sıra herhangi bir HTTP yanıt üst bilgisi içerir.

Aşağıdaki kod örneğinde adresine yönelik http://localhost:8100/customersbir HTTP GET istek iletisinin nasıl oluşturulacağı gösterilmektedir.

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 );

Öncelikle, Message çağrılarak CreateMessage(MessageVersion, String) boş bir istek oluşturulur. None parametresi, SOAP zarfı gerekmediğini ve Empty parametrenin Eylem olarak geçirildiğini belirtmek için kullanılır. Ardından, To üst bilgisi istenen URI'ye ayarlanarak istek iletisi yönlendirilir. Ardından, bir HttpRequestMessageProperty oluşturulur ve Method HTTP fiili GET yöntemine ayarlanır ve SuppressEntityBody giden HTTP istek iletisinin gövdesinde hiçbir veri gönderilmemesi gerektiğini belirtmek için true olarak ayarlanır. Son olarak, istek özelliği istek iletisinin koleksiyonuna Properties eklenir, böylece HTTP Aktarım'ın isteği nasıl gönderdiğini etkileyebilir. İleti, uygun bir IRequestChannel örneği üzerinden gönderilmeye hazırdır.

Gelen bir mesajdan HttpRequestMessageProperty çıkarmak ve bir yanıt oluşturmak için servis üzerinde benzer teknikler kullanılabilir.