Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
В примере NamedPipeActivation показана служба, использующая службу активации процесса Windows (WAS) для активации службы, которая взаимодействует через именованные каналы. Этот пример основан на Начале работы и для работы требуется Windows Vista.
Замечание
Инструкции по настройке и сборке этого примера находятся в конце этого раздела.
Детали образца
Пример состоит из клиентской консольной программы (.exe) и библиотеки служб (.dll), размещенной в рабочем процессе, активированном службами активации Windows (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;
}
}
В примере используется измененная netNamedPipeBinding привязка без безопасности. Привязка указывается в файлах конфигурации для клиента и службы. Тип привязки для службы указан в атрибуте элемента binding конечной точки, как показано в следующем примере конфигурации.
Если вы хотите использовать безопасную привязку именованных каналов, измените режим безопасности сервера на нужный параметр безопасности и снова запустите 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.pipe://localhost/servicemodelsamples/service.svc -->
<endpoint address=""
binding="netNamedPipeBinding"
bindingConfiguration="Binding1"
contract="Microsoft.ServiceModel.Samples.ICalculator" />
<!-- the mex endpoint is exposed at net.pipe://localhost/servicemodelsamples/service.svc/mex -->
<endpoint address="mex"
binding="mexNamedPipeBinding"
contract="IMetadataExchange" />
</service>
</services>
<bindings>
<netNamedPipeBinding>
<binding name="Binding1" >
<security mode = "None">
</security>
</binding >
</netNamedPipeBinding>
</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>
<client>
<endpoint name=""
address="net.pipe://localhost/servicemodelsamples/service.svc"
binding="netNamedPipeBinding"
bindingConfiguration="Binding1"
contract="Microsoft.ServiceModel.Samples.ICalculator" />
</client>
<bindings>
<!-- Following is the expanded configuration section for a NetNamedPipeBinding.
Each property is configured with the default value. -->
<netNamedPipeBinding>
<binding name="Binding1"
maxBufferSize="65536"
maxConnections="10">
<security mode = "None">
</security>
</binding >
</netNamedPipeBinding>
</bindings>
</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.
Настройте службу активации процессов Windows (WAS) для поддержки активации именованных каналов.
Для удобства следующие два шага реализованы в пакетном файле с именем AddNetPipeSiteBinding.cmd, расположенном в примере каталог.
Для поддержки активации net.pipe веб-сайт по умолчанию должен быть привязан к протоколу net.pipe. Это можно сделать с помощью appcmd.exe, установленной с набором инструментов управления IIS 7.0. В командной строке с повышенными привилегиями (администратор) выполните следующую команду.
%windir%\system32\inetsrv\appcmd.exe set site "Default Web Site" -+bindings.[protocol='net.pipe',bindingInformation='*']Замечание
Эта команда представляет собой одну строку текста.
Эта команда добавляет привязку сайта net.pipe к веб-сайту по умолчанию.
Хотя все приложения на сайте совместно используют общую привязку net.pipe, каждое приложение может включить поддержку net.pipe по отдельности. Чтобы включить net.pipe для приложения /servicemodelsamples, выполните следующую команду из командной строки с повышенными привилегиями.
%windir%\system32\inetsrv\appcmd.exe set app "Default Web Site/servicemodelsamples" /enabledProtocols:http,net.pipeЗамечание
Эта команда представляет собой одну строку текста.
Эта команда позволяет приложению /servicemodelsamples получать доступ с помощью обоих
http://localhost/servicemodelsamplesиnet.tcp://localhost/servicemodelsamples.
Чтобы создать версию решения на C# или Visual Basic .NET, следуйте инструкциям по сборке примеров Windows Communication Foundation .
Удалите привязку сайта net.pipe, добавленную для этого примера.
В качестве удобства следующие два шага реализуются в пакетном файле с именем RemoveNetPipeSiteBinding.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.pipe',bindingInformation='*']Замечание
Эта команда должна быть введена в виде одной строки текста.