WCF(net.tcp)服务:适用于除一个系统之外的所有系统

时间:2010-07-30 15:11:19

标签: c# wcf wcf-binding net.tcp wcftestclient

我写过在Windows服务中创建了一个WCF服务,由于某些原因我无法弄清楚,我在一堆系统上部署了服务(在操作系统和配置上几乎完全相同),并且它可以工作除了一台服务器外除服务的基址外,所有部署的配置都相同。

当服务启动时,我打开ServiceHost时没有异常,当使用netstat -anp时,我可以看到服务器进程已打开套接字。我为丢弃的数据包设置了Windows防火墙日志记录,但日志文件仍为空。

如果我尝试从WCF测试客户端访问WCF服务,我会收到以下消息:

Error: Cannot obtain Metadata from net.tcp://myhostname:9001/SysMonitorAgent 
If this is a Windows (R) Communication Foundation service to which you have access, please check that you have enabled metadata publishing at the specified address.  For help enabling metadata publishing, please refer to the MSDN documentation at http://go.microsoft.com/fwlink/?LinkId=65455.
WS-Metadata Exchange Error    
    URI: net.tcp://myhostname:9001/SysMonitorAgent    
    Metadata contains a reference that cannot be resolved: 'net.tcp://myhostname:9001/SysMonitorAgent'.
    There was no endpoint listening at net.tcp://myhostname:9001/SysMonitorAgent that could accept the message. This is often caused by an incorrect address or SOAP action. See InnerException, if present, for more details.

我尝试过WCF日志记录,但日志文件甚至都没有创建。

服务的配置如下:

<system.serviceModel>
  <diagnostics>
    <messageLogging logMalformedMessages="true" logMessagesAtServiceLevel="true" logMessagesAtTransportLevel="true" />
  </diagnostics>
  <bindings>
    <netTcpBinding>
      <binding name="InterfaceServiceNetTcpBinding">
        <security mode="None">
          <transport clientCredentialType="None" protectionLevel="None" />
          <message clientCredentialType="None" />
        </security>
      </binding>
    </netTcpBinding>
  </bindings>
  <behaviors>
    <serviceBehaviors>
      <behavior name="InterfaceServiceBehavior">
        <serviceMetadata httpGetEnabled="false" />
        <serviceDebug httpHelpPageEnabled="false" httpsHelpPageEnabled="false" includeExceptionDetailInFaults="false" />
      </behavior>
    </serviceBehaviors>
  </behaviors>
  <services>
    <service name="SysMonitor.Agent.Interface.InterfaceService" behaviorConfiguration="InterfaceServiceBehavior">
      <endpoint address="" binding="netTcpBinding" bindingConfiguration="InterfaceServiceNetTcpBinding" contract="SysMonitor.Agent.Interface.IInterfaceService">
        <identity>
          <dns value="localhost" />
        </identity>
      </endpoint>
      <endpoint address="mex" binding="mexTcpBinding" contract="IMetadataExchange" />
      <host>
        <baseAddresses>
          <add baseAddress="net.tcp://myhostname:9001/SysMonitorAgent" />
        </baseAddresses>
      </host>
    </service>
  </services>
</system.serviceModel>

我有点失落,因为没有任何迹象表明它为什么不起作用。任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:0)

您正在部署的服务器上是否在端口9100上运行?

好像找不到服务了。您是否尝试更改基地址?

如果您在serval系统上部署它并且它不能在一个系统上配置它是典型的。我会检查

  • .NET版本
  • 确保此计算机上未设置防火墙,以防止绑定
  • 检查您绑定的端口是否已打开(本案例为9100)
  • 如果需要,请确保GAC或文件夹中包含任何第三方.dll。
  • 验证所有.dll和您的代码是最新的。

我看到错误消息“net.tcp:// myhostname:9001 / SysMonitorAgent”

您是否尝试将其替换为机器IP地址而不是使用主机名?

答案 1 :(得分:0)

除了David的观点,请检查Windows服务是否正在运行。

事件日志中的任何错误?