Размещение дуплексной службы wcf в IIS

Я могу разместить «обычную» службу basichttp с IIS и получить к ней доступ по локальной сети. Проблема в том, что я пытаюсь сделать дуплексную службу и разместить ее в IIS.

Мой Web.Config:

<system.serviceModel>
<services>
  <service behaviorConfiguration="BaseBehavior" name="RegistrationService">
    <endpoint binding="wsDualHttpBinding" bindingConfiguration="wsDualHttpBind" name="RegistrationService" contract="Service" />
  </service>
</services>
<behaviors>
  <serviceBehaviors>
    <behavior name="BaseBehavior">
      <serviceMetadata httpGetEnabled="true" />
      <serviceDebug includeExceptionDetailInFaults="true" />
    </behavior>
  </serviceBehaviors>
</behaviors>
<bindings>
  <wsDualHttpBinding>
    <binding name="wsDualHttpBind" sendTimeout="00:01:00">
      <security mode="None">
        <message clientCredentialType="None" />
      </security>
    </binding>
  </wsDualHttpBinding>
</bindings>
</system.serviceModel>
<system.webServer>
<modules runAllManagedModulesForAllRequests="true"/>
</system.webServer>
</configuration>

Сообщение об ошибке, которое я получаю, когда открываю «http://localhost/Service/Service.svc»:

«Контракт требует «дуплексной» привязки. «BasicHttpBinding» не поддерживает это, и поддержка была настроена неправильно».

Я погуглил и нашел разные настройки для web.config, но ни одна из них не сработала. Я предполагаю, что файл web.config неверен.


person Manuel    schedule 22.08.2012    source источник


Ответы (2)


Прежде всего, у вас должен быть Service.svc, указывающий на реализацию вашего сервиса. Затем в служебной записи попробуйте указать полное имя (то, которое вы используете в атрибуте Service файла Service.svc) без сборки, если она находится в отдельном проекте. Наконец, используйте полное имя реализованного сервисного контракта для атрибута контракта (здесь тоже не используйте сборку). Имя конечной точки не должно быть важным.

person fra    schedule 22.08.2012

Спасибо за быстрый ответ, фра. Моя конфигурация была совершенно неправильной ^^

После прочтения этой статьи:

http://www.dotnetconsult.co.uk/weblog2/PermaLink,guid,b891610a-6b78-4b54-b9a6-4ec81c82b7c0.aspx

я изменил с wsDualHttpBinding на net.tcp.

Мой новый web.config выглядит так:

<system.serviceModel>

<behaviors>
  <serviceBehaviors>
    <behavior name="MyBehaviour">
      <serviceMetadata />
    </behavior>
  </serviceBehaviors>
</behaviors>
<services>
<service name="Service" behaviorConfiguration="MyBehaviour">
  <endpoint address=""
            binding="netTcpBinding"
            bindingConfiguration="InsecureTcp"
            contract="IService" />
  <endpoint address="mextcp" binding="mexTcpBinding" contract="IMetadataExchange"/>
</service>
</services>
<bindings>
  <netTcpBinding>
    <binding name="InsecureTcp" portSharingEnabled="true">
      <security mode="None" />
    </binding>
  </netTcpBinding>
</bindings>

And in IIS i added net.tcp to the website. (http,net.tpc) And the firewall has to allow the ports.

Теперь это работает.

person Manuel    schedule 22.08.2012