Проблема метаданных привязки net.tcp - PullRequest
2 голосов
/ 25 мая 2009
<system.serviceModel>
    <services>
      <service name="SUR.Core.Service.Implementation.SURDirectoryService" behaviorConfiguration="DefaultServiceBehavior">
        <host>
          <baseAddresses>
            <add baseAddress="net.tcp://127.0.0.1:8731/ISURDirectoryService"/>
          </baseAddresses>
        </host>
        <endpoint address=""  binding="netTcpBinding" bindingConfiguration="DefaultDirectoryServiceBindConfig" contract="SUR.Core.Service.Facade.ISURDirectoryService"/>
        <endpoint address="mex" binding="mexTcpBinding" contract="IMetadataExchange"/>
      </service>
      <service name="MSS.Core.Service.Implementation.MSSDirectoryService" behaviorConfiguration="DefaultServiceBehavior">
        <host>
          <baseAddresses>
            <add baseAddress="net.tcp://127.0.0.1:8731/IMSSDirectoryService"   />
            <add baseAddress="http://127.0.0.1:8732/IMSSDirectoryService"   />
          </baseAddresses>
        </host>
        <endpoint address=""  binding="netTcpBinding" bindingConfiguration="DefaultDirectoryServiceBindConfig" contract="MSS.Core.Service.Facade.IMSSDirectoryService"/>
        <endpoint address="Person" binding="basicHttpBinding" bindingConfiguration="StreamedServicesBinding" contract="MSS.Core.Service.Facade.IMSSPersonService"/>
        <endpoint address="mex" binding="mexTcpBinding" contract="IMetadataExchange"/>
      </service>
    </services>
    <bindings>
      <customBinding>
        <binding name="MetadataExchangeTcpBinding">
          <tcpTransport portSharingEnabled="True" />
        </binding>
      </customBinding>
      <netTcpBinding>
        <binding name="DefaultDirectoryServiceBindConfig" maxReceivedMessageSize="1048576"
             closeTimeout="00:01:00" openTimeout="00:01:00" receiveTimeout="00:10:00" sendTimeout="00:05:00">
          <security mode="None"></security>
        </binding>
        <binding name="mexBinding" portSharingEnabled="true">
          <security mode="None"/>
        </binding>
      </netTcpBinding>
      <basicHttpBinding>
        <binding name="StreamedServicesBinding" transferMode="StreamedResponse" maxReceivedMessageSize="10067108864"
                 closeTimeout="00:01:00" openTimeout="00:01:00" receiveTimeout="00:10:00" sendTimeout="00:05:00" maxBufferSize="500" >
          <security mode="None"></security>
        </binding>
      </basicHttpBinding>
    </bindings>
    <behaviors>
      <serviceBehaviors>
        <behavior name="DefaultServiceBehavior">
          <serviceMetadata />
          <dataContractSerializer maxItemsInObjectGraph="6553600" />
          <!-- To avoid disclosing metadata information, 
          set the value below to false and remove the metadata endpoint above before deployment -->
          <!--<serviceMetadata httpGetEnabled="True"/>-->
          <serviceThrottling maxConcurrentCalls="30" maxConcurrentSessions="30" maxConcurrentInstances="30"/>
          <!-- 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="True" />
        </behavior>
      </serviceBehaviors>
    </behaviors>
  </system.serviceModel>

Вот моя конфигурация WCF, но когда я пытаюсь добавить сервисную ссылку на

net.tcp://127.0.0.1:8731/IMSSDirectoryService

Я получаю ошибку:

Метаданные содержат ссылку, которая не может быть разрешена: 'net.tcp: // localhost: 8731 / IMSSDirectoryService'.

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

Ответы [ 2 ]

2 голосов
/ 25 мая 2009

У вас есть два идентичных базовых адреса:

<service name="SUR.Core.Service.Implementation.SURDirectoryService" 
         behaviorConfiguration="DefaultServiceBehavior">
  <host>
    <baseAddresses>
      <add baseAddress="net.tcp://127.0.0.1:8731/ISURDirectoryService"/>
    </baseAddresses>


<service name="MSS.Core.Service.Implementation.MSSDirectoryService" 
         behaviorConfiguration="DefaultServiceBehavior">
   <host>
     <baseAddresses>
       <add baseAddress="net.tcp://127.0.0.1:8731/IMSSDirectoryService"   />

В этом причина ваших проблем - при подключении к net.tcp://127.0.0.1:8731/ WCF не знает, какую службу вы имеете в виду.

Базовый адрес должен быть УНИКАЛЬНЫМ в пределах его "схемы" (например, http, net.tcp и т. Д.)

Марк

РЕДАКТИРОВАТЬ: если вы хотите иметь возможность получать свои метаданные с помощью браузера и переходить по URL-адресу, чтобы получить их, вам нужно активировать <serviceMetadata httpGetEnabled="True"/> в вашем поведении службы. В противном случае вы сможете получить доступ к метаданным только с помощью вызова SOAP через net.tcp - например, с помощью приложения «WcfTestClient.exe», которое находится в папке Visual Studio 9 / Common7 / IDE.

РЕДАКТИРОВАТЬ 2: вы определили ряд дополнительных привязок и поведений для MEX, но, поскольку ни одна из ваших конечных точек mex не ссылается ни на одну из этих настроек, они не используются.

0 голосов
/ 26 мая 2009

Я решил проблему, я просто изменил привязку mex для службы MSS на http. большое спасибо marc_s ваш ответ поможет мне понять проблему!

...