Настройте 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 ответа

  1. Вы не можете использовать IIS Express.

  2. В IIS (полный, не экспресс) ... зайдите на свой сайт.

Следуйте за этой крошкой хлеба:

Веб-сайт хоста WCF> Управление приложениями> Дополнительные параметры> Включенные протоколы

Возможно, вы уже установили "http" или "http, net.tcp".

Добавьте "net.pipe" (с запятой перед ним)

Как видно ниже. Обратите внимание, не добавляйте пробелы.

http,net.tcp,net.pipe

Магия - правильное значение ("net.pipe") в этом случае.

Вы можете прочитать больше об этом здесь

Не удалось найти базовый адрес, соответствующий схеме net.tcp

Следующее должно помочь:

  1. Очистить адрес в настройках сервиса как address=""
  2. Отредактируйте привязки вашего сайта в IIS и добавьте или обновите привязки сайта типа net.pipe и присвойте "Информация привязки" правильное имя.
  3. Обновите конфигурацию клиента до address="net.pipe://PROPER_NAME/YOUR_SERVICE.svc"
  4. Установите режим безопасности "Нет" для привязок как на стороне клиента, так и на стороне службы.
  5. Убедитесь, что функции Windows включены для активации именованных каналов для WCF 4.5 или не-HTTP-активации для WCF 3.5
Другие вопросы по тегам