WSStreamedHttpBinding

L'esempio WSStreamedHttpBinding illustra come creare un'associazione progettata per supportare scenari di streaming quando viene usato il trasporto HTTP.

Annotazioni

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. Creare un nuovo vincolo standard

    Le associazioni standard in Windows Communication Foundation (WCF) come basicHttpBinding e netTcpBinding configurano i trasporti e lo stack di canali sottostanti per requisiti specifici. In questo esempio WSStreamedHttpBinding viene configurato lo stack di canali per supportare lo streaming. Per impostazione predefinita, WS-Security e la messaggistica affidabile non vengono aggiunte allo stack di canali perché entrambe le funzionalità non sono supportate dallo streaming. La nuova associazione viene implementata nella classe WSStreamedHttpBinding che deriva da Binding. WSStreamedHttpBinding Contiene gli elementi di associazione seguenti: HttpTransportBindingElement, HttpsTransportBindingElement, TransactionFlowBindingElemente TextMessageEncodingBindingElement. La classe fornisce un CreateBindingElements() metodo per configurare lo stack di binding risultante, come illustrato nel codice di esempio 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. Aggiungere il supporto per la configurazione

    Per esporre il trasporto tramite la configurazione, l'esempio implementa altre due classi,WSStreamedHttpBindingConfigurationElement e WSStreamedHttpBindingSection. La classe WSStreamedHttpBindingSection è un oggetto StandardBindingCollectionElement<TStandardBinding,TBindingConfiguration> che espone WSStreamedHttpBinding al sistema di configurazione WCF. La maggior parte dell'implementazione viene delegata a WSStreamedHttpBindingConfigurationElement, che deriva da StandardBindingElement. La classe WSStreamedHttpBindingConfigurationElement dispone di proprietà che corrispondono alle proprietà di WSStreamedHttpBinding, e funzioni per eseguire il mapping di ogni elemento di configurazione a un'associazione.

    Registrare il gestore con il 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>
    

    È quindi 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 configurare, 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 in One-Time Procedura di installazione 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 riportate in Compilazione degli esempi di Windows Communication Foundation.

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

  6. Quando viene visualizzata la finestra del client, digitare "Sample.txt". Nella tua directory dovrebbe essere presente una "copia di Sample.txt".

Servizio di esempio WSStreamedHttpBinding

Il servizio di esempio che utilizza WSStreamedHttpBinding si trova nella sottodirectory del servizio. L'implementazione di OperationContract utilizza un MemoryStream per prima recuperare tutti i dati dal flusso in ingresso prima di restituire il MemoryStream. Il servizio di esempio è 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;
    }
}

Il client di esempio WSStreamedHttpBinding

Il client usato per interagire con il servizio tramite WSStreamedHttpBinding si trova nella sottodirectory client. Poiché il certificato usato in questo esempio è un certificato di test creato con Makecert.exe, viene visualizzato un avviso di sicurezza 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 test sul posto, è stato aggiunto un codice aggiuntivo al client per eliminare l'avviso di sicurezza. Il codice e la classe associata non sono necessari quando si usano 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");