Condividi tramite


Attivazione di NamedPipe

In questo esempio viene dimostrato l'hosting di un servizio che utilizza WAS (Windows Process Activation Service) per attivare un servizio che comunica su named pipe. Questo esempio è basato sull'Esempio della guida introduttiva e richiede l'utilizzo di Windows Vista.

Nota

La procedura di installazione e le istruzioni di compilazione per questo esempio si trovano alla fine di questo argomento.

L'esempio è costituito da un programma console client (.exe) e una libreria di servizi (.dll) ospitati in un processo di lavoro attivato dal servizio di attivazione dei processi di Windows (WAS). L'attività del client è visibile nella finestra della console.

Il servizio implementa un contratto che definisce il modello di comunicazione request/reply. Il contratto è definito dall'interfaccia ICalculator, che espone operazioni matematiche (somma, sottrazione, moltiplicazione e divisione), come illustrato nel codice di esempio seguente.

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

Il client esegue richieste sincrone a una determinata operazione matematica e l'implementazione del servizio calcola e restituisce il risultato appropriato.

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

L'esempio utilizza un'associazione netNamedPipeBinding modificata senza protezione. L'associazione è specificata nei file di configurazione per il client e il servizio. Il tipo di associazione per il servizio è specificato nell'attributo binding dell'elemento endpoint come mostrato nella configurazione di esempio seguente.

Se si desidera utilizzare un'associazione named pipe protetta, impostare la modalità di protezione del server sul tipo desiderato ed eseguire di nuovo svcutil.exe sul client per ottenere un file di configurazione client aggiornato.

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

Le informazioni endpoint del client sono configurate come illustrato nel codice di esempio seguente.

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

Quando si esegue l'esempio, le richieste e le risposte dell'operazione vengono visualizzate nella finestra della console client. Premere INVIO nella finestra del client per arrestare il 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.

Per impostare, compilare ed eseguire l'esempio DIBLOOK

  1. Assicurarsi di avere eseguito Procedura di installazione singola per gli esempi di Windows Communication Foundation.

    In aggiunta, è necessario installare i componenti di attivazione non http di WCF:

    1. Fare clic sul pulsante Start e scegliere Pannello di controllo.
    2. Selezionare Programmi e funzionalità.
    3. Scegliere Attivazione o disattivazione dei componenti Windows.
    4. Espandere il nodo Microsoft .NET Framework 3.0 e selezionare la funzionalità Attivazione non HTTP di Windows Communication Foundation.
  2. Configurare il servizio WAS (Windows Process Activation Service) per supportare l'attivazione di named pipe.

    Per maggiore praticità, i due passaggi seguenti vengono implementati in un file batch di nome AddNetPipeSiteBinding.cmd situato nella directory degli esempi.

    1. Per supportare l'attivazione net.pipe, è prima necessario associare il sito Web predefinito al protocollo net.pipe. A tale fine, utilizzare appcmd.exe, installato con il set di strumenti di gestione di IIS 7.0. Da un prompt dei comandi con privilegi elevati (amministratore), eseguire il comando seguente:

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

      Nota

      Questo comando è una singola riga di testo.

      Questo comando aggiunge un'associazione di sito net.pipe al sito Web predefinito.

    2. Anche se tutte le applicazioni all'interno di un sito condividono un'associazione net.pipe comune, ciascuna di esse può attivare il supporto net.pipe individualmente. Per attivare net.pipe per l'applicazione /servicemodelsamples, eseguire il comando seguente da un prompt dei comandi con privilegi elevati.

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

      Nota

      Questo comando è una singola riga di testo.

      Questo comando attiva l'accesso all'applicazione /servicemodelsamples mediante https://localhost/servicemodelsamples e net.tcp://localhost/servicemodelsamples.

  3. Per compilare l'edizione in C# o Visual Basic .NET della soluzione, seguire le istruzioni in Generazione degli esempi Windows Communication Foundation.

  4. Rimuovere l'associazione del sito net.pipe aggiunta per questo esempio.

    Per maggiore praticità, i due passaggi seguenti vengono implementati in un file batch di nome RemoveNetPipeSiteBinding.cmd situato nella directory degli esempi.

    1. Rimuovere net.tcp dall'elenco dei protocolli attivati eseguendo il comando seguente da una finestra del prompt dei comandi con privilegi elevati.

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

      Nota

      Questo comando deve essere immesso come una sola riga del testo.

    2. Rimuovere l'associazione del sito net.tcp eseguendo il comando seguente da un prompt dei comandi con privilegi elevati:

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

      Nota

      Questo comando deve essere immesso come una sola riga del testo.

Send comments about this topic to Microsoft.
© 2007 Microsoft Corporation. All rights reserved.