WSStreamedHttpBinding

Nell'esempio WSStreamedHttpBinding, 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 compilazione per questo esempio si trovano alla fine di questo argomento.

I passaggi per creare e configurare una nuova associazione standard sono i seguenti.

  1. Creazione di una nuova associazione standard

    Le associazioni standard di Windows Communication Foundation (WCF), come basicHttpBinding e netTcpBinding configurano i trasporti sottostanti e i stack di canali per i requisiti specifici. In questo esempio, WSStreamedHttpBinding configura 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 classe WSStreamedHttpBinding che deriva da Binding. WSStreamedHttpBinding contiene i seguenti elementi di associazione: HttpTransportBindingElement, HttpsTransportBindingElement, TransactionFlowBindingElement e TextMessageEncodingBindingElement. La classe fornisce un metodo CreateBindingElements() 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();
    }
    
  2. Aggiunta del supporto di configurazione

    Per esporre il trasporto tramite la configurazione l'esempio implementa altre due classi: WSStreamedHttpBindingConfigurationElement e WSStreamedHttpBindingSection. La classe WSStreamedHttpBindingSection è una classe StandardBindingCollectionElement<TStandardBinding,TBindingConfiguration> che espone WSStreamedHttpBinding al sistema di configurazione di WCF. La maggior parte dell'implementazione viene delegata a WSStreamedHttpBindingConfigurationElement che deriva da StandardBindingElement. La classe WSStreamedHttpBindingConfigurationElement è dotata delle proprietà che corrispondono alle proprietà di WSStreamedHttpBinding e 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

  1. Installare ASP.NET 4.0 usando il comando seguente.

    %windir%\Microsoft.NET\Framework\v4.0.XXXXX\aspnet_regiis.exe /i /enable
    
  2. Assicurarsi di aver eseguito i passaggi elencati nella Procedura di installazione singola per gli esempi di Windows Communication Foundation.

  3. Assicurarsi di aver eseguito le Istruzioni per l'installazione dei certificati del server Internet Information Services (IIS).

  4. Per compilare la soluzione, seguire le istruzioni in Compilazione degli esempi di Windows Communication Foundation.

  5. Per eseguire l'esempio tra computer diversi, seguire le istruzioni in Esecuzione degli esempi di Windows Communication Foundation.

  6. 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 usato in questo esempio è un certificato di prova creato con Makecert.exe, viene visualizzato un avviso di sicurezza quando si tenta di accedere a un indirizzo HTTPS, quale https://localhost/servicemodelsamples/service.svc, dal browser. Per consentire al client WCF di lavorare con un certificato di prova, è stato aggiunto altro codice al client per sopprimere l'avviso di sicurezza. 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");