Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
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.
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 konfiguriertWSStreamedHttpBindingden 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 KlasseWSStreamedHttpBindingimplementiert, die von Binding abgeleitet ist.WSStreamedHttpBindingenthält die folgenden Bindungselemente: HttpTransportBindingElement, HttpsTransportBindingElement, TransactionFlowBindingElement und TextMessageEncodingBindingElement. Die Klasse stellt eineCreateBindingElements()-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(); }Hinzufügen von Konfigurationsunterstützung
Im Beispiel werden zwei weitere Klassen –WSStreamedHttpBindingConfigurationElementundWSStreamedHttpBindingSection– implementiert, um den Transport durch Konfiguration verfügbar zu machen. Die KlasseWSStreamedHttpBindingSectionist ein StandardBindingCollectionElement, das dieWSStreamedHttpBindingfür das WCF-Konfigurationssystem verfügbar macht. Der Großteil der Implementierung wird demWSStreamedHttpBindingConfigurationElementübertragen, das von StandardBindingElement abgeleitet wird. Die KlasseWSStreamedHttpBindingConfigurationElementverfügt über Eigenschaften, die mit den Eigenschaften vonWSStreamedHttpBindingü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
Stellen Sie sicher, dass Sie unter Beispiele zum einmaligen Setupverfahren für Windows Communication Foundation aufgeführten Schritte ausgeführt haben.
Stellen Sie sicher, dass Sie die Installationsanleitung für IIS-Serverzertifikate ausgeführt haben.
Befolgen Sie zum Erstellen der Projektmappe die Anweisungen unter Erstellen der Windows Communication Foundation-Beispiele.
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.
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.