Notatka
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Przykład WSStreamedHttpBinding pokazuje, jak stworzyć powiązanie przeznaczone do obsługi scenariuszy przesyłania strumieniowego w przypadku użycia transportu HTTP.
Uwaga / Notatka
Procedura instalacji i instrukcje kompilacji dla tego przykładu znajdują się na końcu tego tematu.
Kroki tworzenia i konfigurowania nowego standardowego powiązania są następujące.
Tworzenie nowego standardowego powiązania
Powiązania standardowe w programie Windows Communication Foundation (WCF), takie jak basicHttpBinding i netTcpBinding, konfigurują bazowe transporty i stos kanałów pod kątem określonych wymagań. W tym przykładzie
WSStreamedHttpBindingkonfiguruje stos kanałów do obsługi przesyłania strumieniowego. Domyślnie WS-Security i niezawodne przesyłanie wiadomości nie są dodawane do stosu kanałów, ponieważ obie funkcje nie są obsługiwane przez transmisję strumieniową. Nowe powiązanie jest implementowane w klasieWSStreamedHttpBindingpochodzącej z klasy Binding.WSStreamedHttpBindingzawiera następujące elementy powiązania: HttpTransportBindingElement, HttpsTransportBindingElement, TransactionFlowBindingElement i TextMessageEncodingBindingElement. Klasa udostępnia metodęCreateBindingElements()konfigurowania wynikowego stosu powiązania, jak pokazano w poniższym przykładowym kodzie.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(); }Dodaj obsługę konfiguracji
Aby uwidocznić transport za pomocą konfiguracji, przykład implementuje dwie kolejne klasy —
WSStreamedHttpBindingConfigurationElementiWSStreamedHttpBindingSection. KlasaWSStreamedHttpBindingSectionjest StandardBindingCollectionElement<TStandardBinding,TBindingConfiguration>, która eksponujeWSStreamedHttpBindingw systemie konfiguracji WCF. Większość implementacji jest delegowana doWSStreamedHttpBindingConfigurationElement, która wywodzi się z StandardBindingElement. KlasaWSStreamedHttpBindingConfigurationElementma właściwości, które odpowiadają właściwościomWSStreamedHttpBinding, oraz funkcje do mapowania każdego elementu konfiguracji na powiązanie.Zarejestruj program obsługi w systemie konfiguracji, dodając następującą sekcję do pliku konfiguracji usługi.
<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>Sekcja konfiguracji serviceModel może następnie odwoływać się do procedury obsługi.
<configuration> <system.serviceModel> <client> <endpoint address="https://localhost/servicemodelsamples/service.svc" bindingConfiguration="Binding" binding="wsStreamedHttpBinding" contract="Microsoft.ServiceModel.Samples.IStreamedEchoService"/> </client> </system.serviceModel> </configuration>
Aby skonfigurować, skompilować i uruchomić przykładowy program
Zainstaluj ASP.NET 4.0 przy użyciu następującego polecenia.
%windir%\Microsoft.NET\Framework\v4.0.XXXXX\aspnet_regiis.exe /i /enableUpewnij się, że zostały wykonane kroki wymienione w procedurze konfiguracjiOne-Time dla przykładów programu Windows Communication Foundation.
Upewnij się, że wykonano instrukcje instalacji certyfikatu serwera usług Internet Information Services (IIS).
Aby skompilować rozwiązanie, postępuj zgodnie z instrukcjami w temacie Building the Windows Communication Foundation Samples (Tworzenie przykładów programu Windows Communication Foundation).
Aby uruchomić przykład w konfiguracji między maszynami, postępuj zgodnie z instrukcjami w temacie Uruchamianie przykładów programu Windows Communication Foundation.
Gdy zostanie wyświetlone okno klienta, wpisz "Sample.txt". Powinieneś znaleźć "Kopię Sample.txt" w swoim katalogu.
Przykładowa usługa WSStreamedHttpBinding
Przykładowa usługa, która używa WSStreamedHttpBinding , znajduje się w podkatalogu usługi. Implementacja OperationContract używa MemoryStream, aby najpierw pobrać wszystkie dane ze strumienia przychodzącego przed zwróceniem MemoryStream. Przykładowa usługa jest hostowana przez usługi 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;
}
}
Przykładowy klient usługi WSStreamedHttpBinding
Klient, który jest używany do interakcji z usługą przy użyciu WSStreamedHttpBinding , znajduje się w podkatalogu klienta. Ponieważ certyfikat używany w tym przykładzie jest certyfikatem testowym utworzonym za pomocą Makecert.exe, alert zabezpieczeń jest wyświetlany podczas próby uzyskania dostępu do adresu HTTPS w przeglądarce, takiego jak https://localhost/servicemodelsamples/service.svc. Aby umożliwić klientowi programu WCF pracę z certyfikatem testowym, do klienta dodano dodatkowy kod w celu pomijania alertu zabezpieczeń. Kod i towarzysząca klasa nie są wymagane w przypadku korzystania z certyfikatów produkcyjnych.
// 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");