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.
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.
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
WSStreamedHttpBindingso 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 KlasseWSStreamedHttpBindingimplementiert, die von Binding abgeleitet ist. DiesWSStreamedHttpBindingenthält die folgenden Bindungselemente: HttpTransportBindingElement, , HttpsTransportBindingElement, TransactionFlowBindingElementund TextMessageEncodingBindingElement. Die Klasse stellt eineCreateBindingElements()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(); }Hinzufügen der Konfigurationsunterstützung
Um den Transport über die Konfiguration verfügbar zu machen, implementiert das Beispiel zwei weitere Klassen –
WSStreamedHttpBindingConfigurationElementundWSStreamedHttpBindingSection. Die KlasseWSStreamedHttpBindingSectionist ein StandardBindingCollectionElement<TStandardBinding,TBindingConfiguration>, das dieWSStreamedHttpBindingfür das WCF-Konfigurationssystem verfügbar macht. Der Großteil der Implementierung wird anWSStreamedHttpBindingConfigurationElementdelegiert, das sich von StandardBindingElement ableitet. Die KlasseWSStreamedHttpBindingConfigurationElementverfügt über Eigenschaften, die den Eigenschaften vonWSStreamedHttpBinding, 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
Installieren Sie ASP.NET 4.0 mit dem folgenden Befehl.
%windir%\Microsoft.NET\Framework\v4.0.XXXXX\aspnet_regiis.exe /i /enableStellen Sie sicher, dass Sie die in One-Time Setupprozedur für die Windows Communication Foundation-Beispiele aufgeführten Schritte ausgeführt haben.
Stellen Sie sicher, dass Sie die Iis-Serverzertifikatinstallationsanweisungen (Internet Information Services) ausgeführt haben.
Befolgen Sie zum Erstellen der Lösung die Anweisungen im Abschnitt Erstellen der Windows Communication Foundation-Beispiele.
Führen Sie zum Ausführen des Beispiels in einer computerübergreifenden Konfiguration die Anweisungen unter Ausführen der Windows Communication Foundation-Beispiele aus.
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");