2012-01-26 178 views
0

我有一个Windows服务在我的网络上的一台计算机上托管WCF服务。我有一个客户端尝试在网络上的另一台计算机上连接到它。当我连接并尝试订阅WCF服务时,出现以下错误:WCF客户端错误 - 请求通道在等待答复时超时

请求通道在等待00:00:09.9989999后的回复时超时。增加传递给请求调用的超时值或增加绑定上的SendTimeout值。分配给此操作的时间可能是超时时间的一部分。

我已经追加到客户端和服务以尝试找出问题,但我无法理解它。

这里是服务的app.config:

<?xml version="1.0"?> 
<configuration> 
    <system.serviceModel> 
    <services> 
     <service name="OSAERest.api" behaviorConfiguration="MyServiceBehavior"> 
     <endpoint address="http://localhost:8732/api" 
        binding="webHttpBinding" 
        contract="OSAERest.IRestService" 
        behaviorConfiguration="WebHttp"/> 
     </service> 
     <service name="WCF.WCFService" behaviorConfiguration="WCFBehavior"> 
     <endpoint address="" binding="wsDualHttpBinding" bindingConfiguration="WCFBinding" 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="MyServiceBehavior"> 
      <serviceMetadata httpGetEnabled="true"/> 
      <serviceDebug includeExceptionDetailInFaults="true" /> 
     </behavior> 
     <behavior name="WCFBehavior"> 
      <serviceMetadata httpGetEnabled="true"/> 
      <serviceDebug includeExceptionDetailInFaults="true" /> 
      <dataContractSerializer maxItemsInObjectGraph="6553600" /> 
      <serviceTimeouts transactionTimeout="05:05:00" /> 
      <serviceThrottling maxConcurrentCalls="500" maxConcurrentSessions="500" 
      maxConcurrentInstances="2147483647" /> 
     </behavior> 
     </serviceBehaviors> 
     <endpointBehaviors> 
     <behavior name="WebHttp"> 
      <webHttp /> 
     </behavior> 
     </endpointBehaviors> 
    </behaviors> 
    <bindings> 
     <wsDualHttpBinding> 
     <binding name="WCFBinding"> 
      <security mode="None"> 
      </security> 
     </binding> 
     </wsDualHttpBinding> 

    </bindings> 
    </system.serviceModel> 
    <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.diagnostics> 
    <sources> 
     <source name="System.ServiceModel" 
       switchValue="Information, ActivityTracing" 
       propagateActivity="true"> 
     <listeners> 
      <add name="traceListener" 
       type="System.Diagnostics.XmlWriterTraceListener" 
       initializeData= "Logs\ServiceTraces.svclog" /> 
     </listeners> 
     </source> 
    </sources> 
    </system.diagnostics> 
</configuration> 

这里是客户端的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> 
     <wsDualHttpBinding> 
     <binding name="WSDualHttpBinding_IWCFService" closeTimeout="00:00:10" 
      openTimeout="00:00:10" receiveTimeout="00:00:10" sendTimeout="00:00:10" 
      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="None"> 
      <message clientCredentialType="Windows" negotiateServiceCredential="true" /> 
      </security> 
     </binding> 
     </wsDualHttpBinding> 
    </bindings> 
    <client> 
     <endpoint address="http://localhost:8731/Design_Time_Addresses/WCF/WCFService/" 
     binding="wsDualHttpBinding" bindingConfiguration="WSDualHttpBinding_IWCFService" 
     contract="WCFService.IWCFService" name="WSDualHttpBinding_IWCFService"> 
     <identity> 
      <dns value="localhost" /> 
     </identity> 
     </endpoint> 
    </client> 
    </system.serviceModel> 
    <system.diagnostics> 
    <sources> 
     <source name="System.ServiceModel" 
       switchValue="Information, ActivityTracing" 
       propagateActivity="true"> 
     <listeners> 
      <add name="traceListener" 
       type="System.Diagnostics.XmlWriterTraceListener" 
       initializeData= "Logs\Traces.svclog" /> 
     </listeners> 
     </source> 
    </sources> 
    </system.diagnostics> 
</configuration> 

服务上的跟踪显示连接的详细信息,从客户端,因此它的到来必须有所成就。另外,当我从服务器运行客户端作为服务时,一切正常。我可能需要做些什么才能使远程连接起作用?

+0

如果问题确实在客户端上,请查看您的客户端配置 - 您已将发送超时值设置为10秒。您是否尝试增加超时值以查看是否可以解决问题? – Tim 2012-01-27 00:48:04

+0

是的,我已将其设置为一分钟,但它仍然会出现相同的错误。 – Brian 2012-01-27 01:11:05

+0

你对这个问题在客户端而不是服务上有多积极?我问,因为该服务可能会遇到异常或其他问题,并超过超时。如果你还没有考虑的话,还有另一种可能性。 – Tim 2012-01-27 07:31:35

回答

0

这是最有可能是防火墙的问题 - wsDualHttpBinding试图打开来自服务器的第二连接返回到客户端,可能是由任何防火墙

NetTcpBinding的阻塞远远的双工通信更稳健,因为我在博客中here