Sdílet prostřednictvím


Aktivace pojmenovaného kanálu

Ukázka NamedPipeActivation ukazuje hostování služby, která používá službu aktivace procesu systému Windows (WAS) k aktivaci služby, která komunikuje přes pojmenované kanály. Tato ukázka je založená na začínáme a vyžaduje, aby byl spuštěn systém Windows Vista.

Poznámka:

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

Ukázkové podrobnosti

Ukázka se skládá z programu konzoly klienta (.exe) a knihovny služeb (.dll) hostované v pracovním procesu aktivovaném službou WINDOWS Process Activation Services (WAS). Aktivita klienta je viditelná v okně konzoly.

Služba implementuje kontrakt, který definuje komunikační vzor žádosti a odpovědi. Kontrakt je definován ICalculator rozhraním, které zveřejňuje matematické operace (sčítání, odčítání, násobení a dělení), jak je znázorněno v následujícím vzorovém kódu.

[ServiceContract(Namespace="http://Microsoft.ServiceModel.Samples")]
public interface ICalculator
{
    [OperationContract]
    double Add(double n1, double n2);
    [OperationContract]
    double Subtract(double n1, double n2);
    [OperationContract]
    double Multiply(double n1, double n2);
    [OperationContract]
    double Divide(double n1, double n2);
}

Klient provádí synchronní požadavky na danou matematickou operaci a implementace služby vypočítá a vrátí odpovídající výsledek.

// Service class that implements the service contract.
public class CalculatorService : ICalculator
{
    public double Add(double n1, double n2)
    {
        return n1 + n2;
    }
    public double Subtract(double n1, double n2)
    {
        return n1 - n2;
    }
    public double Multiply(double n1, double n2)
    {
        return n1 * n2;
    }
    public double Divide(double n1, double n2)
    {
        return n1 / n2;
    }
}

Ukázka používá upravenou netNamedPipeBinding vazbu bez zabezpečení. Vazba je určena v konfiguračních souborech klienta a služby. Typ vazby pro službu je zadán v atributu elementu koncového binding bodu, jak je znázorněno v následující ukázkové konfiguraci.

Pokud chcete použít zabezpečenou pojmenovanou vazbu kanálu, změňte režim zabezpečení serveru na požadované nastavení zabezpečení a spusťte svcutil.exe znovu v klientovi, abyste získali aktualizovaný konfigurační soubor klienta.

<system.serviceModel>
        <services>
            <service name="Microsoft.ServiceModel.Samples.CalculatorService"
               behaviorConfiguration="CalculatorServiceBehavior">

        <!-- This endpoint is exposed at the base address provided by host: net.pipe://localhost/servicemodelsamples/service.svc  -->
        <endpoint address=""
                  binding="netNamedPipeBinding"
                  bindingConfiguration="Binding1"
                  contract="Microsoft.ServiceModel.Samples.ICalculator" />
        <!-- the mex endpoint is exposed at net.pipe://localhost/servicemodelsamples/service.svc/mex -->
        <endpoint address="mex"
                  binding="mexNamedPipeBinding"
                  contract="IMetadataExchange" />
      </service>
        </services>
        <bindings>
            <netNamedPipeBinding>
                <binding name="Binding1" >
                    <security mode = "None">
                    </security>
                </binding >
            </netNamedPipeBinding>
        </bindings>

    <!--For debugging purposes set the includeExceptionDetailInFaults attribute to true-->
    <behaviors>
      <serviceBehaviors>
        <behavior name="CalculatorServiceBehavior">
          <serviceMetadata />
          <serviceDebug includeExceptionDetailInFaults="False" />
        </behavior>
      </serviceBehaviors>
    </behaviors>

  </system.serviceModel>

Informace o koncovém bodu klienta jsou nakonfigurované, jak je znázorněno v následujícím ukázkovém kódu.

<system.serviceModel>

    <client>
      <endpoint name=""
                          address="net.pipe://localhost/servicemodelsamples/service.svc"
                          binding="netNamedPipeBinding"
                          bindingConfiguration="Binding1"
                          contract="Microsoft.ServiceModel.Samples.ICalculator" />
    </client>

    <bindings>

      <!--  Following is the expanded configuration section for a NetNamedPipeBinding.
            Each property is configured with the default value. -->

      <netNamedPipeBinding>
        <binding name="Binding1"
                         maxBufferSize="65536"
                         maxConnections="10">
          <security mode = "None">
          </security>
        </binding >

      </netNamedPipeBinding>
    </bindings>

  </system.serviceModel>

