从Windows服务连接到WCF服务

本文关键字:服务 WCF 连接 Windows | 更新日期: 2023-09-27 18:21:33

我有一个WCF服务托管在远程计算机上。我能够连接到它,并使用WPF应用程序完美地使用该服务。我还希望能够从不同计算机上的不同Windows服务连接到WCF服务。我设置了与WPF应用程序相同的app.config,但Windows服务不会连接到WCF服务。错误如下:

套接字连接已中止。这可能是由错误引起的处理您的消息或接收超时被远程主机或潜在的网络资源问题。

这是来自Windows服务的app.config:

<?xml version="1.0"?>
<configuration>
  <appSettings>
    <add key="ServiceIP" value="127.0.0.1"/>
  </appSettings>
  <startup>
    <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0"/>
  </startup>
  <runtime>
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
      <probing privatePath="lib" />
    </assemblyBinding>
  </runtime>
  <system.serviceModel>
    <bindings>
      <netTcpBinding>
        <binding name="NetTcpBindingEndpoint" closeTimeout="00:01:00"
          openTimeout="00:00:10" receiveTimeout="00:10:00" sendTimeout="00:00:15"
          transactionFlow="false" transferMode="Buffered" transactionProtocol="OleTransactions"
          hostNameComparisonMode="StrongWildcard" listenBacklog="10" maxBufferPoolSize="524288"
          maxBufferSize="65536" maxConnections="10" maxReceivedMessageSize="65536">
          <readerQuotas maxDepth="32" maxStringContentLength="8192" maxArrayLength="16384"
            maxBytesPerRead="4096" maxNameTableCharCount="16384" />
          <reliableSession ordered="true" inactivityTimeout="00:10:00"
            enabled="false" />
          <security mode="Transport">
            <transport clientCredentialType="Windows" protectionLevel="EncryptAndSign" />
            <message clientCredentialType="Windows" />
          </security>
        </binding>
      </netTcpBinding>
    </bindings>
    <client>
      <endpoint address="net.tcp://localhost:8731/WCFService/" binding="netTcpBinding"
        bindingConfiguration="NetTcpBindingEndpoint" contract="WCFService.IWCFService"
        name="NetTcpBindingEndpoint">
        <identity>
          <dns value="localhost" />
        </identity>
      </endpoint>
    </client>
  </system.serviceModel>
</configuration>

知道为什么我可以很好地连接WPF应用程序,但不能从Windows服务连接吗?

编辑:

以下是我如何在代码中创建连接:

EndpointAddress ep = new EndpointAddress("net.tcp://" + remoteIP + ":8731/WCFService/");
InstanceContext context = new InstanceContext(this);
wcfObj = new WCFService.WCFServiceClient(context, "NetTcpBindingEndpoint", ep);
wcfObj.Subscribe();

编辑2:

多亏了Huusom,我才能够通过更改服务的帐户来让它发挥作用。问题是,我不想让安装服务的用户扰乱服务帐户。除了这个,我还能做些什么让它发挥作用吗?有什么我可以禁用的安全措施吗?

从Windows服务连接到WCF服务

从对问题的评论继续。您需要在ip端口上设置命名空间保留:msdn