2012-04-05 142 views
1

我已經搜索了網頁,但無法找到解決問題的方法。netTCP綁定和自託管的問題

我使用nettcpbinding在XP上自我託管我的服務。配置文件如下:

<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 2012-04-05 15:14:52

回答

3

你好像缺少MEX端點:

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

略加修改,以澄清:需要 MEX終結點所以關於什麼是可用的服務相關的信息可以進行交換。除了主TCP偵聽器之外,還可以添加它。它使用基於http的服務時自動添加(wsdl等)

+0

謝謝它。 – xaria 2012-04-08 15:09:41