Не удается разместить службу wcf на основе tcp в IIS, не удается получить метаданные из net.tcp://localhost/TestApp2/MyService.

У меня есть простой тестовый сервис WCF. Я пытаюсь разместить его под IIS 7.5 (Windows 7), но пока безуспешно. я получаю сообщение об ошибке

Не удается получить метаданные из net.tcp://localhost/TestApp2/MyService.

У меня есть веб-сайт TestApp2 под веб-сайтом по умолчанию, я включил tcp на веб-сайте по умолчанию и TestApp2. Вот мой файл web.config, хотя я понимаю, что в этой ошибке просто указано, что у меня нет конечной точки для обмена метаданными, я не вижу, в чем проблема, потому что я включил конечную точку для обмена метаданными.

<system.serviceModel>
<services>
  <service behaviorConfiguration="ServiceBehavior" name="MyService">

    <endpoint address="net.tcp://localhost/TestApp2/MyService"
              binding="netTcpBinding"
              bindingConfiguration="PortSharingBinding"
              contract="II7WcfService.IService1" />

    <endpoint address="MEX"
              binding="mexTcpBinding"
              contract="IMetadataExchange" />

    <host>
      <baseAddresses>
        <add baseAddress="net.tcp://localhost/TestApp2/MyService" />
      </baseAddresses>
    </host>

  </service>
</services>
<bindings>
  <netTcpBinding>
    <binding name="PortSharingBinding" portSharingEnabled="true">
      <security mode="None"/>
    </binding>
  </netTcpBinding>
</bindings>
<behaviors>
  <serviceBehaviors>
    <behavior name="ServiceBehavior">
      <serviceMetadata httpGetEnabled="False" />
      <serviceDebug includeExceptionDetailInFaults="false" />
    </behavior>
  </serviceBehaviors>
</behaviors>

Thanks.


person Michael    schedule 25.01.2012    source источник


Ответы (1)


Я предполагаю, что ваша служба на самом деле не называется MyService, а находится в пространстве имен. Это означает, что объявленные вами конечные точки не перехватываются, а вместо них используются точки по умолчанию (которые не включают IMetadataExchange).

Добавьте имя вашего пространства имен в атрибут в конфиге, и он должен работать.

person Richard Blewett    schedule 25.01.2012
comment
Спасибо за ответ, Ричард, MyService - это файл svc, в разметке которого есть только объявление ServiceHost <%@ ServiceHost Language="C#" Debug="true" Service="IIS7HostedWCFService.Service1" %> Итак, как вы видите, пространства имен не существует. Service1 — это файл .cs, который является реализацией моего контракта ( IService1 ). Так я должен что-то изменить? - person Michael; 25.01.2012
comment
Имя службы IIS7HostedWCFService.Service1 — поместите его в файл конфигурации вместо MyService. - person Richard Blewett; 25.01.2012
comment
Наконец-то я это исправил, проблема заключалась в том, что мои реализации svc и ServiceContract имели разные имена. Спасибо Ричард! - person Michael; 26.01.2012