WSStreamedHttpBinding

Ukázka WSStreamedHttpBinding ukazuje, jak vytvořit vazbu, která je navržená tak, aby podporovala scénáře streamování při použití přenosu HTTP.

Poznámka:

Postup nastavení a pokyny k sestavení pro tuto ukázku najdete na konci tohoto tématu.

Postup vytvoření a konfigurace nové standardní vazby je následující.

  1. Vytvořte novou standardní vazbu

    Standardní vazby ve Windows Communication Foundation (WCF), jako je basicHttpBinding a netTcpBinding, konfigurují základní přenosy a zásobník kanálů pro konkrétní požadavky. V této ukázce zásobník kanálu WSStreamedHttpBinding nakonfiguruje tak, aby podporoval streamování. Ve výchozím nastavení se do zásobníku kanálů nepřidávají WS-Security a spolehlivé zasílání zpráv, protože streamování nepodporuje obě funkce. Nová vazba je implementována ve třídě WSStreamedHttpBinding , která je odvozena z Binding. Obsahuje WSStreamedHttpBinding následující prvky vazby: HttpTransportBindingElement, HttpsTransportBindingElement, TransactionFlowBindingElementa TextMessageEncodingBindingElement. Třída poskytuje metodu CreateBindingElements() pro konfiguraci výsledného zásobníku vazeb, jak je znázorněno v následujícím vzorovém kódu.

    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. Přidání podpory konfigurace

    Pro zveřejnění přenosu prostřednictvím konfigurace ukázka implementuje dvě další třídy –WSStreamedHttpBindingConfigurationElement a WSStreamedHttpBindingSection. Třída WSStreamedHttpBindingSection je StandardBindingCollectionElement<TStandardBinding,TBindingConfiguration>, která zveřejňuje WSStreamedHttpBinding konfiguračnímu systému WCF. Část implementace je delegována na WSStreamedHttpBindingConfigurationElement, která je odvozena od StandardBindingElement. Třída WSStreamedHttpBindingConfigurationElement má vlastnosti, které odpovídají vlastnostem WSStreamedHttpBinding a funkce k mapování každého konfiguračního prvku na vazbu.

    Zaregistrujte obslužnou rutinu v konfiguračním systému přidáním následující části do konfiguračního souboru služby.

    <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>
    

    Na obslužnou rutinu se pak dá odkazovat z konfiguračního oddílu 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>
    

Jak nastavit, sestavit a spustit ukázku

  1. Pomocí následujícího příkazu nainstalujte ASP.NET 4.0.

    %windir%\Microsoft.NET\Framework\v4.0.XXXXX\aspnet_regiis.exe /i /enable
    
  2. Ujistěte se, že jste provedli kroky uvedené v One-Time instalačním postupu pro ukázky Windows Communication Foundation.

  3. Ujistěte se, že jste provedli pokyny k instalaci certifikátu internetové informační služby (IIS).

  4. Pro sestavení řešení postupujte podle pokynů v Sestavení ukázek Windows Communication Foundation.

  5. Pokud chcete spustit ukázku v konfiguraci mezi počítači, postupujte podle pokynů v Pokyny pro spuštění ukázek Windows Communication Foundation.

  6. Když se zobrazí okno klienta, zadejte "Sample.txt". V adresáři byste měli najít kopii Sample.txt.

Ukázková služba WSStreamedHttpBinding

Ukázková služba, která používá WSStreamedHttpBinding, se nachází v podadresáři služby. Implementace OperationContract používá MemoryStream k prvnímu načtení všech dat z příchozího proudu, než vrátí MemoryStream. Ukázkovou službu hostuje Internetová informační služba (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;
    }
}

Ukázkový klient WSStreamedHttpBinding

Klient, který se používá k interakci se službou pomocí WSStreamedHttpBinding , se nachází v podadresáři klienta. Vzhledem k tomu, že certifikát použitý v této ukázce je testovací certifikát vytvořený pomocí Makecert.exe, zobrazí se výstraha zabezpečení při pokusu o přístup k adrese HTTPS v prohlížeči, například https://localhost/servicemodelsamples/service.svc. Aby klient WCF mohl pracovat s testovacím certifikátem, byl do klienta přidán další kód, který potlačí výstrahu zabezpečení. Kód a doprovodná třída nejsou při použití produkčních certifikátů vyžadovány.

// 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");