2012-04-05 2 views
1

Я искал в Интернете, но я не могу найти решение моей проблемы.Проблемы с привязкой NetTCP и самостоятельным хостингом

Я сам принимаю мое обслуживание на XP, используя nettcpbinding. Файл конфигурации выглядит следующим образом:

<system.serviceModel> 

    <diagnostics> 
     <messageLogging logMalformedMessages="true" logMessagesAtServiceLevel="true" 
     logMessagesAtTransportLevel="true" /> 
    </diagnostics> 

    <serviceHostingEnvironment aspNetCompatibilityEnabled="false" /> 

    <services>  
<service behaviorConfiguration="behaviorconfig" 
     name="myservice"> 
     <host> 
      <baseAddresses> 
      <add baseAddress="net.tcp://10.1.3.186:8001/myService" /> 
      </baseAddresses> 
     </host> 
     <endpoint address="" 
       binding="netTcpBinding" 
       bindingConfiguration="BindingConfiguration" 
       contract="xxx.ISomeService" /> 

     <endpoint address="mex" binding="mexTcpBinding" contract="IMetadataExchange" />  
     </service> 
</services> 
    <bindings> 
      <netTcpBinding> 
     <binding name="BindingConfiguration" receiveTimeout="10:00:00" 
      sendTimeout="10:00:00" maxBufferSize="65536" maxReceivedMessageSize="65536" 
      transferMode="Streamed"> 
      <readerQuotas maxDepth="65536" maxStringContentLength="65536" 
      maxArrayLength="65536" maxBytesPerRead="97108864" maxNameTableCharCount="65536" /> 
      <security mode="None" /> 
     </binding> 
     </netTcpBinding> 
    </bindings> 
    <behaviors> 
     <serviceBehaviors> 
     <behavior name="behaviorconfig"> 
      <serviceMetadata /> 
      <serviceDebug includeExceptionDetailInFaults="true" /> 
     </behavior> 

     </serviceBehaviors> 
    </behaviors> 
    </system.serviceModel> 

И код selfhost является

Uri tcpUrl = new Uri("net.tcp://10.1.3.186:8001/myService"); 
      //Create ServiceHost 
      ServiceHost host 
      = new ServiceHost(typeof(xxx.SomeService), tcpUrl); 
      //Add a service endpoint 
      host.AddServiceEndpoint(typeof(xxx.ISomeService) 
      , new NetTcpBinding(), ""); 
      //Enable metadata exchange 

      ServiceMetadataBehavior smb = new ServiceMetadataBehavior(); 
      smb.HttpGetEnabled = false; 
      host.Description.Behaviors.Add(smb); 
      //Start the Service 
      host.Open(); 

Когда я пытаюсь добавить ссылку на службу, я получаю сообщение об ошибке об ошибке: Не удается получить метаданные из net.tcp: // 10.1.3.186:8001/myService/mex

Что здесь не так?

+0

Ваш служебный элемент имеет атрибут имени как myservice, где он должен был быть xxx.myservice (xxx - это пространство имен) – Rajesh

ответ

3

Похоже, вы пропустили Mex Конечная точка:

host.AddServiceEndpoint (typeof (IMetadataExchange), MetadataExchangeBindings.CreateMexT cpBinding(), "mex");

Небольшая ревизия для уточнения: Меховая конечная точка необходима для обмена информацией о том, что доступно в сервисе. Вы добавляете это в дополнение к основному прослушивателю TCP. Он автоматически добавляется при использовании служб на основе http (wsdl и т. Д.)

+0

Спасибо, что сделал Это. – xaria

Смежные вопросы