WSStreamedHttpBinding

Przykład WSStreamedHttpBinding pokazuje, jak stworzyć powiązanie przeznaczone do obsługi scenariuszy przesyłania strumieniowego w przypadku użycia transportu HTTP.

Uwaga / Notatka

Procedura instalacji i instrukcje kompilacji dla tego przykładu znajdują się na końcu tego tematu.

Kroki tworzenia i konfigurowania nowego standardowego powiązania są następujące.

  1. Tworzenie nowego standardowego powiązania

    Powiązania standardowe w programie Windows Communication Foundation (WCF), takie jak basicHttpBinding i netTcpBinding, konfigurują bazowe transporty i stos kanałów pod kątem określonych wymagań. W tym przykładzie WSStreamedHttpBinding konfiguruje stos kanałów do obsługi przesyłania strumieniowego. Domyślnie WS-Security i niezawodne przesyłanie wiadomości nie są dodawane do stosu kanałów, ponieważ obie funkcje nie są obsługiwane przez transmisję strumieniową. Nowe powiązanie jest implementowane w klasie WSStreamedHttpBinding pochodzącej z klasy Binding. WSStreamedHttpBinding zawiera następujące elementy powiązania: HttpTransportBindingElement, HttpsTransportBindingElement, TransactionFlowBindingElement i TextMessageEncodingBindingElement. Klasa udostępnia metodę CreateBindingElements() konfigurowania wynikowego stosu powiązania, jak pokazano w poniższym przykładowym kodzie.

    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. Dodaj obsługę konfiguracji

    Aby uwidocznić transport za pomocą konfiguracji, przykład implementuje dwie kolejne klasy —WSStreamedHttpBindingConfigurationElement i WSStreamedHttpBindingSection. Klasa WSStreamedHttpBindingSection jest StandardBindingCollectionElement<TStandardBinding,TBindingConfiguration>, która eksponuje WSStreamedHttpBinding w systemie konfiguracji WCF. Większość implementacji jest delegowana do WSStreamedHttpBindingConfigurationElement, która wywodzi się z StandardBindingElement. Klasa WSStreamedHttpBindingConfigurationElement ma właściwości, które odpowiadają właściwościom WSStreamedHttpBinding, oraz funkcje do mapowania każdego elementu konfiguracji na powiązanie.

    Zarejestruj program obsługi w systemie konfiguracji, dodając następującą sekcję do pliku konfiguracji usługi.

    <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>
    

    Sekcja konfiguracji serviceModel może następnie odwoływać się do procedury obsługi.

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

Aby skonfigurować, skompilować i uruchomić przykładowy program

  1. Zainstaluj ASP.NET 4.0 przy użyciu następującego polecenia.

    %windir%\Microsoft.NET\Framework\v4.0.XXXXX\aspnet_regiis.exe /i /enable
    
  2. Upewnij się, że zostały wykonane kroki wymienione w procedurze konfiguracjiOne-Time dla przykładów programu Windows Communication Foundation.

  3. Upewnij się, że wykonano instrukcje instalacji certyfikatu serwera usług Internet Information Services (IIS).

  4. Aby skompilować rozwiązanie, postępuj zgodnie z instrukcjami w temacie Building the Windows Communication Foundation Samples (Tworzenie przykładów programu Windows Communication Foundation).

  5. Aby uruchomić przykład w konfiguracji między maszynami, postępuj zgodnie z instrukcjami w temacie Uruchamianie przykładów programu Windows Communication Foundation.

  6. Gdy zostanie wyświetlone okno klienta, wpisz "Sample.txt". Powinieneś znaleźć "Kopię Sample.txt" w swoim katalogu.

Przykładowa usługa WSStreamedHttpBinding

Przykładowa usługa, która używa WSStreamedHttpBinding , znajduje się w podkatalogu usługi. Implementacja OperationContract używa MemoryStream, aby najpierw pobrać wszystkie dane ze strumienia przychodzącego przed zwróceniem MemoryStream. Przykładowa usługa jest hostowana przez usługi Internet Information Services (IIS).

[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;
    }
}

Przykładowy klient usługi WSStreamedHttpBinding

Klient, który jest używany do interakcji z usługą przy użyciu WSStreamedHttpBinding , znajduje się w podkatalogu klienta. Ponieważ certyfikat używany w tym przykładzie jest certyfikatem testowym utworzonym za pomocą Makecert.exe, alert zabezpieczeń jest wyświetlany podczas próby uzyskania dostępu do adresu HTTPS w przeglądarce, takiego jak https://localhost/servicemodelsamples/service.svc. Aby umożliwić klientowi programu WCF pracę z certyfikatem testowym, do klienta dodano dodatkowy kod w celu pomijania alertu zabezpieczeń. Kod i towarzysząca klasa nie są wymagane w przypadku korzystania z certyfikatów produkcyjnych.

// 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");