Freigeben über


WSStreamedHttpBinding

Das Beispiel veranschaulicht, wie eine Bindung erstellt wird, die Streamingszenarios unterstützt, wenn HTTP-Transport verwendet wird.

Tipp

Die Setupprozedur und die Buildanweisungen für dieses Beispiel befinden sich am Ende dieses Themas.

Zum Erstellen und Konfigurieren einer neuen Standardbindung müssen folgende Schritte ausgeführt werden.

  1. Erstellen einer neuen Standardbindung
    Die Standardbindungen in Windows Communication Foundation (WCF), z. B. basicHttpBinding und netTcpBinding, konfigurieren die zugrunde liegenden Transporte und Kanalstapel für bestimmte Anforderungen. In diesem Beispiel konfiguriert WSStreamedHttpBinding den Kanalstapel, um Streaming zu unterstützen. Standardmäßig werden WS-Sicherheit und zuverlässiges Messaging nicht zum Kanalstapel hinzugefügt, da beide Features nicht vom Streaming unterstützt werden. Die neue Bindung wird in die Klasse WSStreamedHttpBinding implementiert, die von Binding abgeleitet ist. WSStreamedHttpBinding enthält die folgenden Bindungselemente: HttpTransportBindingElement, HttpsTransportBindingElement, TransactionFlowBindingElement und TextMessageEncodingBindingElement. Die Klasse stellt eine CreateBindingElements()-Methode bereit, um den resultierenden Bindungsstapel zu konfigurieren, wie im folgenden Codebeispiel gezeigt.

    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ützung
    Im Beispiel werden zwei weitere Klassen – WSStreamedHttpBindingConfigurationElement und WSStreamedHttpBindingSection – implementiert, um den Transport durch Konfiguration verfügbar zu machen. Die Klasse WSStreamedHttpBindingSection ist ein StandardBindingCollectionElement, das die WSStreamedHttpBinding für das WCF-Konfigurationssystem verfügbar macht. Der Großteil der Implementierung wird dem WSStreamedHttpBindingConfigurationElement übertragen, das von StandardBindingElement abgeleitet wird. Die Klasse WSStreamedHttpBindingConfigurationElement verfügt über Eigenschaften, die mit den Eigenschaften von WSStreamedHttpBinding übereinstimmen, sowie über Funktionen, um jedes Konfigurationselement einer Bindung zuzuordnen.
    Registrieren Sie den Handler mit dem Konfigurationssystem, indem Sie den folgenden Abschnitt zur Konfigurationsdatei des Diensts hinzufügen.

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

    <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 richten Sie das Beispiel ein, erstellen es und führen es aus

  1. Stellen Sie sicher, dass Sie unter Beispiele zum einmaligen Setupverfahren für Windows Communication Foundation aufgeführten Schritte ausgeführt haben.

  2. Stellen Sie sicher, dass Sie die Installationsanleitung für IIS-Serverzertifikate ausgeführt haben.

  3. Befolgen Sie zum Erstellen der Projektmappe die Anweisungen unter Erstellen der Windows Communication Foundation-Beispiele.

  4. Wenn Sie das Beispiel in einer computerübergreifenden Konfiguration ausführen möchten, folgen Sie den unter Durchführen der Windows Communication Foundation-Beispiele aufgeführten Anweisungen.

  5. Wenn das Clientfenster angezeigt wird, geben Sie "Sample.txt" ein. In Ihrem Verzeichnis sollte sich eine Datei "Copy of Sample.txt" befinden.

Der WSStreamedHttpBinding-Beispieldienst

Der Beispieldienst, der die WSStreamedHttpBinding verwendet, befindet sich im Dienstunterverzeichnis. Die Implementierung von OperationContract verwendet einen MemoryStream, um zuerst alle Daten vom eingehenden Stream abzurufen, bevor der MemoryStream zurückgegeben wird. Der Beispieldienst wird von Internetinformationsdiensten (IIS) gehostet.

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

Der Client, der für die Interaktion mit dem Dienst über WSStreamedHttpBinding verwendet wird, befindet sich im Clientunterverzeichnis. 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. Damit der WCF-Client mit einem vorhandenen Testzertifikat arbeiten kann, muss auf dem Client zusätzlicher Code hinzugefügt werden, um die Sicherheitswarnung zu unterdrücken. Der Code und die begleitende Klasse sind bei der Verwendung von Produktionszertifikaten nicht erforderlich.

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

Send comments about this topic to Microsoft.
© 2007 Microsoft Corporation. All rights reserved.