NamedPipe aktiválás

A NamedPipeActivation minta egy olyan szolgáltatás üzemeltetését mutatja be, amely a Windows Folyamataktiválási szolgáltatás (WAS) használatával aktivál egy olyan szolgáltatást, amely nevesített csöveken keresztül kommunikál. Ez a minta az első lépéseken alapul, és a Windows Vista futtatását igényli.

Megjegyzés:

A minta beállítási eljárása és összeállítási utasításai a témakör végén találhatók.

Minta részletei

A minta egy ügyfélkonzolprogramból (.exe) és egy szolgáltatástárból (.dll) áll, amelyet a Windows folyamataktiválási szolgáltatások (WAS) által aktivált feldolgozói folyamat üzemeltet. Az ügyféltevékenység látható a konzolablakban.

A szolgáltatás megvalósít egy szerződést, amely egy kérés-válasz kommunikációs mintát határoz meg. A szerződést az ICalculator interfész határozza meg, amely matematikai műveleteket (Hozzáadás, Kivonás, Szorzás és Osztás) tesz elérhetővé az alábbi mintakódban látható módon.

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

Az ügyfél szinkron kéréseket küld egy adott matematikai művelethez, és a szolgáltatás implementációja kiszámítja és visszaadja a megfelelő eredményt.

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

A minta egy módosított netNamedPipeBinding kötést használ, amely nem rendelkezik biztonsággal. A kötés az ügyfél és a szolgáltatás konfigurációs fájljaiban van megadva. A szolgáltatás kötéstípusa a végpontelem binding attribútumában van megadva az alábbi mintakonfigurációban látható módon.

Ha biztonságos, elnevezett csőkötést szeretne használni, módosítsa a kiszolgáló biztonsági módját a kívánt biztonsági beállításra, és futtassa újra a svcutil.exe az ügyfélen egy frissített ügyfélkonfigurációs fájl beszerzéséhez.

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

Az ügyfél végpontadatai az alábbi mintakódban látható módon konfigurálva lesznek.

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

A minta futtatásakor a műveleti kérelmek és a válaszok megjelennek az ügyfélkonzol ablakában. Nyomja le az ENTER billentyűt az ügyfélablakban az ügyfél leállításához.

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.

A példa beállítása, elkészítése és futtatása

  1. Győződjön meg arról, hogy az IIS 7.0 telepítve van. A WAS aktiválásához IIS 7.0 szükséges.

  2. Győződjön meg arról, hogy elvégezte a Windows Communication Foundation-mintákOne-Time beállítási eljárását.

    Emellett telepítenie kell a WCF nem HTTP-aktiválási összetevőit:

    1. A Start menüben válassza a Vezérlőpult lehetőséget.

    2. Válassza a Programok és szolgáltatások lehetőséget.

    3. Kattintson a Windows-összetevők be- és kikapcsolása gombra.

    4. Bontsa ki a Microsoft .NET Framework 3.0 csomópontot, és ellenőrizze a Windows Communication Foundation nem HTTP aktiválási funkcióját.

  3. Konfigurálja a Windows Folyamataktiválási szolgáltatást (WAS) a named pipe aktiválás támogatására.

    A következő két lépés a mintakönyvtárban található AddNetPipeSiteBinding.cmd nevű kötegfájlban van implementálva.

    1. A net.pipe aktiválás támogatásához az alapértelmezett webhelyet először a net.pipe protokollhoz kell kötni. Ez az IIS 7.0 felügyeleti eszközkészlettel telepített appcmd.exehasználatával végezhető el. Rendszergazdai jogú parancssorból futtassa a következő parancsot.

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

      Megjegyzés:

      Ez a parancs egyetlen sornyi szöveg.

      Ez a parancs egy net.pipe webhelykötést ad hozzá az alapértelmezett webhelyhez.

    2. Bár a webhelyen belüli összes alkalmazás közös net.pipe kötéssel rendelkezik, minden alkalmazás egyenként engedélyezheti a net.pipe támogatását. Ha engedélyezni szeretné a net.pipe-t a /servicemodelsamples alkalmazáshoz, futtassa a következő parancsot egy emelt szintű parancssorból.

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

      Megjegyzés:

      Ez a parancs egyetlen sornyi szöveg.

      Ez a parancs lehetővé teszi, hogy a /servicemodelsamples alkalmazást mind http://localhost/servicemodelsamples, mind net.tcp://localhost/servicemodelsamples használatával el lehessen érni.

  4. A megoldás C# vagy Visual Basic .NET kiadásának létrehozásához kövesse Windows Communication Foundation-mintákcímű témakör utasításait.

  5. Távolítsa el a mintához hozzáadott net.pipe webhelykötést.

    A következő két lépést a mintakönyvtárban található RemoveNetPipeSiteBinding.cmd nevű kötegfájlban implementáljuk:

    1. Távolítsa el a net.tcp-t az engedélyezett protokollok listájából az alábbi parancs rendszergazda jogú parancssorból való futtatásával.

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

      Megjegyzés:

      Ezt a parancsot egyetlen szövegsorként kell megadni.

    2. Távolítsa el a net.tcp-hely kötését az alábbi parancs rendszergazda jogú parancssorból való futtatásával.

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

      Megjegyzés:

      Ezt a parancsot egyetlen szövegsorként kell begépelni.

Lásd még