Aracılığıyla paylaş


Özel Akış Yükseltmeleri

TCP ve Adlandırılmış Kanallar gibi akış odaklı aktarımlar, istemci ile sunucu arasında sürekli bayt akışı üzerinde çalışır. Bu akış bir Stream nesne tarafından gerçekleştirilir. Akış yükseltmesinde, istemci kanal yığınına isteğe bağlı bir protokol katmanı eklemek ister ve iletişim kanalının diğer ucundan bunu yapmanızı ister. Akış yükseltmesi, özgün Stream nesnenin yükseltilmiş bir nesneyle değiştirilmesinden oluşur.

Örneğin, doğrudan aktarım akışının üzerinde bir sıkıştırma akışı oluşturabilirsiniz. Bu durumda, özgün taşıma Stream yerine, özgün taşımanın etrafını saran ve sıkıştırmayı Stream içeren bir taşıma kullanılır.

Her biri öncekini sarmalayan birden çok akış yükseltmesi uygulayabilirsiniz.

Akış Yükseltmeleri Nasıl Çalışır?

Akış yükseltme işleminin dört bileşeni vardır.

  1. Yükseltme akışı Başlatıcısı işlemi başlatır: çalışma zamanında kanal aktarım katmanını yükseltmek için bağlantısının diğer ucuna bir istek başlatabilir.

  2. Yükseltme akışı Acceptor yükseltmeyi gerçekleştirir: çalışma zamanında diğer makineden yükseltme isteğini alır ve mümkünse yükseltmeyi kabul eder.

  3. Yükseltme Sağlayıcısı , istemcide Başlatıcıyı ve sunucuda Acceptor'ı oluşturur.

  4. Hizmet ve istemcideki bağlamalara bir akış yükseltme Bağlama Öğesi eklenir, ve bu, sağlayıcının çalışma zamanında oluşturulmasını sağlar.

Birden çok yükseltme söz konusu olduğunda, Başlatıcı ve Kabul Edici, her başlatma için geçerli yükseltme geçişlerini belirlemek amacıyla durum makinelerini kapsadığını unutmayın.

Akış Yükseltmesini Nasıl Uygulayabilirsiniz

Windows Communication Foundation (WCF), uygulayabileceğiniz dört abstract sınıf sağlar:

Özel bir akış yükseltmesi uygulamak için aşağıdakileri yapın. Bu yordam hem istemci hem de sunucu makinelerinde en düşük akış yükseltme işlemini uygular.

  1. StreamUpgradeInitiator uygulayan bir sınıf oluşturun.

    1. InitiateUpgrade yöntemini geçersiz kılarak yükseltilecek akışı parametre olarak alın ve yükseltilen akışı geri döndürün. Bu yöntem zaman uyumlu çalışır; yükseltmeyi zaman uyumsuz olarak başlatmak için benzer yöntemler vardır.

    2. GetNextUpgrade Ek yükseltmeleri denetlemek için yöntemini geçersiz kılın.

  2. StreamUpgradeAcceptor uygulayan bir sınıf oluşturun.

    1. AcceptUpgrade yöntemini geçersiz kılarak yükseltilecek akışı parametre olarak alın ve yükseltilen akışı geri döndürün. Bu yöntem zaman uyumlu çalışır; yükseltmeyi zaman uyumsuz olarak kabul etmek için benzer yöntemler vardır.

    2. İstenen yükseltmenin yükseltme işleminin CanUpgrade bu noktada bu yükseltme kabul edicisi tarafından desteklenip desteklenmediğini belirlemek için yöntemini geçersiz kılın.

  3. uygulayan StreamUpgradeProviderbir sınıf oluşturun. CreateUpgradeAcceptor ve CreateUpgradeInitiator yöntemlerini, 2. ve 1. adımlarda tanımlanan kabul eden ve başlatıcı örneklerini döndürmeleri için üstüne yazın.

  4. StreamUpgradeBindingElement uygulayan bir sınıf oluşturun.

    1. istemcisinde BuildClientStreamUpgradeProvider yöntemini ve hizmetteki BuildServerStreamUpgradeProvider yöntemini geçersiz kılın.

    2. İstemcideki BuildChannelFactory yöntemini ve hizmetteki BuildChannelListener yöntemini geçersiz kılarak yükseltme Bağlama Öğesini BindingParameters'ye ekleyin.

  5. Yeni akış yükseltme bağlama öğesini sunucu ve istemci makinelerindeki bağlamalara ekleyin.

