Проблема метаданных привязки net.tcp
<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 ответа
У вас есть два идентичных базовых адреса:
<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 не ссылается ни на одну из этих настроек, они не используются.
Я решил проблему, я просто изменил привязку mex для службы MSS на http. Большое спасибо marc_s Ваш ответ поможет мне понять проблему!