NamedPipe-AktivierungNamedPipe Activation

In diesem Beispiel wird das Hosten eines Diensts veranschaulicht, der Windows Process Activation Services (WAS) zum Aktivieren eines Diensts verwendet, der über benannte Pipes kommuniziert.This sample demonstrates hosting a service that uses Windows Process Activation Service (WAS) to activate a service that communicates over names pipes. Dieses Beispiel basiert auf der Einstieg und erfordert Windows VistaWindows Vista ausgeführt.This sample is based on the Getting Started and requires Windows VistaWindows Vista to run.

Hinweis

Die Setupprozedur und die Buildanweisungen für dieses Beispiel befinden sich am Ende dieses Themas.The set-up procedure and build instructions for this sample are located at the end of this topic.

Wichtig

Die Beispiele sind möglicherweise bereits auf dem Computer installiert.The samples may already be installed on your computer. Suchen Sie nach dem folgenden Verzeichnis (Standardverzeichnis), bevor Sie fortfahren.Check for the following (default) directory before continuing.

<InstallDrive>:\WF_WCF_Samples

Wenn dieses Verzeichnis nicht vorhanden ist, fahren Sie mit Windows Communication Foundation (WCF) und Windows Workflow Foundation (WF) Samples for .NET Framework 4 aller Windows Communication Foundation (WCF) herunterladen und WFWF Beispiele.If this directory does not exist, go to Windows Communication Foundation (WCF) and Windows Workflow Foundation (WF) Samples for .NET Framework 4 to download all Windows Communication Foundation (WCF) and WFWF samples. Dieses Beispiel befindet sich im folgenden Verzeichnis.This sample is located in the following directory.

<InstallDrive>:\WF_WCF_Samples\WCF\Basic\Services\Hosting\WASHost\NamedPipeActivation

BeispieldetailsSample Details

Das Beispiel besteht aus einem Clientkonsolenprogramm (.exe) und einer in einem von Windows Process Activation Services (WAS) aktivierten Arbeitsprozess gehosteten Dienstbibliothek (.dll).The sample consists of a client console program (.exe) and a service library (.dll) hosted in a worker process activated by the Windows Process Activation Services (WAS). Die Clientaktivität ist im Konsolenfenster sichtbar.Client activity is visible in the console window.

Der Dienst implementiert einen Vertrag, der ein Anforderungs-Antwort-Kommunikationsmuster definiert.The service implements a contract that defines a request-reply communication pattern. Der Vertrag wird von der ICalculator-Schnittstelle definiert, die mathematische Operationen (Addieren, Subtrahieren, Multiplizieren und Dividieren) verfügbar macht, wie im folgenden Beispielcode dargestellt.The contract is defined by the ICalculator interface, which exposes math operations (Add, Subtract, Multiply, and Divide), as shown in the following sample code.

[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);  
}  

Der Client stellt synchrone Anforderungen an eine gegebene mathematische Operation, und die Dienstimplementierung gibt das entsprechende Ergebnis zurück.The client makes synchronous requests to a given math operation and the service implementation calculates and returns the appropriate result.

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

Im Beispiel wird eine modifizierte netNamedPipeBinding-Bindung ohne Sicherheit verwendet.The sample uses a modified netNamedPipeBinding binding with no security. Die Bindung wird in den Konfigurationsdateien für den Client und Dienst angegeben.The binding is specified in the configuration files for the client and service. Der Bindungstyp für den Dienst wird im binding-Attribut des Endpunktelements angegeben (siehe folgende Beispielkonfiguration).The binding type for the service is specified in the endpoint element’s binding attribute as shown in the following sample configuration.

Wenn Sie eine gesicherte benannte Pipe-Bindung verwenden möchten, ändern Sie den Sicherheitsmodus des Servers in die gewünschte Sicherheitseinstellung, und führen Sie auf dem Client "svcutil.exe" erneut aus, um eine aktualisierte Clientkonfigurationsdatei zu erhalten.If you want use a secured named pipe binding, change the server's security mode to the desired security setting and run svcutil.exe again on the client to obtain an updated client configuration file.

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

Die Endpunktinformation des Clients wird wie im folgenden Beispielcode dargestellt konfiguriert.The client’s endpoint information is configured as shown in the following sample code.

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

Wenn Sie das Beispiel ausführen, werden die Anforderungen und Antworten für den Vorgang im Clientkonsolenfenster angezeigt.When you run the sample, the operation requests and responses are displayed in the client console window. Drücken Sie im Clientfenster die EINGABETASTE, um den Client zu schließen.Press ENTER in the client window to shut down the client.

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.  

