Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
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ığı Enabledtrue
varsayı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ığı false
moddurEnabled. 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"/>