Dela via


TCP-aktivering

TCPActivation-exemplet visar värd för en tjänst som använder Windows Process Activation Services (WAS) för att aktivera en tjänst som kommunicerar via net.tcp-protokollet. Det här exemplet baseras på Komma igång.

Kommentar

Installationsproceduren och bygginstruktionerna för det här exemplet finns i slutet av det här avsnittet.

Exemplet består av ett klientkonsolprogram (.exe) och ett tjänstbibliotek (.dll) som finns i en arbetsprocess som aktiveras av WAS. Klientaktiviteten visas i konsolfönstret.

Tjänsten implementerar ett kontrakt som definierar ett kommunikationsmönster för begäran-svar. Kontraktet definieras av ICalculator gränssnittet, som exponerar matematiska åtgärder (Lägg till, Subtrahera, Multiplicera och Dividera), enligt följande exempelkod:

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

Tjänstimplementeringen beräknar och returnerar lämpligt resultat:

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

Exemplet använder en variant av net.tcp-bindningen med TCP-portdelning aktiverad och säkerhet inaktiverad. Om du vill använda en skyddad TCP-bindning ändrar du serverns säkerhetsläge till önskad inställning och kör Svcutil.exe på klienten igen för att generera en uppdateringsklientkonfigurationsfil.

Följande exempel visar konfigurationen för tjänsten:

<system.serviceModel>

    <services>
      <service name="Microsoft.ServiceModel.Samples.CalculatorService"
               behaviorConfiguration="CalculatorServiceBehavior">
        <!-- This endpoint is exposed at the base address provided by host: net.tcp://localhost/servicemodelsamples/service.svc  -->
        <endpoint binding="netTcpBinding" bindingConfiguration="PortSharingBinding"
          contract="Microsoft.ServiceModel.Samples.ICalculator" />
        <!-- the mex endpoint is exposed at net.tcp://localhost/servicemodelsamples/service.svc/mex -->
        <endpoint address="mex"
                  binding="mexTcpBinding"
                  contract="IMetadataExchange" />
      </service>
    </services>
    <bindings>
      <netTcpBinding>
        <binding name="PortSharingBinding" portSharingEnabled="true">
          <security mode="None" />
        </binding>
      </netTcpBinding>
    </bindings>

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

  </system.serviceModel>

Klientens slutpunkt konfigureras enligt följande exempelkod:

<system.serviceModel>
    <bindings>
        <netTcpBinding>
          <binding name="NetTcpBinding_ICalculator">
            <security mode="None"/>
          </binding>
        </netTcpBinding>
    </bindings>
    <client>
        <endpoint address="net.tcp://localhost/servicemodelsamples/service.svc"
            binding="netTcpBinding" bindingConfiguration="NetTcpBinding_ICalculator"
            contract="Microsoft.ServiceModel.Samples.ICalculator" name="NetTcpBinding_ICalculator" />
    </client>
</system.serviceModel>

När du kör exemplet visas åtgärdsbegäranden och svar i klientkonsolfönstret. Tryck på RETUR i klientfönstret för att stänga av klienten.

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.

Så här konfigurerar du, skapar och kör exemplet

  1. Kontrollera att IIS 7.0 är installerat. IIS 7.0 krävs för WAS-aktivering.

  2. Se till att du har utfört engångsinstallationsproceduren för Windows Communication Foundation-exempel.

    Dessutom måste du installera WCF-komponenter som inte är HTTP-aktivering:

    1. Välj KontrollpanelenStart-menyn.

    2. Välj Program och funktioner.

    3. Klicka på Aktivera eller inaktivera Windows-komponenter.

    4. Expandera noden Microsoft .NET Framework 3.0 och kontrollera funktionen Windows Communication Foundation Non-HTTP Activation.

  3. Konfigurera WAS för att stödja TCP-aktivering.

    Som en bekvämlighet implementeras följande två steg i en batchfil med namnet AddNetTcpSiteBinding.cmd som finns i exempelkatalogen.

    1. För att stödja net.tcp-aktivering måste standardwebbplatsen först vara bunden till en net.tcp-port. Detta kan göras med hjälp av Appcmd.exe, som installeras med IIS-hanteringsverktygen (Internet Information Services 7.0). Kör följande kommando från en kommandotolk på administratörsnivå:

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

      Dricks

      Det här kommandot är en enda textrad. Det här kommandot lägger till en net.tcp-platsbindning till standardwebbplatsen som lyssnar på TCP-port 808 med valfritt värdnamn.

    2. Även om alla program på en webbplats delar en gemensam net.tcp-bindning kan varje program aktivera net.tcp-stöd individuellt. Om du vill aktivera net.tcp för programmet /servicemodelsamples kör du följande kommando från en kommandotolk på administratörsnivå:

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

      Kommentar

      Det här kommandot är en enda textrad. Med det här kommandot kan programmet /servicemodelsamples användas med både http://localhost/servicemodelsamples och net.tcp://localhost/servicemodelsamples.

  4. Om du vill skapa C# eller Visual Basic .NET-versionen av lösningen följer du anvisningarna i Skapa Windows Communication Foundation-exempel.

  5. Om du vill köra exemplet i en konfiguration med en eller flera datorer följer du anvisningarna i Köra Windows Communication Foundation-exempel.

    Ta bort net.tcp-platsbindningen som du lade till för det här exemplet.

    Som en bekvämlighet implementeras följande två steg i en batchfil med namnet RemoveNetTcpSiteBinding.cmd som finns i exempelkatalogen.

    1. Ta bort net.tcp från listan över aktiverade protokoll genom att köra följande kommando från en kommandotolk på administratörsnivå:

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

      Kommentar

      Det här kommandot måste anges som en enda textrad.

    2. Ta bort net.tcp-platsbindningen genom att köra följande kommando från en kommandotolk på administratörsnivå:

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

      Kommentar

      Det här kommandot måste skrivas in som en enda textrad.

Se även