2015-07-22 3 views
0

У меня есть две разные службы WCF, размещенные на IIS7. Одним из них является служба базы данных, которая настроена для работы на namedpipe. Другая служба, размещенная на том же компьютере, обращается к первой службе через именованный канал и настроена для работы на веб-странице.Настроить WCF как именованную трубку, размещенную на IIS7

однако, когда я вызвать службу базы данных из другой службы я получаю следующую ошибку

«Там не было конечной точкой прослушивания на„net.pipe:. // локальный/iSPYDBService“, которые могли бы принять сообщение Это часто вызванных неправильным адресом или действием SOAP. Для получения дополнительной информации см. InnerException, если имеется. "

Database Service Config файл сниппета

<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» в «разрешенные протоколы».

ответ

0

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

  1. Очистить адрес в сервисном конфигурации как address=""
  2. Edit привязок сайта в IIS и добавить или обновить сайт связывания типа net.pipe и дать «Binding information» собственное имя
  3. Обновить конфигурацию вашего клиента до address="net.pipe://PROPER_NAME/YOUR_SERVICE.svc"
  4. Установите для режима безопасности значение None для привязок как на клиенте, так и на стороне службы.
  5. Убедитесь, что функции Windows, которые включены для Named Pipe активации для WCF 4.5 или Non-HTTP Activation для WCF 3.5
0
  1. Вы не можете использовать IIS Express.

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

Следить за хлебный мякиш:

WCF хоста веб-сайта> Управление приложений> Расширенные настройки> Enabled протоколы

Вы, наверное, "HTTP" или "HTTP, Net.Tcp" уже установлен.

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

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

http,net.tcp,net.pipe 

В этом случае волшебство является правильным значением («net.pipe»).

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

Could not find a base address that matches scheme net.tcp

Смежные вопросы