如何设置我的WCF服务以便远程客户端可以访问

时间:2011-09-21 18:56:24

标签: c# .net wcf windows-services

我有一个托管在Windows服务中的WCF服务,我可以连接到它并在使用同一台机器时很好地使用它的服务,但是当我尝试在远程计算机上运行我的客户端时它超时了不会连接。我以为我可以使用服务机器的IP而不是localhost更新客户端的app.config文件,但这不起作用。这是客户端的app.config:

<system.serviceModel>
<bindings>
  <wsDualHttpBinding>
    <binding name="WSDualHttpBinding_IWCFService" closeTimeout="00:01:00"
      openTimeout="00:01:00" receiveTimeout="00:10:00" sendTimeout="00:01:00"
      bypassProxyOnLocal="false" transactionFlow="false" hostNameComparisonMode="StrongWildcard"
      maxBufferPoolSize="524288" maxReceivedMessageSize="65536" messageEncoding="Text"
      textEncoding="utf-8" useDefaultWebProxy="true">
      <readerQuotas maxDepth="32" maxStringContentLength="8192" maxArrayLength="16384"
        maxBytesPerRead="4096" maxNameTableCharCount="16384" />
      <reliableSession ordered="true" inactivityTimeout="00:10:00" />
      <security mode="Message">
        <message clientCredentialType="Windows" negotiateServiceCredential="true"
          algorithmSuite="Default" />
      </security>
    </binding>
  </wsDualHttpBinding>
</bindings>
<client>
  <endpoint address="http://192.168.1.141:8731/Design_Time_Addresses/WCF/WCFService/"
    binding="wsDualHttpBinding" bindingConfiguration="WSDualHttpBinding_IWCFService"
    contract="WCFService.IWCFService" name="WSDualHttpBinding_IWCFService">
    <identity>
      <dns value="192.168.1.141" />
    </identity>
  </endpoint>
</client>

这是serivice的app.config:

<system.serviceModel>
<services>
  <service name="WCF.WCFService" behaviorConfiguration="WCFBehavior">
    <endpoint address="" binding="wsDualHttpBinding" contract="WCF.IWCFService">
      <identity>
        <dns value="localhost" />
      </identity>
    </endpoint>
    <endpoint
      address="mex"
      binding="mexHttpBinding"
      bindingConfiguration=""
      contract="IMetadataExchange"/>
    <host>
      <baseAddresses>
        <add baseAddress="http://localhost:8731/Design_Time_Addresses/WCF/WCFService/" />
      </baseAddresses>
    </host>
  </service>
</services>
<behaviors>
  <serviceBehaviors>
    <behavior name="WCFBehavior">
      <serviceMetadata httpGetEnabled="true"/>
      <serviceDebug includeExceptionDetailInFaults="true" />
    </behavior>
  </serviceBehaviors>
</behaviors>

我是否需要在服务端进行远程连接,或者我没有正确配置客户端?

4 个答案:

答案 0 :(得分:3)

这看起来似乎是一个简单的建议,但您是否检查过服务器上的防火墙以确保它不会阻止通信?我花了三天时间把头撞在墙上,直到我注意到了。

答案 1 :(得分:0)

这似乎是你在家里根据你的192地址做的。

您需要在路由器和Windows防火墙中打一个整体才能启动。之后,如果你想访问你家的这一面,你应该尝试使用DynDNS伪造一个静态IP来托管服务。

答案 2 :(得分:0)

您是否可以远程登录到您的服务?如果它不是防火墙问题,我怀疑从服务安全性。由于它配置为通过Windows凭证进行身份验证,这需要您的服务和客户端在同一个域中,如果我错了,请纠正我。

答案 3 :(得分:0)

这可能是一个更好的选择,而不是简单地禁用Windows防火墙为特定端口添加规则:

  

防火墙 - &gt;高级设置 - &gt;入站规则 - &gt;新规则。