Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Пример TCPActivation демонстрирует размещение службы, использующую службы активации процессов Windows (WAS) для активации службы, которая взаимодействует по протоколу net.tcp. Этот пример основан на Кратком руководстве.
Замечание
Процедура установки и инструкции по сборке для этого примера находятся в конце этого раздела.
Пример состоит из клиентской консольной программы (.exe) и библиотеки служб (.dll), размещенной в рабочем процессе, активированном WAS. Действие клиента отображается в окне консоли.
Служба реализует контракт, определяющий шаблон связи с запросом и ответом. Контракт определяется интерфейсом ICalculator
, который предоставляет математические операции (добавление, вычитание, умножение и деление), как показано в следующем примере кода:
[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);
}
Реализация службы вычисляет и возвращает соответствующий результат:
// 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;
}
}
В примере используется вариант привязки net.tcp с включенным доступом к TCP-порту и отключенной безопасностью. Если вы хотите использовать безопасную привязку TCP, измените режим безопасности сервера на нужный параметр и повторно запустите Svcutil.exe на клиенте, чтобы создать файл конфигурации клиента обновления.
В следующем примере показана конфигурация службы:
<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>
Конечная точка клиента настроена, как показано в следующем примере кода:
<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>
При запуске примера запросы и ответы операции отображаются в окне консоли клиента. Нажмите клавишу ВВОД в окне клиента, чтобы завершить работу клиента.
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.
Настройка, сборка и запуск примера
Убедитесь, что установлен IIS 7.0. Служба IIS 7.0 требуется для активации WAS.
Убедитесь, что вы выполнили процедуру настройкиOne-Time для примеров Windows Communication Foundation.
Кроме того, необходимо установить компоненты активации WCF, отличные от HTTP:
В меню "Пуск " выберите панель управления.
Выберите программы и компоненты.
Нажмите кнопку "Включить" или "Отключить компоненты Windows".
Разверните узел Microsoft .NET Framework 3.0 и проверьте функцию активации Windows Communication Foundation без HTTP.
Настройка WAS для поддержки активации TCP.
В качестве удобства следующие два шага реализуются в пакетном файле с именем AddNetTcpSiteBinding.cmd расположен в примере каталога.
Чтобы поддерживать активацию net.tcp, веб-сайт по умолчанию должен быть привязан к порту net.tcp. Это можно сделать с помощью Appcmd.exe, установленной с набором инструментов управления Internet Information Services 7.0 (IIS). В командной строке уровня администратора выполните следующую команду:
%windir%\system32\inetsrv\appcmd.exe set site "Default Web Site" -+bindings.[protocol='net.tcp',bindingInformation='808:*']
Подсказка
Эта команда представляет собой одну строку текста. Эта команда добавляет привязку сайта net.tcp к веб-сайту по умолчанию через TCP-порт 808 с любым именем хоста.
Хотя все приложения на сайте совместно используют общую привязку net.tcp, каждое приложение может включить поддержку net.tcp по отдельности. Чтобы включить net.tcp для приложения /servicemodelsamples, выполните следующую команду из командной строки уровня администратора:
%windir%\system32\inetsrv\appcmd.exe set app "Default Web Site/servicemodelsamples" /enabledProtocols:http,net.tcp
Замечание
Эта команда представляет собой одну строку текста. Эта команда позволяет приложению /servicemodelsamples получать доступ с помощью обоих
http://localhost/servicemodelsamples
иnet.tcp://localhost/servicemodelsamples
.
Чтобы создать версию решения на C# или Visual Basic .NET, следуйте инструкциям по сборке примеров Windows Communication Foundation .
Чтобы запустить пример в конфигурации с одним или несколькими компьютерами, следуйте инструкциям в разделе "Примеры Windows Communication Foundation".
Удалите привязку сайта net.tcp, которую вы добавили для этого примера.
В качестве удобства следующие два шага реализуются в пакетном файле с именем RemoveNetTcpSiteBinding.cmd, расположенном в примере каталога.
Удалите net.tcp из списка включенных протоколов, выполнив следующую команду из командной строки уровня администратора:
%windir%\system32\inetsrv\appcmd.exe set app "Default Web Site/servicemodelsamples" /enabledProtocols:http
Замечание
Эта команда должна быть введена в виде одной строки текста.
Удалите привязку сайта net.tcp, выполнив следующую команду из командной строки уровня администратора:
%windir%\system32\inetsrv\appcmd.exe set site "Default Web Site" --bindings.[protocol='net.tcp',bindingInformation='808:*']
Замечание
Эта команда должна быть введена в виде одной строки текста.