WSStreamedHttpBinding

Im WSStreamedHttpBinding-Beispiel wird veranschaulicht, wie eine Bindung erstellt wird, die zum Unterstützen von Streamingszenarien konzipiert ist, wenn der HTTP-Transport verwendet wird.

Hinweis

Die Einrichtungsverfahren und Build-Anweisungen für dieses Beispiel befinden sich am Ende dieses Themas.

Die Schritte zum Erstellen und Konfigurieren einer neuen Standardbindung lauten wie folgt.

  1. Erstellen einer neuen Standardbindung

    Die Standardbindungen in Windows Communication Foundation (WCF) wie basicHttpBinding und netTcpBinding konfigurieren die zugrunde liegenden Transporte und Kanalstapel für bestimmte Anforderungen. In diesem Beispiel wird der Kanalstapel WSStreamedHttpBinding so konfiguriert, dass Streaming unterstützt wird. Standardmäßig werden WS-Security und zuverlässige Nachrichten nicht zum Kanalstapel hinzugefügt, da beide Features nicht vom Streaming unterstützt werden. Die neue Bindung wird in der Klasse WSStreamedHttpBinding implementiert, die von Binding abgeleitet ist. Dies WSStreamedHttpBinding enthält die folgenden Bindungselemente: HttpTransportBindingElement, , HttpsTransportBindingElement, TransactionFlowBindingElementund TextMessageEncodingBindingElement. Die Klasse stellt eine CreateBindingElements() Methode zum Konfigurieren des resultierenden Bindungsstapels bereit, wie im folgenden Beispielcode 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 der Konfigurationsunterstützung

    Um den Transport über die Konfiguration verfügbar zu machen, implementiert das Beispiel zwei weitere Klassen –WSStreamedHttpBindingConfigurationElement und WSStreamedHttpBindingSection. Die Klasse WSStreamedHttpBindingSection ist ein StandardBindingCollectionElement<TStandardBinding,TBindingConfiguration>, das die WSStreamedHttpBinding für das WCF-Konfigurationssystem verfügbar macht. Der Großteil der Implementierung wird an WSStreamedHttpBindingConfigurationElement delegiert, das sich von StandardBindingElement ableitet. Die Klasse WSStreamedHttpBindingConfigurationElement verfügt über Eigenschaften, die den Eigenschaften von WSStreamedHttpBinding, und Funktionen entsprechen, um jedes Konfigurationselement einer Bindung zuzuordnen.

    Registrieren Sie den Handler beim 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>
    

    Der Handler kann dann über den ServiceModel-Konfigurationsabschnitt referenziert 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 können Sie das Beispiel einrichten, erstellen und ausführen

  1. Installieren Sie ASP.NET 4.0 mit dem folgenden Befehl.

    %windir%\Microsoft.NET\Framework\v4.0.XXXXX\aspnet_regiis.exe /i /enable
    
  2. Stellen Sie sicher, dass Sie die in One-Time Setupprozedur für die Windows Communication Foundation-Beispiele aufgeführten Schritte ausgeführt haben.

  3. Stellen Sie sicher, dass Sie die Iis-Serverzertifikatinstallationsanweisungen (Internet Information Services) ausgeführt haben.

  4. Befolgen Sie zum Erstellen der Lösung die Anweisungen im Abschnitt Erstellen der Windows Communication Foundation-Beispiele.

  5. Führen Sie zum Ausführen des Beispiels in einer computerübergreifenden Konfiguration die Anweisungen unter Ausführen der Windows Communication Foundation-Beispiele aus.

  6. 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 Internetinformationsdienste (Internet Information Services, 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 über WSStreamedHttpBinding zur Interaktion mit dem Dienst verwendet wird, befindet sich im Client-Unterverzeichnis. Da das in diesem Beispiel verwendete Zertifikat ein Testzertifikat ist, das mit dem Makecert.exeerstellt wurde, wird eine Sicherheitswarnung angezeigt, wenn Sie versuchen, auf eine HTTPS-Adresse in Ihrem Browser zuzugreifen, wie z.B. https://localhost/servicemodelsamples/service.svc. Damit der WCF-Client mit einem Testzertifikat arbeiten kann, wurde dem Client zusätzlicher Code hinzugefügt, um die Sicherheitswarnung zu unterdrücken. Der Code und die zugehörige Klasse sind bei 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");