WCF netTcpBinding, размещенный на IIS7.5, перестает работать - PullRequest
4 голосов
/ 01 августа 2011

У меня есть простая служба .NET 4 WCF, которую я разместил локально на IIS7.5. Первоначально я принимал его, используя httpBinding, который работал нормально. Затем я переключил его на netTcpBinding, который после изменения файла web.config также работал нормально. Однако сегодня он решил прекратить работу. Я вообще не могу подключиться к сервису с помощью тестового клиента, получив:

URI: net.tcp://localhost/case/service.svc/mex Metadata contains a reference that cannot be resolved: 'net.tcp://localhost/case/service.svc/mex'. The message could not be dispatched because the service at the endpoint address 'net.tcp://localhost/case/service.svc/mex' is unavailable for the protocol of the address.

Я проверил, что служба активации без http (все еще) установлена; служба прослушивателя net tcp работает; net.tcp находится в списке включенных протоколов для сайта; Я бежал servicemodelreg.exe -ia; Я также повторно запустил aspnet_regiis.exe -i; и наконец я проверил привязку net.tcp на сайте.

Если я запускаю netstat, я вижу, что что-то прослушивает порт, но я не могу подключиться к нему.

Это сводит меня с ума, так как сегодня утром все работало нормально (как это было на прошлой неделе), а сейчас просто нет.

РЕДАКТИРОВАТЬ: Если я получаю доступ к службе в IE, то я вижу, что она выдает следующее исключение:

Could not find a base address that matches scheme net.tcp for the endpoint with binding NetTcpBinding. Registered base address schemes are [http].

Но, глядя в файл web.config, это не так:

<services>
  <service behaviorConfiguration="ServiceBehavior" name="[REMOVED].[REMOVED]">
    <endpoint binding="netTcpBinding" bindingConfiguration="PortSharingBinding" contract="[REMOVED].[REMOVED]" />
    <endpoint address="mex" binding="mexTcpBinding" contract="IMetadataExchange" />
  </service>
</services>

<bindings>
  <netTcpBinding>
    <binding name="PortSharingBinding" portSharingEnabled="true">
      <security mode="None"/>
    </binding>
    <binding name="mexTcpBinding" portSharingEnabled="true">
      <security mode="None" />
    </binding>
  </netTcpBinding>
</bindings>

Ответы [ 2 ]

7 голосов
/ 01 августа 2011

ОК, наконец-то решил.Я включил протокол net.tcp на уровне сайта, но он не был включен на уровне приложения.Я предполагаю, что это должно было быть раньше, и я думаю, что я мог бы создать новое приложение после изменения названия проекта ранее и, очевидно, забыл установить протокол для приложения - doh!

Итак, последний контрольный список для размещенияСлужба WCF net.tcp в IIS:

  1. Убедитесь, что служба активации WCF без HTTP установлена ​​
  2. Убедитесь, что обе службы Net.Tcp Listener и Net.Tcp Port Sharing оба работают
  3. Добавьте net.tcp к включенным протоколам для сайта и приложения (для доступа к параметру «Дополнительные настройки» из диспетчера IIS необходимо наличие привязки http)
  4. Выполните servicemodelreg.exe -ia для регистрации элементов WCFс IIS
  5. Запустите aspnet_regiis.exe -i, чтобы убедиться, что .NET правильно настроен с IIS
  6. Добавьте привязку net.tcp к сайту
0 голосов
/ 01 августа 2011

Вы проверили, что совместное использование портов включено?

см. http://msdn.microsoft.com/en-us/library/ms734772.aspx

РЕДАКТИРОВАТЬ - Для WAS требуется еще один сервис:

помимо NetTcpPortSharing необходима услуга NetTcpActivator ...

см. http://msdn.microsoft.com/en-us/magazine/cc163357.aspx

...