Aracılığıyla paylaş


Bağlam Değişimi Protokolü

Bu bölümde, Windows Communication Foundation (WCF) sürümü .NET Framework sürüm 3.5'te kullanıma sunulan bağlam değişimi protokolü açıklanmaktadır. Bu protokol, istemci kanalının bir hizmet tarafından sağlanan bağlamı kabul etmesine ve bunu aynı istemci kanalı örneği üzerinden gönderilen hizmete yönelik sonraki tüm isteklere uygulamasına olanak tanır. Bağlam değişimi protokolünün uygulanması, sunucu ile istemci arasındaki bağlamı yaymak için aşağıdaki iki mekanizmadan birini kullanabilir: HTTP tanımlama bilgileri veya SOAP üst bilgisi.

Bağlam değişimi protokolü özel bir kanal katmanında uygulanır. Kanal, bir ContextMessageProperty özelliği kullanarak bağlamı uygulama katmanına ve katmanından iletir. Uç noktalar arasında iletim için, bağlamın değeri kanal katmanında SOAP üst bilgisi olarak serileştirilir veya HTTP isteğini ve yanıtını temsil eden ileti özelliklerine veya bu özelliklerden dönüştürülür. İkinci durumda, temel alınan kanal katmanlarından birinin HTTP isteği ve yanıt iletisi özelliklerini sırasıyla HTTP tanımlama bilgilerine ve bu tanımlama bilgilerinden dönüştürmesi beklenir. Bağlamı değiştirmek için kullanılan mekanizmanın seçimi, üzerindeki ContextBindingElementözelliği kullanılarak ContextExchangeMechanism yapılır. Geçerli değerler HttpCookie veya SoapHeader şeklindedir.

İstemcide, kanalın bir örneği kanal özelliğindeki ayarlara göre iki modda çalışabilir: Enabled.

Mod 1: Kanal Bağlam Yönetimi

Bu, olarak ayarlandığı Enabledtruevarsayılan moddur. Bu modda bağlam kanalı bağlamı yönetir ve bağlamı ömrü boyunca önbelleğe alır. Bağlam, yöntemini çağırarak kanal özelliği IContextManager aracılığıyla kanaldan GetContext alınabilir. Kanal özelliğinde yöntemi çağrılarak SetContext açılmadan önce kanal belirli bir bağlamla önceden başlatılabilir. Kanal bağlamla başlatıldıktan sonra sıfırlanamaz.

Bu modda sabit değer listesi aşağıdadır:

  • Kanal açıldıktan sonra kullanarak SetContext bağlamı sıfırlama girişimi bir InvalidOperationExceptionoluşturur.

  • Giden iletide kullanarak ContextMessageProperty bağlam gönderme girişimi bir InvalidOperationExceptionoluşturur.

  • Belirli bir bağlama sahip sunucudan bir ileti alınırsa, kanal belirli bir bağlamla zaten başlatıldığında, bu bir ProtocolExceptionile sonuçlanır.

    Not

    Yalnızca kanal açıkça herhangi bir bağlam kümesi olmadan açıldığında sunucudan bir başlangıç bağlamı almak uygundur.

  • ContextMessageProperty Gelen ileti her zaman null'tır.

Mod 2: Uygulama Bağlam Yönetimi

Bu, olarak ayarlandığı falsemoddurEnabled. Bu modda bağlam kanalı bağlamı yönetmez. kullanarak bağlamı almak, yönetmek ve uygulamak uygulamanın sorumluluğundadır ContextMessageProperty. çağrısı GetContext yapmaya veya SetContext bir InvalidOperationExceptionile sonuç yüklemeye yönelik tüm girişimler.

Hangi mod seçilirse seçiliyor olsun, istemci kanalı fabrikası , IRequestSessionChannelve IDuplexSessionChannel ileti değişimi desenlerini desteklerIRequestChannel.

Hizmette, kanalın bir örneği gelen iletilerde istemci tarafından sağlanan bağlamı öğesine dönüştürmekle ContextMessagePropertysorumludur. Daha sonra ileti özelliğine uygulama katmanı veya çağrı yığınındaki diğer kanallar tarafından erişilebilir. Hizmet kanalları, uygulama katmanının yanıt iletisine bir ekleyerek istemciye geri yayılacak yeni bir ContextMessageProperty bağlam değeri belirtmesine de olanak tanır. Bu özellik bağlama yapılandırmasına bağlı olarak bağlamı içeren SOAP üst bilgisine veya HTTP tanımlama bilgisine dönüştürülür. Hizmet kanalı dinleyicisi , IReplySessionChannelve IReplySessionChannel ileti değişimi desenlerini desteklerIReplyChannel.

Bağlam değişimi protokolü, bağlamı yaymak için HTTP tanımlama bilgileri kullanılmadığında bağlam bilgilerini temsil eden yeni wsc:Context bir SOAP üst bilgisi ekler. Bağlam üst bilgisi şeması, her biri bir dize anahtarı ve dize içeriği olan herhangi bir sayıda alt öğeye izin verir. Aşağıda bir bağlam üst bilgisi örneği verilmiştir.

<Context xmlns="http://schemas.microsoft.com/ws/2006/05/context">

<property name="myContext">context-2</property>

</Context>

Moddayken HttpCookie tanımlama bilgileri üst bilgi kullanılarak SetCookie ayarlanır. Tanımlama bilgisi adı şeklindedir WscContext. Tanımlama bilgisinin değeri, üst bilginin Base64 kodlamasıdır wsc:Context . Bu değer tırnak içine alınır.

WS-Addressing üst bilgilerinin korunduğu nedenden dolayı aktarım sırasında bağlamın değeri değişiklikten korunmalıdır. Üst bilgi, isteğin hizmette nereye gönderileceğini belirlemek için kullanılır. wsc:Context Bu nedenle bağlama ileti koruma özelliği sunduğunda üst bilginin SOAP veya aktarım düzeyinde dijital olarak imzalanması veya imzalanması ve şifrelenmeleri gerekir. Http tanımlama bilgileri bağlamı yaymak için kullanıldığında, aktarım güvenliği kullanılarak korunmalıdır.

Bağlam değişimi protokolü için destek gerektiren hizmet uç noktaları, yayımlanan ilkede bunu açıkça ifade edebilir. İstemcinin SOAP düzeyinde bağlam değişimi protokollerini destekleme veya HTTP tanımlama bilgisi desteğini etkinleştirme gereksinimini temsil eden iki yeni ilke onayı kullanıma sunulmuştur. Bu onayların hizmet üzerindeki ilkeye oluşturulması, özelliğin ContextExchangeMechanism değeri tarafından aşağıdaki gibi denetlenir:

  • için ContextSoapHeaderaşağıdaki onay oluşturulur:

    <IncludeContext
    xmlns="http://schemas.microsoft.com/ws/2006/05/context"  
    protectionLevel="Sign" />  
    
  • için HttpCookieaşağıdaki onay oluşturulur:

    <HttpUseCookie xmlns="http://schemas.xmlsoap.org/soap/http"/>  
    

Ayrıca bkz.