Při spuštění ukázky se požadavky na operace a odpovědi zobrazí v okně konzoly klienta. Stisknutím klávesy ENTER v okně klienta klienta ukončete klienta.

Add(100,15.99) = 115.99
Subtract(145,76.54) = 68.46
Multiply(9,81.25) = 731.25
Divide(22,7) = 3.14285714285714

Press <ENTER> to terminate client.

Jak nastavit, sestavit a spustit ukázku

  1. Ujistěte se, že je nainstalovaná služba IIS 7.0. Pro aktivaci WAS se vyžaduje služba IIS 7.0.

  2. Ujistěte se, že jste provedli postup nastaveníOne-Time pro ukázkové příklady Windows Communication Foundation.

    Kromě toho je nutné nainstalovat komponenty pro aktivaci WCF bez HTTP:

    1. V nabídce Start zvolte Ovládací panely.

    2. Vyberte Programy a funkce.

    3. Klikněte na Zapnout nebo vypnout součásti systému Windows.

    4. Rozbalte uzel Microsoft .NET Framework 3.0 a zkontrolujte funkci aktivace technologie Windows Communication Foundation bez protokolu HTTP .

  3. Nakonfigurujte službu aktivace procesu systému Windows (WAS) tak, aby podporovala aktivaci pojmenovaného potrubí.

    Následující dva kroky se implementují v dávkovém souboru s názvem AddNetPipeSiteBinding.cmd umístěném v ukázkovém adresáři.

    1. Aby bylo možné podporovat aktivaci net.pipe, musí být výchozí web nejprve vázán na protokol net.pipe. To lze provést pomocí appcmd.exe, který je nainstalován se sadou nástrojů pro správu služby IIS 7.0. Z příkazového řádku se zvýšenými oprávněními (správce) spusťte následující příkaz.

      %windir%\system32\inetsrv\appcmd.exe set site "Default Web Site"
      -+bindings.[protocol='net.pipe',bindingInformation='*']
      

      Poznámka:

      Tento příkaz je jeden řádek textu.

      Tento příkaz přidá vazbu webu net.pipe na výchozí web.

    2. I když všechny aplikace v rámci webu sdílejí společnou vazbu net.pipe, každá aplikace může povolit podporu net.pipe jednotlivě. Pokud chcete pro aplikaci /servicemodelsamples povolit net.pipe, spusťte z příkazového řádku se zvýšenými oprávněními následující příkaz.

      %windir%\system32\inetsrv\appcmd.exe set app "Default Web Site/servicemodelsamples" /enabledProtocols:http,net.pipe
      

      Poznámka:

      Tento příkaz je jeden řádek textu.

      Tento příkaz umožňuje přístup k aplikaci /servicemodelsamples pomocí obou http://localhost/servicemodelsamples a net.tcp://localhost/servicemodelsamples.

  4. Pokud chcete sestavit verzi C# nebo Visual Basic .NET řešení, postupujte podle pokynů v Sestavení ukázek Windows Communication Foundation.

  5. Odeberte vazbu webu net.pipe, kterou jste přidali pro tuto ukázku.

    Pro usnadnění jsou následující dva kroky implementovány v dávkovém souboru s názvem RemoveNetPipeSiteBinding.cmd umístěném v ukázkovém adresáři:

    1. Ze seznamu povolených protokolů odeberte příkaz net.tcp spuštěním následujícího příkazu z příkazového řádku se zvýšenými oprávněními.

      %windir%\system32\inetsrv\appcmd.exe set app "Default Web Site/servicemodelsamples" /enabledProtocols:http
      

      Poznámka:

      Tento příkaz musí být zadán jako jeden řádek textu.

    2. Odeberte připojení webu net.tcp spuštěním následujícího příkazu z příkazového řádku se zvýšenými oprávněními.

      %windir%\system32\inetsrv\appcmd.exe set site "Default Web Site" --bindings.[protocol='net.pipe',bindingInformation='*']
      

      Poznámka:

      Tento příkaz musí být zadán jako jeden řádek textu.

Viz také