Udostępnij za pośrednictwem


Aktywowanie elementu NamedPipe

Przykład NamedPipeActivation demonstruje hostowanie usługi korzystającej z usługi aktywacji procesów systemu Windows (WAS) do aktywowania usługi komunikującej się za pośrednictwem nazwanych potoków. Ten przykład jest oparty na rozpoczynaniu pracy i wymaga uruchomienia systemu Windows Vista.

Uwaga

Procedura konfiguracji i instrukcje kompilacji dla tego przykładu znajdują się na końcu tego tematu.

Przykładowe szczegóły

Przykład składa się z programu konsolowego klienta (.exe) i biblioteki usług (.dll) hostowanej w procesie roboczym aktywowanym przez usługi aktywacji procesów systemu Windows (WAS). Działanie klienta jest widoczne w oknie konsoli.

Usługa implementuje kontrakt, który definiuje wzorzec komunikacji typu żądanie-odpowiedź. Kontrakt jest definiowany przez ICalculator interfejs, który uwidacznia operacje matematyczne (Dodawanie, Odejmowanie, Mnożenie i Dzielenie), jak pokazano w poniższym przykładowym kodzie.

[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 wysyła synchroniczne żądania do danej operacji matematycznej, a implementacja usługi oblicza i zwraca odpowiedni wynik.

// 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;
    }
}

W przykładzie użyto netNamedPipeBinding zmodyfikowanego powiązania bez zabezpieczeń. Powiązanie jest określone w plikach konfiguracji klienta i usługi. Typ powiązania usługi jest określony w atrybucie elementu binding punktu końcowego, jak pokazano w poniższej przykładowej konfiguracji.

Jeśli chcesz użyć zabezpieczonego powiązania nazwanego potoku, zmień tryb zabezpieczeń serwera na żądane ustawienie zabezpieczeń i uruchom ponownie svcutil.exe na kliencie, aby uzyskać zaktualizowany plik konfiguracji 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>

Informacje o punkcie końcowym klienta są skonfigurowane, jak pokazano w poniższym przykładowym kodzie.

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

Po uruchomieniu przykładu żądania operacji i odpowiedzi są wyświetlane w oknie konsoli klienta. Naciśnij klawisz ENTER w oknie klienta, aby zamknąć 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.

Aby skonfigurować, skompilować i uruchomić przykład

  1. Upewnij się, że zainstalowano usługi IIS 7.0. Do aktywacji WAS jest wymagany program IIS 7.0.

  2. Upewnij się, że wykonano procedurę instalacji jednorazowej dla przykładów programu Windows Communication Foundation.

    Ponadto należy zainstalować składniki aktywacji spoza protokołu HTTP programu WCF:

    1. Z menu Start wybierz pozycję Panel sterowania.

    2. Wybierz pozycję Programy i funkcje.

    3. Kliknij pozycję Włącz lub Wyłącz składniki systemu Windows.

    4. Rozwiń węzeł Microsoft .NET Framework 3.0 i sprawdź funkcję Aktywacji nieobsługiwnej przez program Windows Communication Foundation.

  3. Skonfiguruj usługę aktywacji procesów systemu Windows (WAS), aby obsługiwać aktywację nazwanego potoku.

    Dla wygody następujące dwa kroki są implementowane w pliku wsadowym o nazwie AddNetPipeSiteBinding.cmd znajdującym się w przykładowym katalogu.

    1. Aby obsługiwać aktywację potoku net.pipe, domyślna witryna sieci Web musi najpierw być powiązana z protokołem net.pipe. Można to zrobić przy użyciu appcmd.exe, który jest instalowany z zestawem narzędzi zarządzania usług IIS 7.0. W wierszu polecenia z podwyższonym poziomem uprawnień (administrator) uruchom następujące polecenie.

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

      Uwaga

      To polecenie jest pojedynczym wierszem tekstu.

      To polecenie dodaje powiązanie witryny net.pipe do domyślnej witryny sieci Web.

    2. Mimo że wszystkie aplikacje w lokacji współdzielą wspólne powiązanie potoku net.pipe, każda aplikacja może włączyć obsługę potoku net.pipe indywidualnie. Aby włączyć potok net.pipe dla aplikacji /servicemodelsamples, uruchom następujące polecenie w wierszu polecenia z podwyższonym poziomem uprawnień.

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

      Uwaga

      To polecenie jest pojedynczym wierszem tekstu.

      To polecenie umożliwia uzyskiwanie dostępu do aplikacji /servicemodelsamples przy użyciu funkcji i http://localhost/servicemodelsamplesnet.tcp://localhost/servicemodelsamples.

  4. Aby skompilować wersję rozwiązania w języku C# lub Visual Basic .NET, postępuj zgodnie z instrukcjami w temacie Building the Windows Communication Foundation Samples (Tworzenie przykładów programu Windows Communication Foundation).

  5. Usuń powiązanie lokacji net.pipe dodane dla tego przykładu.

    Dla wygody następujące dwa kroki są implementowane w pliku wsadowym o nazwie RemoveNetPipeSiteBinding.cmd znajdującym się w przykładowym katalogu:

    1. Usuń protokół net.tcp z listy protokołów z włączonymi uprawnieniami, uruchamiając następujące polecenie z wiersza polecenia z podwyższonym poziomem uprawnień.

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

      Uwaga

      To polecenie należy wprowadzić jako pojedynczy wiersz tekstu.

    2. Usuń powiązanie witryny net.tcp, uruchamiając następujące polecenie z wiersza polecenia z podwyższonym poziomem uprawnień.

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

      Uwaga

      To polecenie musi być wpisane jako pojedynczy wiersz tekstu.

Zobacz też