Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Nell'esempio viene illustrato come creare un'associazione progettata per supportare scenari basati sul flusso quando viene utilizzato il trasporto HTTP.
Nota
La procedura di installazione e le istruzioni di generazione per questo esempio si trovano alla fine di questo argomento.
I passaggi per creare e configurare una nuova associazione standard sono i seguenti.
Creazione di una nuova associazione standard
Le associazioni standard di Windows Communication Foundation (WCF), ad esempio basicHttpBinding e netTcpBinding configurano i trasporti sottostanti e i stack di canali per i requisiti specifici. In questo esempio,WSStreamedHttpBindingconfigura lo stack di canali per supportare il flusso. Per impostazione predefinita, WS-Security e la messaggistica affidabile non vengono aggiunti allo stack di canali perché entrambi le funzionalità non sono supportate dal flusso. La nuova associazione viene implementata nella classeWSStreamedHttpBindingche deriva da Binding.WSStreamedHttpBindingcontiene i seguenti elementi di associazione: HttpTransportBindingElement, HttpsTransportBindingElement, TransactionFlowBindingElement e TextMessageEncodingBindingElement. La classe fornisce un metodoCreateBindingElements()per configurare lo stack dell'associazione risultante, come illustrato nell'esempio di codice seguente.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(); }Aggiunta del supporto di configurazione
Per esporre il trasporto tramite la configurazione l'esempio implementa altre due classi:WSStreamedHttpBindingConfigurationElementeWSStreamedHttpBindingSection. La classeWSStreamedHttpBindingSectionè una classe StandardBindingCollectionElement che esponeWSStreamedHttpBindingal sistema di configurazione di WCF. La maggior parte dell'implementazione viene delegata aWSStreamedHttpBindingConfigurationElementche deriva da StandardBindingElement. La classeWSStreamedHttpBindingConfigurationElementè dotata delle proprietà che corrispondono alle proprietà diWSStreamedHttpBindinge funzioni che consentono di eseguire il mapping di ogni elemento di configurazione a un'associazione.
Registrare il gestore nel sistema di configurazione, aggiungendo la sezione seguente al file di configurazione del servizio.<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>È possibile fare riferimento al gestore dalla sezione di configurazione serviceModel.
<configuration> <system.serviceModel> <client> <endpoint address="https://localhost/servicemodelsamples/service.svc" bindingConfiguration="Binding" binding="wsStreamedHttpBinding" contract="Microsoft.ServiceModel.Samples.IStreamedEchoService"/> </client> </system.serviceModel> </configuration>
Per impostare, compilare ed eseguire l'esempio
Assicurarsi di aver eseguito i passaggi elencati in Procedura di installazione singola per gli esempi di Windows Communication Foundation.
Assicurarsi di aver eseguito la Istruzioni di installazione certificato server IIS (Internet Information Services).
Per generare la soluzione, seguire le istruzioni in Generazione degli esempi Windows Communication Foundation.
Per eseguire l'esempio tra computer diversi, seguire le istruzioni in Esecuzione degli esempi di Windows Communication Foundation.
Quando viene visualizzata la finestra client, digitare "Esempio.txt." Nella directory dovrebbe essere presente una "Copia di Esempio.txt".
Esempio di servizio WSStreamedHttpBinding
L'esempio di servizio che utilizza WSStreamedHttpBinding si trova nella sottodirectory del servizio. L'implementazione di OperationContract utilizza un MemoryStream per recuperare tutti i dati dal flusso in ingresso prima di restituire MemoryStream. L'esempio di servizio è ospitato da 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;
}
}
Esempio di Client WSStreamedHttpBinding
Il client utilizzato per interagire con il servizio utilizzando WSStreamedHttpBinding si trova nella sottodirectory client. Poiché il certificato utilizzato in questo esempio è un certificato di prova creato con Makecert.exe, viene visualizzato un avviso di protezione quando si tenta di accedere a un indirizzo HTTPS nel browser, ad esempio https://localhost/servicemodelsamples/service.svc. Per consentire al client WCF di lavorare con un certificato di prova, è stato aggiunto altro codice al client per sopprimere l'avviso di protezione. Il codice e la classe associata non sono richiesti quando si utilizzano i certificati di produzione.
// 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.