Настройте WCF как именованный канал, размещенный на IIS7
У меня есть две разные службы WCF, размещенные на IIS7. Одним из них является служба базы данных, настроенная для работы с namedpipe. Другая служба, размещенная на той же машине, получает доступ к первой службе по именованному каналу и настроена для работы по webhttp.
Однако, когда я вызываю службу базы данных из другого сервиса, я получаю следующую ошибку
"Не было прослушивания конечной точки на"net.pipe://localhost/iSPYDBService", который мог бы принять сообщение. Это часто вызвано неправильным адресом или действием SOAP. Для получения дополнительной информации см. InnerException, если имеется,".
Фрагмент файла службы базы данных Фрагмент
<system.serviceModel>
<services>
<service name="DBService.Service">
<endpoint address="net.pipe://localhost/iSPYDBService"
binding="netNamedPipeBinding"
contract="DBService.Contracts.IDBService"
bindingConfiguration="Binding1" />
</service>
</services>
<behaviors>
<serviceBehaviors>
<behavior>
<!-- To avoid disclosing metadata information, set the values below to false before deployment -->
<serviceMetadata httpGetEnabled="true" httpsGetEnabled="true" />
<!-- To receive exception details in faults for debugging purposes, set the value below to true. Set to false before deployment to avoid disclosing exception information -->
<serviceDebug includeExceptionDetailInFaults="false" />
</behavior>
</serviceBehaviors>
</behaviors>
<protocolMapping>
<add binding="basicHttpsBinding" scheme="https" />
</protocolMapping>
<bindings>
<netNamedPipeBinding>
<binding name="Binding1"
closeTimeout="00:01:00"
openTimeout="00:01:00"
receiveTimeout="00:10:00"
sendTimeout="00:01:00"
transactionFlow="false"
transferMode="Buffered"
maxBufferPoolSize="524288"
maxBufferSize="65536"
maxConnections="10"
maxReceivedMessageSize="65536">
<security mode="Transport">
<transport protectionLevel="EncryptAndSign" />
</security>
</binding>
</netNamedPipeBinding>
</bindings>
<serviceHostingEnvironment aspNetCompatibilityEnabled="true" multipleSiteBindingsEnabled="true" />
Другая служба Вызов службы базы данных через именованный канал генерирует ошибку, как упоминалось выше.
ChannelFactory<DBService.Contracts.IDBService> pipeFactory =
new ChannelFactory<DBService.Contracts.IDBService>(
new NetNamedPipeBinding(),
new EndpointAddress("net.pipe://localhost/iSPYDBService"));
pipeProxy = pipeFactory.CreateChannel();
var categories = pipeProxy.GetCategories();
Обе службы размещены на IIS. я уже дал привязку для net.pipe в службе базы данных, а также добавил "http, net.pipe" в "включенные протоколы".
2 ответа
Вы не можете использовать IIS Express.
В IIS (полный, не экспресс) ... зайдите на свой сайт.
Следуйте за этой крошкой хлеба:
Веб-сайт хоста WCF> Управление приложениями> Дополнительные параметры> Включенные протоколы
Возможно, вы уже установили "http" или "http, net.tcp".
Добавьте "net.pipe" (с запятой перед ним)
Как видно ниже. Обратите внимание, не добавляйте пробелы.
http,net.tcp,net.pipe
Магия - правильное значение ("net.pipe") в этом случае.
Вы можете прочитать больше об этом здесь
Не удалось найти базовый адрес, соответствующий схеме net.tcp
Следующее должно помочь:
- Очистить адрес в настройках сервиса как
address=""
- Отредактируйте привязки вашего сайта в IIS и добавьте или обновите привязки сайта типа net.pipe и присвойте "Информация привязки" правильное имя.
- Обновите конфигурацию клиента до
address="net.pipe://PROPER_NAME/YOUR_SERVICE.svc"
- Установите режим безопасности "Нет" для привязок как на стороне клиента, так и на стороне службы.
- Убедитесь, что функции Windows включены для активации именованных каналов для WCF 4.5 или не-HTTP-активации для WCF 3.5