WSStreamedHttpBinding

WSStreamedHttpBinding örneği, HTTP aktarımı kullanıldığında akış senaryolarını desteklemek için tasarlanmış bir bağlamanın nasıl oluşturulacağını gösterir.

Uyarı

Bu örnek için kurulum yordamı ve derleme yönergeleri bu konunun sonunda yer alır.

Yeni bir standart bağlama oluşturma ve yapılandırma adımları aşağıdaki gibidir.

  1. Yeni bir standart bağlama oluşturma

    TemelHttpBinding ve netTcpBinding gibi Windows Communication Foundation'daki (WCF) standart bağlamalar, temel alınan aktarımları ve kanal yığınını belirli gereksinimler için yapılandırmaktadır. Bu örnekte WSStreamedHttpBinding kanal yığınını akışı destekleyecek şekilde yapılandırır. Her iki özellik de akış tarafından desteklenmediğinden, kanal yığınına varsayılan olarak WS-Security ve güvenilir mesajlaşma eklenmez. Yeni bağlama, WSStreamedHttpBinding sınıfından türetilen Binding sınıfı içinde uygulanır. şu WSStreamedHttpBinding bağlama öğelerini içerir: HttpTransportBindingElement, HttpsTransportBindingElement, TransactionFlowBindingElementve TextMessageEncodingBindingElement. sınıfı, aşağıdaki örnek kodda gösterildiği gibi sonuçta elde edilen bağlama yığınını yapılandırmak için bir CreateBindingElements() yöntem sağlar.

    public override BindingElementCollection CreateBindingElements()
    {
        // return collection of BindingElements
        BindingElementCollection bindingElements = new BindingElementCollection();
    
        // the order of binding elements within the collection is important: layered channels are applied in the order included, followed by
        // the message encoder, and finally the transport at the end
        if (flowTransactions)
        {
            bindingElements.Add(transactionFlow);
        }
        bindingElements.Add(textEncoding);
    
        // add transport (http or https)
        bindingElements.Add(transport);
        return bindingElements.Clone();
    }
    
  2. Yapılandırma desteği ekleme

    Yapılandırma aracılığıyla taşımayı kullanıma açmak için örnek iki sınıf daha uygular:WSStreamedHttpBindingConfigurationElement ve WSStreamedHttpBindingSection. WSStreamedHttpBindingSection sınıfı, StandardBindingCollectionElement<TStandardBinding,TBindingConfiguration> olup WSStreamedHttpBinding'yi WCF yapılandırma sistemine sunar. Uygulamanın büyük bir kısmı, WSStreamedHttpBindingConfigurationElement'dan türetilen StandardBindingElement öğesine devredilir. Sınıf WSStreamedHttpBindingConfigurationElement, WSStreamedHttpBinding'nın özelliklerine karşılık gelen özelliklere ve her yapılandırma öğesini bir bağlamaya eşlemek için işlevlere sahiptir.

    Hizmetin yapılandırma dosyasına aşağıdaki bölümü ekleyerek işleyiciyi yapılandırma sistemine kaydedin.

    <configuration>
      <system.serviceModel>
        <extensions>
          <bindingExtensions>
            <add name="wsStreamedHttpBinding" type="Microsoft.ServiceModel.Samples.WSStreamedHttpBindingCollectionElement, WSStreamedHttpBinding, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null" />
          </bindingExtensions>
        </extensions>
      </system.serviceModel>
    </configuration>
    

    Ardından işleyiciye serviceModel yapılandırma bölümünden başvurulabilir.

    <configuration>
      <system.serviceModel>
        <client>
          <endpoint
                    address="https://localhost/servicemodelsamples/service.svc"
                    bindingConfiguration="Binding"
                    binding="wsStreamedHttpBinding"
                    contract="Microsoft.ServiceModel.Samples.IStreamedEchoService"/>
        </client>
      </system.serviceModel>
    </configuration>
    

Örneği ayarlamak, derlemek ve çalıştırmak için

  1. Aşağıdaki komutu kullanarak ASP.NET 4.0'ı yükleyin.

    %windir%\Microsoft.NET\Framework\v4.0.XXXXX\aspnet_regiis.exe /i /enable
    
  2. Windows Communication Foundation Örnekleri içinOne-Time Kurulum Yordamı'nda listelenen adımları gerçekleştirdiğinizden emin olun.

  3. Internet Information Services (IIS) Sunucu Sertifikası Yükleme Yönergelerini gerçekleştirdiğinizden emin olun.

  4. Çözümü oluşturmak için Windows Communication Foundation Örnekleri Oluşturma başlığındaki yönergeleri izleyin.

  5. Örneği makineler arası yapılandırmada çalıştırmak için Windows Communication Foundation Örneklerini Çalıştırma başlığındaki yönergeleri izleyin.

  6. İstemci penceresi görüntülendiğinde, "Sample.txt" yazın. Dizininizde "Sample.txtkopyası" bulunmalıdır.

WSStreamedHttpBinding Örnek Hizmeti

kullanan WSStreamedHttpBinding örnek hizmet, hizmet alt dizininde bulunur. Uygulamanın OperationContract kullanımı, MemoryStream döndürmeden önce gelen akıştan tüm verileri almak için öncelikle bir MemoryStream kullanır. Örnek hizmet, Internet Information Services (IIS) tarafından barındırılır.

[ServiceContract]
public interface IStreamedEchoService
{
    [OperationContract]
    Stream Echo(Stream data);
}

public class StreamedEchoService : IStreamedEchoService
{
    public Stream Echo(Stream data)
    {
        MemoryStream dataStorage = new MemoryStream();
        byte[] byteArray = new byte[8192];
        int bytesRead = data.Read(byteArray, 0, 8192);
        while (bytesRead > 0)
        {
            dataStorage.Write(byteArray, 0, bytesRead);
            bytesRead = data.Read(byteArray, 0, 8192);
        }
        data.Close();
        dataStorage.Seek(0, SeekOrigin.Begin);

        return dataStorage;
    }
}

WSStreamedHttpBinding Örnek İstemcisi

kullanarak WSStreamedHttpBinding hizmetle etkileşime geçmek için kullanılan istemci, istemci alt dizininde bulunur. Bu örnekte kullanılan sertifika Makecert.exeile oluşturulmuş bir test sertifikası olduğundan, tarayıcınızda gibi https://localhost/servicemodelsamples/service.svcbir HTTPS adresine erişmeye çalıştığınızda bir güvenlik uyarısı görüntülenir. WCF istemcisinin yerinde bir test sertifikasıyla çalışmasına izin vermek için, güvenlik uyarısını engellemek için istemciye bazı ek kodlar eklenmiştir. Üretim sertifikaları kullanılırken kod ve eşlik eden sınıf gerekli değildir.

// WARNING: This code is only required for test certificates such as those created by makecert. It is
// not recommended for production code.
PermissiveCertificatePolicy.Enact("CN=ServiceModelSamples-HTTPS-Server");