WSStreamedHttpBindingWSStreamedHttpBinding

Das Beispiel veranschaulicht, wie eine Bindung erstellt wird, die Streamingszenarios unterstützt, wenn HTTP-Transport verwendet wird.The sample demonstrates how to create a binding that is designed to support streaming scenarios when the HTTP transport is used.

Hinweis

Die Setupprozedur und die Buildanweisungen für dieses Beispiel befinden sich am Ende dieses Themas.The setup procedure and build instructions for this sample are located at the end of this topic.

Wichtig

Die Beispiele sind möglicherweise bereits auf dem Computer installiert.The samples may already be installed on your machine. Suchen Sie nach dem folgenden Verzeichnis (Standardverzeichnis), bevor Sie fortfahren.Check for the following (default) directory before continuing.

<InstallDrive>:\WF_WCF_Samples

Wenn dieses Verzeichnis nicht vorhanden ist, rufen Sie Windows Communication Foundation (WCF) and Windows Workflow Foundation (WF) Samples for .NET Framework 4 auf, um alle Windows Communication Foundation (WCF)Windows Communication Foundation (WCF) - und WFWF -Beispiele herunterzuladen.If this directory does not exist, go to Windows Communication Foundation (WCF) and Windows Workflow Foundation (WF) Samples for .NET Framework 4 to download all Windows Communication Foundation (WCF)Windows Communication Foundation (WCF) and WFWF samples. Dieses Beispiel befindet sich im folgenden Verzeichnis.This sample is located in the following directory.

<InstallDrive>:\WF_WCF_Samples\WCF\Extensibility\Binding\WSStreamedHttpBinding

Zum Erstellen und Konfigurieren einer neuen Standardbindung müssen folgende Schritte ausgeführt werden.The steps to create and configure a new standard binding are as follows.

  1. Erstellen einer neuen StandardbindungCreate a new standard binding

    Die Standardbindungen in Windows Communication Foundation (WCF)Windows Communication Foundation (WCF), z. B. basicHttpBinding und netTcpBinding, konfigurieren die zugrunde liegenden Transporte und Kanalstapel für bestimmte Anforderungen.The standard bindings in Windows Communication Foundation (WCF)Windows Communication Foundation (WCF) such as basicHttpBinding, and netTcpBinding configure the underlying transports and channel stack for specific requirements. In diesem Beispiel konfiguriert WSStreamedHttpBinding den Kanalstapel, um Streaming zu unterstützen.In this sample, WSStreamedHttpBinding configures the channel stack to support streaming. Standardmäßig werden WS-Sicherheit und zuverlässiges Messaging nicht zum Kanalstapel hinzugefügt, da beide Funktionen nicht vom Streaming unterstützt werden.By default, WS-Security and reliable messaging are not added to the channel stack because both features are not supported by streaming. Die neue Bindung wird in die Klasse WSStreamedHttpBinding implementiert, die von Binding abgeleitet ist.The new binding is implemented in the class WSStreamedHttpBinding that derives from Binding. WSStreamedHttpBinding enthält die folgenden Bindungselemente: HttpTransportBindingElement, HttpsTransportBindingElement, TransactionFlowBindingElement und TextMessageEncodingBindingElement.The WSStreamedHttpBinding contains the following binding elements: HttpTransportBindingElement, HttpsTransportBindingElement, TransactionFlowBindingElement, and TextMessageEncodingBindingElement. Die Klasse stellt eine CreateBindingElements()-Methode bereit, um den resultierenden Bindungsstapel zu konfigurieren, wie im folgenden Codebeispiel gezeigt.The class provides a CreateBindingElements() method to configure the resulting binding stack, as shown in the following sample code.

    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. Hinzufügen von KonfigurationsunterstützungAdd configuration support

    Im Beispiel werden zwei weitere Klassen – WSStreamedHttpBindingConfigurationElement und WSStreamedHttpBindingSection – implementiert, um den Transport durch Konfiguration verfügbar zu machen.To expose the transport through configuration the sample implements two more classes—WSStreamedHttpBindingConfigurationElement and WSStreamedHttpBindingSection. Die Klasse WSStreamedHttpBindingSection ist ein StandardBindingCollectionElement<TStandardBinding,TBindingConfiguration>, das die WSStreamedHttpBinding für das WCFWCF-Konfigurationssystem verfügbar macht.The class WSStreamedHttpBindingSection is a StandardBindingCollectionElement<TStandardBinding,TBindingConfiguration> that exposes WSStreamedHttpBinding to the WCFWCF configuration system. Der Großteil der Implementierung wird dem WSStreamedHttpBindingConfigurationElement übertragen, das von StandardBindingElement abgeleitet wird.The bulk of the implementation is delegated to WSStreamedHttpBindingConfigurationElement, which derives from StandardBindingElement. Die Klasse WSStreamedHttpBindingConfigurationElement verfügt über Eigenschaften, die mit den Eigenschaften von WSStreamedHttpBinding übereinstimmen, sowie über Funktionen, um jedes Konfigurationselement einer Bindung zuzuordnen.The class WSStreamedHttpBindingConfigurationElement has properties that correspond to the properties of WSStreamedHttpBinding, and functions to map each configuration element to a binding.

    Registrieren Sie den Handler mit dem Konfigurationssystem, indem Sie den folgenden Abschnitt zur Konfigurationsdatei des Diensts hinzufügen.Register the handler with the configuration system, by adding the following section to the service's configuration file.

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

    Auf den Handler kann vom serviceModel-Konfigurationsabschnitt aus verwiesen werden.The handler can then be referenced from the serviceModel configuration section.

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

