2009-05-25 4 views
2
<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 configuratio, но когда я пытаюсь добавить ссылки на службу кnet.tcp проблема связывания метаданных

net.tcp://127.0.0.1:8731/IMSSDirectoryService 

Я получаю сообщение об ошибке:

Metadata contains a reference that cannot be resolved: 'net.tcp://localhost:8731/IMSSDirectoryService'.

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

+0

Я думаю, проблема в mex bidnings, сервер не может получить метаданные. Может быть, я должен установить безопасность для mex? Я попытался это сделать, но я получил другое сообщение об ошибке ... –

ответ

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 и т.д.)

Marc

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

EDIT 2: вы определили ряд дополнительных привязок и поведения для MEX, но поскольку ни одна из ваших конечных точек mex не ссылается ни на одну из этих настроек, они не используются.

+0

Я изменил порт ISURDirectoryService, это не помогает, я получаю то же сообщение об ошибке –

+0

Как вы пытаетесь получить свои метаданные? Использование какого-либо вызова SOAP, или вы пытаетесь в браузере? –

+0

Браузер возвращает запрос на кровать, инструмент svcutill генерирует прокси-сервер для SUR, но при генерации MSS я получаю ошибку, Сообщение с действием 'http://schemas.xmlsoap.org/ws/2 004/09/transfer/Get' не может быть обрабатывается в приемнике из-за несоответствия ContractFilte r на конечной точке. Это может быть связано либо с контрактом m ismatch (несоответствие действий между отправителем и получателем), либо привязка/безопасность m ismatch между отправителем и получателем. Проверьте, что отправитель и получатель hav e тот же контракт и тот же переплет (включая требования безопасности, например Сообщение, транспорт, нет). –

0

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

+0

А, отлично - рад, что вы нашли проблему! –

+0

У меня такая же проблема. Я не хочу использовать mexhttpBinding. Я хотел бы использовать mexTcpBinding. Диалоговое окно «Добавить служебную службу» задает ошибку, указанную в сообщении, любые подсказки? –