Güvenlik Yükseltmeleri

Güvenlik yükseltmesi eklemek, genel akış yükseltme işleminin özel bir sürümüdür.

WCF zaten akış güvenliğini yükseltmek için iki bağlama öğesi sağlar. Taşıma düzeyi güvenliğinin yapılandırması WindowsStreamSecurityBindingElement ve SslStreamSecurityBindingElement tarafından kapsüllenmiştir ve bunlar yapılandırılarak özel bir bağlamaya eklenebilir. Bu bağlama öğeleri, istemci ve sunucu akışı yükseltme sağlayıcılarını oluşturan StreamUpgradeBindingElement sınıfını genişletir. Bu bağlama öğeleri, özel güvenlik akışı yükseltme sağlayıcısı sınıflarını oluşturan yöntemlere sahiptir ve bu sınıflar public'değildir. Bu nedenle, bu iki durumda yapmanız gereken tek şey bağlama öğesini bağlamaya eklemektir.

Yukarıdaki iki bağlama öğesi tarafından karşılanmamış güvenlik senaryoları için, güvenlikle ilgili abstract üç sınıf yukarıdaki başlatıcı, acceptor ve sağlayıcı temel sınıflarından türetilir:

  1. System.ServiceModel.Channels.StreamSecurityUpgradeInitiator

  2. System.ServiceModel.Channels.StreamSecurityUpgradeAcceptor

  3. System.ServiceModel.Channels.StreamSecurityUpgradeProvider

Güvenlik akışı yükseltmesi uygulama işlemi, bu üç sınıftan türetdiğiniz farkla öncekiyle aynıdır. Çalışma zamanına güvenlik bilgileri sağlamak için bu sınıflardaki ek özellikleri geçersiz kılın.

Birden Çok Yükseltme

Ek yükseltme istekleri oluşturmak için yukarıdaki işlemi yineleyin: ek uzantılar StreamUpgradeProvider ve bağlama öğeleri oluşturun. Bağlama öğelerini bağlamaya ekleyin. Ek bağlama öğeleri, bağlamaya eklenen ilk bağlama öğesinden başlayarak sıralı olarak işlenir. İçinde BuildChannelFactory ve BuildChannelListener, her yükseltme sağlayıcısı, kendisini önceden var olan yükseltme bağlama parametrelerine nasıl uyarlayacağını belirleyebilir. Daha sonra mevcut yükseltme bağlama parametresini yeni bir bileşik yükseltme bağlama parametresiyle değiştirmelidir.

Alternatif olarak, bir yükseltme sağlayıcısı birden çok yükseltmeyi destekleyebilir. Örneğin, hem güvenliği hem de sıkıştırmayı destekleyen özel bir akış yükseltme sağlayıcısı uygulamak isteyebilirsiniz. Aşağıdaki adımları yapın:

  1. Initiator ve Acceptor'ı oluşturan sağlayıcı sınıfını yazmak için alt sınıf StreamSecurityUpgradeProvider .

  2. StreamSecurityUpgradeInitiator sınıfını genişleterek, sıkıştırma akışı ve güvenli akış için içerik türlerini sırayla döndürebilmek amacıyla GetNextUpgrade yöntemini geçersiz kılmayı unutmayın.

  3. StreamSecurityUpgradeAcceptor sınıfını özelleştirerek CanUpgrade yönteminde özel içerik türlerini anlayan bir hale getirin.

  4. GetNextUpgrade ve CanUpgrade için yapılan her çağrıdan sonra akış yükseltilir.

Ayrıca bakınız