2012-01-26 4 views
0

У меня есть служба Windows, на которой размещена служба WCF на одной машине в моей сети. У меня есть клиент, который пытается подключиться к нему на другой машине в сети. Я получаю следующее сообщение об ошибке при подключении и попытке подписаться на услугу WCF:Ошибка WCF-клиента - время ожидания ответа на запрос ответа

Канал запроса отключен во время ожидания ответа после 00: 00: 09.9989999. Увеличьте значение тайм-аута, переданного вызову Запросить или увеличьте значение SendTimeout в Binding. Время, отведенное для этой операции, возможно, было частью более длительного таймаута.

Я добавил трассировку для клиента и службы, чтобы попытаться выяснить проблему, но я не могу ее понять.

Вот Служба 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

Если проблема действительно на клиенте, посмотрите на конфигурацию вашего клиента - вы установили значение Time Timeout на 10 секунд. Вы пытались увеличить значения таймаута, чтобы узнать, устраняет ли это проблему? – Tim

+0

Да, я установил его на одну минуту, и он по-прежнему дает ту же ошибку. – Brian

+0

Насколько вы уверены, что проблема связана с клиентом, а не с сервисом? Я прошу, потому что служба может столкнуться с исключением или другой проблемой и превышением таймаута. Еще одна возможность рассмотреть, если вы еще этого не сделали. – Tim

ответ

0

Это, скорее всего, вопрос брандмауэра - WSDualHttpBinding пытается открыть второе соединение с сервером обратно клиенту, который, вероятно, будет заблокирован любым брандмауэром

NetTcpBinding является гораздо более надежным для дуплексной связи, как я в блоге here

Смежные вопросы