So können Sie das Beispiel einrichten, erstellen und ausführenTo set up, build, and run the sample

  1. Stellen Sie sicher, dass IIS 7.0IIS 7.0 installiert ist.Ensure that IIS 7.0IIS 7.0 is installed. IIS 7.0IIS 7.0 ist für die WAS-Aktivierung erforderlich. is required for WAS activation.

  2. Stellen Sie sicher, die von Ihnen ausgeführte der Setupprozedur für die Windows Communication Foundation-Beispiele zum einmaligen.Ensure you have performed the One-Time Setup Procedure for the Windows Communication Foundation Samples.

    Darüber hinaus müssen Sie die WCF-HTTP-Aktivierung-Komponenten installieren:In addition, you must install the WCF non-HTTP activation components:

    1. Aus der starten Menü wählen Systemsteuerung.From the Start menu, choose Control Panel.

    2. Wählen Sie Programme und Funktionen.Select Programs and Features.

    3. Klicken Sie auf aktivieren oder Deaktivieren von Windows-Komponenten.Click Turn Windows Components on or Off.

    4. Erweitern Sie die Microsoft .NET Framework 3.0 Knoten, und überprüfen Sie die Windows Communication Foundation-nicht-HTTP-Aktivierung Funktion.Expand the Microsoft .NET Framework 3.0 node and check the Windows Communication Foundation Non-HTTP Activation feature.

  3. Konfigurieren Sie den Windows Process Activation Service (WAS), um die Aktivierung benannter Pipes zu unterstützen.Configure the Windows Process Activation Service (WAS) to support named pipe activation.

    Zur Vereinfachung sind die folgenden beiden Schritte in der Batchdatei "AddNetPipeSiteBinding.cmd" implementiert, die sich im Beispielverzeichnis befindet.As a convenience, the following two steps are implemented in a batch file called AddNetPipeSiteBinding.cmd located in the sample directory.

    1. Zur Unterstützung der net.pipe-Aktivierung muss die Standardwebsite zuerst an das net.pipe-Protokoll gebunden werden.To support net.pipe activation, the default Web site must first be bound to the net.pipe protocol. Sie können hierzu das Tool "appcmd.exe" verwenden, das mit dem IIS 7.0-Verwaltungstoolset installiert wird.This can be done using appcmd.exe, which is installed with the IIS 7.0 management toolset. Führen Sie an einer Eingabeaufforderung auf höherer Ebene (Administrator) den folgenden Befehl aus.From an elevated (administrator) command prompt, run the following command.

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

      Hinweis

      Dieser Befehl ist eine einzelne Textzeile.This command is a single line of text.

      Dieser Befehl fügt der Standardwebsite eine net.pipe-Sitebindung hinzu.This command adds a net.pipe site binding to the default Web site.

    2. Alle Anwendungen innerhalb einer Site nutzen zwar eine gemeinsame net.pipe-Bindung, aber jede Anwendung kann die net.pipe-Unterstützung unabhängig von den anderen Anwendungen aktivieren.Although all applications within a site share a common net.pipe binding, each application can enable net.pipe support individually. Um net.pipe für die Anwendung /servicemodelsamples zu aktivieren, führen Sie den folgenden Befehl in einer Eingabeaufforderung mit erweiterten Berechtigungen (Administrator) aus.To enable net.pipe for the /servicemodelsamples application, run the following command from an elevated command prompt.

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

      Hinweis

      Dieser Befehl ist eine einzelne Textzeile.This command is a single line of text.

      Dieser Befehl aktiviert die Anwendung/servicemodelsamples darauf zugegriffen werden beide http://localhost/servicemodelsamples und TCP://localhost//servicemodelsamples.This command enables the /servicemodelsamples application to be accessed using both http://localhost/servicemodelsamples and net.tcp://localhost/servicemodelsamples.

  4. Um die C#- oder Visual Basic .NET-Edition der Projektmappe zu erstellen, befolgen Sie die unter Building the Windows Communication Foundation Samplesaufgeführten Anweisungen.To build the C# or Visual Basic .NET edition of the solution, follow the instructions in Building the Windows Communication Foundation Samples.

  5. Entfernen Sie die net.pipe-Sitebindung, die für dieses Beispiel hinzugefügt wurde.Remove the net.pipe site binding you added for this sample.

    Zur Vereinfachung sind die folgenden beiden Schritte in einer Batchdatei namens RemoveNetPipeSiteBinding.cmd implementiert, die sich im Beispielverzeichnis befindet:As a convenience, the following two steps are implemented in a batch file called RemoveNetPipeSiteBinding.cmd located in the sample directory:

    1. Entfernen Sie net.tcp aus der Liste der aktivierten Protokolle, indem Sie den folgenden Befehl an einer Eingabeaufforderung mit erweiterten Berechtigungen (Administrator) ausführen.Remove net.tcp from the list of enabled protocols by running the following command from an elevated command prompt.

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

      Hinweis

      Dieser Befehl muss als eine Textzeile eingegeben werden.This command must be entered as a single line of text.

    2. Entfernen Sie die net.tcp-Sitebindung, indem Sie den folgenden Befehl an einer Eingabeaufforderung mit erweiterten Berechtigungen ausführen.Remove the net.tcp site binding by running the following command from an elevated command prompt.

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

      Hinweis

      Dieser Befehl muss als eine Textzeile eingegeben werden.This command must be typed in as a single line of text.

Siehe auchSee Also

AppFabric-Hosting und PersistenzbeispieleAppFabric Hosting and Persistence Samples