Delen via


TCP-activering

Het TCPActivation-voorbeeld laat zien hoe u als host fungeert voor een service die gebruikmaakt van Windows Process Activation Services (WAS) om een service te activeren die communiceert via het net.tcp-protocol. Dit voorbeeld is gebaseerd op aan de slag.

Notitie

De installatieprocedure en build-instructies voor dit voorbeeld bevinden zich aan het einde van dit onderwerp.

Het voorbeeld bestaat uit een clientconsoleprogramma (.exe) en een servicebibliotheek (.dll) die wordt gehost in een werkproces dat is geactiveerd door WAS. Clientactiviteit is zichtbaar in het consolevenster.

De service implementeert een contract dat een communicatiepatroon aanvraagantwoord definieert. Het contract wordt gedefinieerd door de ICalculator interface, die wiskundige bewerkingen weergeeft (optellen, aftrekken, vermenigvuldigen en delen), zoals wordt weergegeven in de volgende voorbeeldcode:

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

De service-implementatie berekent en retourneert het juiste resultaat:

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

In het voorbeeld wordt een variant van de net.tcp-binding gebruikt waarbij delen van TCP-poorten is ingeschakeld en beveiliging is uitgeschakeld. Als u een beveiligde TCP-binding wilt gebruiken, wijzigt u de beveiligingsmodus van de server in de gewenste instelling en voert u Svcutil.exe opnieuw uit op de client om een updateclientconfiguratiebestand te genereren.

In het volgende voorbeeld ziet u de configuratie voor de service:

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

Het eindpunt van de client is geconfigureerd zoals wordt weergegeven in de volgende voorbeeldcode:

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

Wanneer u het voorbeeld uitvoert, worden de bewerkingsaanvragen en -antwoorden weergegeven in het clientconsolevenster. Druk op Enter in het clientvenster om de client af te sluiten.

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.

Het voorbeeld instellen, compileren en uitvoeren

  1. Zorg ervoor dat IIS 7.0 is geïnstalleerd. IIS 7.0 is vereist voor WAS-activering.

  2. Zorg ervoor dat u de eenmalige installatieprocedure voor de Windows Communication Foundation-voorbeelden hebt uitgevoerd.

    Daarnaast moet u de WCF niet-HTTP-activeringsonderdelen installeren:

    1. Kies Configuratiescherm in het menu Start.

    2. Selecteer Programma's en onderdelen.

    3. Klik op Windows-onderdelen in- of uitschakelen.

    4. Vouw het knooppunt Microsoft .NET Framework 3.0 uit en controleer de functie Niet-HTTP-activering van Windows Communication Foundation.

  3. CONFIGUREER WAS om TCP-activering te ondersteunen.

    Als u wilt, worden de volgende twee stappen geïmplementeerd in een batchbestand met de naam AddNetTcpSiteBinding.cmd zich in de voorbeeldmap bevindt.

    1. Ter ondersteuning van net.tcp-activering moet de standaardwebsite eerst worden gebonden aan een net.tcp-poort. U kunt dit doen met behulp van Appcmd.exe, die is geïnstalleerd met de iis-beheerhulpprogramma'set (Internet Information Services 7.0). Voer vanaf een opdrachtprompt op beheerdersniveau de volgende opdracht uit:

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

      Tip

      Deze opdracht is één regel tekst. Met deze opdracht wordt een net.tcp-sitebinding toegevoegd aan de standaardwebsite die luistert op TCP-poort 808 met elke hostnaam.

    2. Hoewel alle toepassingen binnen een site een gemeenschappelijke net.tcp-binding delen, kan elke toepassing ondersteuning voor net.tcp afzonderlijk inschakelen. Als u net.tcp wilt inschakelen voor de toepassing /servicemodelsamples, voert u de volgende opdracht uit vanaf een opdrachtprompt op beheerdersniveau:

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

      Notitie

      Deze opdracht is één regel tekst. Met deze opdracht kan de toepassing /servicemodelsamples worden geopend met beide http://localhost/servicemodelsamples en net.tcp://localhost/servicemodelsamples.

  4. Als u de C# of Visual Basic .NET-editie van de oplossing wilt bouwen, volgt u de instructies in het bouwen van de Windows Communication Foundation-voorbeelden.

  5. Als u het voorbeeld wilt uitvoeren in een configuratie van één of meerdere computers, volgt u de instructies in Het uitvoeren van de Windows Communication Foundation-voorbeelden.

    Verwijder de net.tcp-sitebinding die u voor dit voorbeeld hebt toegevoegd.

    Als u wilt, worden de volgende twee stappen geïmplementeerd in een batchbestand met de naam RemoveNetTcpSiteBinding.cmd zich in de voorbeeldmap bevindt.

    1. Verwijder net.tcp uit de lijst met ingeschakelde protocollen door de volgende opdracht uit te voeren vanaf een opdrachtprompt op beheerdersniveau:

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

      Notitie

      Deze opdracht moet worden ingevoerd als één regel tekst.

    2. Verwijder de net.tcp-sitebinding door de volgende opdracht uit te voeren vanaf een opdrachtprompt op beheerdersniveau:

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

      Notitie

      Deze opdracht moet worden getypt als één regel tekst.

Zie ook