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
Kontrollera att IIS 7.0 är installerat. IIS 7.0 krävs för WAS-aktivering.
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:
Välj Kontrollpanelen på Start-menyn.
Välj Program och funktioner.
Klicka på Aktivera eller inaktivera Windows-komponenter.
Expandera noden Microsoft .NET Framework 3.0 och kontrollera funktionen Windows Communication Foundation Non-HTTP Activation.
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.
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.
Ä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
ochnet.tcp://localhost/servicemodelsamples
.
Om du vill skapa C# eller Visual Basic .NET-versionen av lösningen följer du anvisningarna i Skapa Windows Communication Foundation-exempel.
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.
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.
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.