2012-04-05 72 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