So können Sie das Beispiel einrichten, erstellen und ausführenTo set up, build, and run the sample

  1. Installieren Sie ASP.NETASP.NET 4.0 mithilfe des folgenden Befehls.Install ASP.NETASP.NET 4.0 using the following command.

    %windir%\Microsoft.NET\Framework\v4.0.XXXXX\aspnet_regiis.exe /i /enable  
    
  2. Stellen Sie sicher, dass Sie die Schritte unter ausgeführt haben Setupprozedur für die Windows Communication Foundation-Beispiele zum einmaligen.Ensure that you have performed the steps listed in One-Time Setup Procedure for the Windows Communication Foundation Samples.

  3. Stellen Sie sicher, dass Sie ausgeführt haben die Installationsanweisungen für Internetinformationsdienste (Internet Information Services, IIS) Server Zertifikat.Ensure that you have performed the Internet Information Services (IIS) Server Certificate Installation Instructions.

  4. Führen Sie zum Erstellen der Projektmappe die Anweisungen im Erstellen der Windows Communication Foundation-Beispiele.To build the solution, follow the instructions in Building the Windows Communication Foundation Samples.

  5. Um das Beispiel in einer computerübergreifenden Konfiguration ausführen möchten, folgen Sie den Anweisungen Ausführen der Windows Communication Foundation-Beispiele.To run the sample in a cross-machine configuration, follow the instructions in Running the Windows Communication Foundation Samples.

  6. Wenn das Clientfenster angezeigt wird, geben Sie "Sample.txt" ein.When the client window displays, type "Sample.txt". In Ihrem Verzeichnis sollte sich eine Datei "Copy of Sample.txt" befinden.You should find a "Copy of Sample.txt" in your directory.

Der WSStreamedHttpBinding-BeispieldienstThe WSStreamedHttpBinding Sample Service

Der Beispieldienst, der die WSStreamedHttpBinding verwendet, befindet sich im Dienstunterverzeichnis.The sample service that uses WSStreamedHttpBinding is located in the service subdirectory. Die Implementierung von OperationContract verwendet einen MemoryStream, um zuerst alle Daten vom eingehenden Stream abzurufen, bevor der MemoryStream zurückgegeben wird.The implementation of OperationContract uses a MemoryStream to first retrieve all data from the incoming stream before returning the MemoryStream. Der Beispieldienst wird von Internetinformationsdiensten (IIS) gehostet.The sample service is hosted by 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;  
    }  
}  

Der WSStreamedHttpBinding-BeispielclientThe WSStreamedHttpBinding Sample Client

Der Client, der für die Interaktion mit dem Dienst über WSStreamedHttpBinding verwendet wird, befindet sich im Clientunterverzeichnis.The client that is used to interact with the service using WSStreamedHttpBinding is located in the client subdirectory. Da das in diesem Beispiel verwendete Zertifikat ein mit Makecert.exe erstelltes Testzertifikat ist, wird eine Sicherheitswarnung angezeigt, wenn Sie versuchen, in Ihrem Browser auf eine HTTPS-Adresse wie https://localhost/servicemodelsamples/service.svc zuzugreifen.Because the certificate used in this sample is a test certificate created with Makecert.exe, a security alert displays when you attempt to access an HTTPS address in your browser such as https://localhost/servicemodelsamples/service.svc. Damit der WCFWCF-Client mit einem vorhandenen Testzertifikat arbeiten kann, muss auf dem Client zusätzlicher Code hinzugefügt werden, um die Sicherheitswarnung zu unterdrücken.To allow the WCFWCF client to work with a test certificate in place, some additional code has been added to the client to suppress the security alert. Der Code und die begleitende Klasse sind bei der Verwendung von Produktionszertifikaten nicht erforderlich.The code and the accompanying class are not required when using production certificates.

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

Siehe auchSee Also