Ö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 , sıkıştırmayı Stream özgün taşımanın çevresinde saran bir taşıma ile değiştirilir.

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 çalışma zamanında sağlayıcıyı oluşturur.

Birden çok yükseltme söz konusu olduğunda, Başlatıcı ve Acceptor'ın her Başlatma için geçerli olan yükseltme geçişlerini zorlamak için durum makinelerini kapsüllediğini unutmayın.

Akış Yükseltmesi Uygulama

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ükseltilecek akışı almak için yöntemini geçersiz kılın ve yükseltilen akışı döndür. 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ükseltilecek akışı almak için yöntemini geçersiz kılın ve yükseltilen akışı döndür. 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 2. ve 1. adımlarda tanımlanan kabul eden ve başlatıcının örneklerini döndürmek için ve CreateUpgradeInitiator yöntemlerini geçersiz kılı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. istemcisinde BuildChannelFactory yöntemini ve BuildChannelListener yükseltme Bağlama Öğesini BindingParameters'ye eklemek için hizmetteki yöntemini geçersiz kılın.

  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. Aktarım düzeyi güvenliğinin yapılandırması ve SslStreamSecurityBindingElement tarafından WindowsStreamSecurityBindingElement kapsüllenmiştir ve yapılandırılabilir ve özel bağlamaya eklenebilir. Bu bağlama öğeleri, istemci ve sunucu akışı yükseltme sağlayıcılarını oluşturan sınıfını genişletir StreamUpgradeBindingElement . Bu bağlama öğeleri, özel güvenlik akışı yükseltme sağlayıcısı sınıflarını oluşturan yöntemlere sahiptir; bunlar değildir public, bu nedenle bu iki durumda tek yapmanız gereken bağlama öğesine 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. ve BuildChannelFactoryBuildChannelListener her yükseltme sağlayıcısı, önceden var olan yükseltme bağlama parametrelerine nasıl katman yapılacağı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. Sıkıştırma akışının StreamSecurityUpgradeInitiator ve güvenli akışın GetNextUpgrade içerik türlerini sırayla döndürmek için yöntemini geçersiz kılmayı unutmayın.

  3. yöntemindeki StreamSecurityUpgradeAcceptor özel içerik türlerini CanUpgrade anlayan alt sınıfı.

  4. Akış, ve CanUpgradeiçin yapılan her çağrıdan GetNextUpgrade sonra yükseltilir.

Ayrıca bkz.