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, altyapı kanal katmanlarından birinin HTTP istek ve yanıt iletisi özelliklerini sırasıyla HTTP çerezlerine ve bu çerezlerden dönüştürmesi beklenir. Bağlamı değiştirmek için kullanılan mekanizmanın seçimi, ContextExchangeMechanism üzerindeki ContextBindingElement özelliği kullanılarak yapılır. Geçerli değerler HttpCookie veya SoapHeader.
İ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, Enabledtrue olarak ayarlandığı varsayılan moddur. Bu modda bağlam kanalı bağlamı yönetir ve bağlamı ömrü boyunca önbelleğe alır. Bağlam, kanal özelliği IContextManager aracılığıyla GetContext yöntemini çağırarak kanaldan alınabilir. Kanalın özellikteki SetContext yöntemi çağrılarak açılmadan önce belirli bir bağlamla önceden başlatılması sağlanabilir. Kanal, bağlamla başlatıldıktan sonra yeniden ayarlanamaz.
Bu modda sabit değer listesi aşağıdadır:
Kanal açıldıktan sonra
SetContextkullanarak bağlamı sıfırlamak, bir InvalidOperationException oluş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.
Uyarı
Yalnızca kanal belirli bir bağlam ayarlanmadan 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, Enabledfalse olarak ayarlandığında moddur. Bu modda bağlam kanalı bağlamı yönetmez. Bağlamı almak, yönetmek ve uygulamak, ContextMessageProperty kullanarak uygulamanın sorumluluğundadır.
GetContext veya SetContext çağrısı yapmaya yönelik her girişim bir InvalidOperationException ile sonuçlanır.
Seçilen mod ne olursa olsun, istemci kanalı fabrikası IRequestChannel, IRequestSessionChannel, ve IDuplexSessionChannel ileti değişimi desenlerini destekler.
Hizmette, kanal örneği, gelen iletilerde istemci tarafından sağlanan bağlamı ContextMessageProperty ifadesine dönüştürmekten sorumludur. 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 ContextMessageProperty ekleyerek istemciye geri gönderilecek yeni bir bağlam değeri tanımlamasına 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, IReplyChannel, IReplySessionChannel, ve IReplySessionChannel ileti değişimi desenlerini destekler.
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>
HttpCookie modundayken, tanımlama bilgileri SetCookie üst bilgi kullanılarak ayarlanır. Tanımlama bilgisi adı şeklindedir WscContext. Tanımlama bilgisinin değeri, wsc:Context üst bilginin Base64 kodlamasıdır. Bu değer tırnak işaretleri içinde yer alır.
Bağlamın değeri, aktarım sırasında aynı nedenle değiştirilmeye karşı korunmalıdır WS-Addressing üst bilgiler korunur; üst bilgi, isteğin hizmette nereye gönderileceğini belirlemek için kullanılır.
wsc:Context Üst bilgi bu nedenle, bağlama ileti koruma özelliği sunduğunda, SOAP veya aktarım düzeyinde dijital olarak imzalanması ya da imzalanıp şifrelenmesi 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 hizmetteki politikaya eklenmesi, özelliğin ContextExchangeMechanism değeri tarafından aşağıda belirtildiği gibi denetlenir.
için ContextSoapHeader, aşağıdaki onay oluşturulur:
<IncludeContext xmlns="http://schemas.microsoft.com/ws/2006/05/context" protectionLevel="Sign" />için HttpCookie, aşağıdaki onay oluşturulur:
<HttpUseCookie xmlns="http://schemas.xmlsoap.org/soap/http"/>