Aktywacja TCP
Przykład TCPActivation demonstruje hostowanie usługi korzystającej z usług aktywacji procesów systemu Windows (WAS) do aktywowania usługi komunikującej się za pośrednictwem protokołu net.tcp. Ten przykład jest oparty na rozpoczynaniu pracy.
Uwaga
Procedura instalacji i instrukcje kompilacji dla tego przykładu znajdują się na końcu tego tematu.
Przykład składa się z programu konsolowego klienta (.exe) i biblioteki usług (.dll) hostowanej w procesie roboczym aktywowanym przez usługę WAS. Działanie klienta jest widoczne w oknie konsoli.
Usługa implementuje kontrakt, który definiuje wzorzec komunikacji typu żądanie-odpowiedź. Kontrakt jest definiowany przez ICalculator
interfejs, który uwidacznia operacje matematyczne (Dodawanie, odejmowanie, mnożenie i dzielenie), jak pokazano w poniższym przykładowym kodzie:
[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);
}
Implementacja usługi oblicza i zwraca odpowiedni wynik:
// 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;
}
}
W przykładzie użyto wariantu powiązania net.tcp z włączonym udostępnianiem portów TCP i wyłączonymi zabezpieczeniami. Jeśli chcesz użyć zabezpieczonego powiązania TCP, zmień tryb zabezpieczeń serwera na żądane ustawienie i uruchom ponownie Svcutil.exe na kliencie, aby wygenerować plik konfiguracji klienta aktualizacji.
W poniższym przykładzie przedstawiono konfigurację usługi:
<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>
Punkt końcowy klienta jest skonfigurowany tak, jak pokazano w poniższym przykładowym kodzie:
<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>
Po uruchomieniu przykładu żądania operacji i odpowiedzi są wyświetlane w oknie konsoli klienta. Naciśnij klawisz ENTER w oknie klienta, aby zamknąć klienta.
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.
Aby skonfigurować, skompilować i uruchomić przykład
Upewnij się, że zainstalowano usługi IIS 7.0. Do aktywacji WAS jest wymagany program IIS 7.0.
Upewnij się, że wykonano procedurę instalacji jednorazowej dla przykładów programu Windows Communication Foundation.
Ponadto należy zainstalować składniki aktywacji spoza protokołu HTTP programu WCF:
Z menu Start wybierz pozycję Panel sterowania.
Wybierz pozycję Programy i funkcje.
Kliknij pozycję Włącz lub Wyłącz składniki systemu Windows.
Rozwiń węzeł Microsoft .NET Framework 3.0 i sprawdź funkcję Aktywacji nieobsługiwnej przez program Windows Communication Foundation.
Skonfiguruj usługę WAS do obsługi aktywacji TCP.
Dla wygody następujące dwa kroki są implementowane w pliku wsadowym o nazwie AddNetTcpSiteBinding.cmd znajdującym się w przykładowym katalogu.
Aby obsługiwać aktywację net.tcp, domyślna witryna sieci Web musi najpierw być powiązana z portem net.tcp. Można to zrobić przy użyciu Appcmd.exe zestawu narzędzi do zarządzania usługami Internet Information Services 7.0 (IIS). W wierszu polecenia na poziomie administratora uruchom następujące polecenie:
%windir%\system32\inetsrv\appcmd.exe set site "Default Web Site" -+bindings.[protocol='net.tcp',bindingInformation='808:*']
Napiwek
To polecenie jest pojedynczym wierszem tekstu. To polecenie dodaje powiązanie witryny net.tcp do domyślnej witryny sieci Web nasłuchiwania na porcie TCP 808 z dowolną nazwą hosta.
Mimo że wszystkie aplikacje w lokacji współdzielą wspólne powiązanie net.tcp, każda aplikacja może włączyć obsługę net.tcp indywidualnie. Aby włączyć net.tcp dla aplikacji /servicemodelsamples, uruchom następujące polecenie w wierszu polecenia na poziomie administratora:
%windir%\system32\inetsrv\appcmd.exe set app "Default Web Site/servicemodelsamples" /enabledProtocols:http,net.tcp
Uwaga
To polecenie jest pojedynczym wierszem tekstu. To polecenie umożliwia uzyskiwanie dostępu do aplikacji /servicemodelsamples przy użyciu funkcji i
http://localhost/servicemodelsamples
net.tcp://localhost/servicemodelsamples
.
Aby skompilować wersję rozwiązania w języku C# lub Visual Basic .NET, postępuj zgodnie z instrukcjami w temacie Building the Windows Communication Foundation Samples (Tworzenie przykładów programu Windows Communication Foundation).
Aby uruchomić przykład w konfiguracji pojedynczej lub między komputerami, postępuj zgodnie z instrukcjami w temacie Uruchamianie przykładów programu Windows Communication Foundation.
Usuń powiązanie witryny net.tcp dodane dla tego przykładu.
Dla wygody następujące dwa kroki są implementowane w pliku wsadowym o nazwie RemoveNetTcpSiteBinding.cmd znajdującym się w przykładowym katalogu.
Usuń plik net.tcp z listy protokołów z obsługą, uruchamiając następujące polecenie w wierszu polecenia na poziomie administratora:
%windir%\system32\inetsrv\appcmd.exe set app "Default Web Site/servicemodelsamples" /enabledProtocols:http
Uwaga
To polecenie należy wprowadzić jako pojedynczy wiersz tekstu.
Usuń powiązanie witryny net.tcp, uruchamiając następujące polecenie w wierszu polecenia na poziomie administratora:
%windir%\system32\inetsrv\appcmd.exe set site "Default Web Site" --bindings.[protocol='net.tcp',bindingInformation='808:*']
Uwaga
To polecenie musi być wpisane jako pojedynczy wiersz tekstu.