POX uygulamalarıyla birlikte çalışabilirlik

"Düz Eski XML" (POX) uygulamaları, yalnızca BIR SOAP zarfı içine alınmayan XML uygulama verilerini içeren ham HTTP iletilerini değiş tokum 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 iletileri gönderip alan betik 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.

Not

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ı, değeri kullanacak None şekilde özel olarak yapılandırılmıştır ve bu da SOAP zarfında sarmalanmış olarak gelmeyen XML ileti yüklerini işlemesine olanak tanır.

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 istemcileri, ileti gönderdikleri URI'leri açıkça belirtmesi gerektiğindenHttpTransportBindingElement, genellikle özelliği true öğesinde olarak ayarlayarak ManualAddressing öğesini el ile adresleme moduna yapılandırmaları 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 );

İlk olarak, çağrılarak CreateMessage(MessageVersion, String)boş bir istek Message oluşturulur. None parametresi, SOAP zarfı gerekmediğini ve Empty parametrenin Eylem olarak geçirildiğini belirtmek için kullanılır. Ardından, üst bilgi istenen URI'ye ayarlanarak To istek iletisi giderilir. 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 daha sonra uygun bir örneği üzerinden gönderilmeye IRequestChannelhazırdır.

Gelen iletiden ayıklamak HttpRequestMessageProperty ve bir yanıt oluşturmak için hizmette benzer teknikler kullanılabilir.