2012-06-26 3 views
22

WCF를 사용하여 웹 서버와 통신하는 작은 응용 프로그램이 있습니다. 이 프로그램은 약 200 개의 클라이언트에서 사용되며 각 클라이언트는 약 5-20 요청/분을 전송합니다.응답을 기다리는 동안 요청 채널 시간이 초과되었습니다.

오류 로그를 보면 나는 종종 얻을 : 00 : 다음과 같이 59.9989999

요청이 만들어집니다 : 00 후 응답을 기다리는 동안

요청 채널이 초과

ClientService Client = new ClientService(); 
Client.Open(); 
Client.updateOnline(userID); 
Client.Close(); 

이 은의 app.config

입니다 0
<configuration> 
<configSections> 
</configSections> 
<startup><supportedRuntime version="v2.0.50727"/></startup><system.serviceModel> 
    <bindings> 
     <wsHttpBinding> 
      <binding name="WSHttpBinding_IClientService" 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" 
       allowCookies="false"> 
       <readerQuotas maxDepth="32" maxStringContentLength="8192" maxArrayLength="16384" 
        maxBytesPerRead="4096" maxNameTableCharCount="16384" /> 
       <reliableSession ordered="true" inactivityTimeout="00:10:00" 
        enabled="false" /> 
       <security mode="None"> 
        <transport clientCredentialType="Windows" proxyCredentialType="None" 
         realm="" /> 
        <message clientCredentialType="Windows" negotiateServiceCredential="true" /> 
       </security> 
      </binding> 
     </wsHttpBinding> 
    </bindings> 
    <client> 
     <endpoint address="PATH TO SERVICE" 
      binding="wsHttpBinding" bindingConfiguration="WSHttpBinding_IClientService" 
      contract="IClientService" name="WSHttpBinding_IClientService"> 
      <identity> 
       <dns value="localhost" /> 
      </identity> 
     </endpoint> 
    </client> 
</system.serviceModel> 

"많은 전화"중 매일 약 200-800이 실패합니다. 그리고 n-1에 대해서는 괜찮습니다. 나는 그 문제가 무엇이 될 수 있는지 매우 혼란 스럽다. 서버 통계를 살펴보면 땀을 흘리지는 않습니다. 각 요청은 처리 할 때까지 2 초에 < 걸립니다. 전송하는 데이터는 "int"또는 "매우 작은 문자열"로 구성됩니다. 따라서 크기 때문이 아니라면 일관된 오류가 발생해야합니다.

제안 사항?

+0

하면 IIS에서이 서비스를 호스팅하거나 Windows 서비스 또는 다른 응용 프로그램에 의해 호스팅? –

+0

설정 파일에서 제한 시간 및 견적 설정으로 놀아 보았습니까? – eulerfx

+0

실제로 WCF 추적을 설정하고 (http://msdn.microsoft.com/en-us/library/ms733025.aspx에서 설명 함) 이러한 오류가 표시 될 때 기록되는 메시지를 검토하는 것이 좋습니다. –

답변

9

귀하의 요청이 처리되기 전에 서버에 대기 중이며 시간이 초과되기 시작한 것으로 보입니다. 여기에 몇 가지 시도를하면 무엇이 진행되고 있는지 정확히 알 수 있습니다.

1) WCF 서비스에서 스로틀 링을 시도하십시오. 예 : 동시 세션을 늘려보십시오. 살펴보기 WCF Throttling

2) 여기서 세션을 사용하지 말고 PerCall을 사용하여 세션이 남아 있지 않은지 확인하십시오. 여기 당신이 당신은 세드릭 정확히 볼 수 추적을 사용하도록 설정해야합니다 .... 세션에게 그 인터페이스

ServiceBehavior(InstanceContextMode = InstanceContextMode.PerCall)] 

을 구현

[ServiceContract(Namespace="YOUR NAMESPACE", SessionMode=SessionMode.NotAllowed)] 

및 계약 클래스를 제거하려면 인터페이스 할 수 있습니다 것입니다.

+0

제안한 사항을 수행했습니다 ... 이제 약 15 분 동안 실행하십시오. .. 한 클라이언트 만 문제를보고하고 있습니다 .. (같은 시간 초과 문제). 나는 그것을 한동안 실행하고 문제를보고하는 유일한 클라이언트가 있는지 확인합니다. 그렇다면 문제가 자신의 연결에 영향을 미칩니다. . (일명 .. 늦게) ... –

3

이 성능 카운터를 확인하십시오 - ASP.NET Requests Queued.

하나의 웹 응용 프로그램은 많은 웹 페이지와 서비스를 호스팅 할 수 있습니다. IIS는 기본적으로 CPU 코어 당 12 개의 동시 요청 만 처리합니다.

이것은 서비스가 빠르지 만 다른 페이지/서비스가 느릴지라도 요청이 실행되기 전에 대기열에서 대기해야한다는 것을 의미합니다.

ASP.NET Requests Queued은 0 또는 0에 가까워 야합니다.

Performance Counters for ASP.NET on MSDN을 참조하십시오.

+0

2 분 이상 - 대기중인 최대 ASP.NET 요청은 1 개입니다. ASP.NET v4 대기중인 요청은 0입니다 (.NET 4를 실행 중입니다) –

25

시도 서비스와 클라이언트 모두에 시간 제한 값을 추가 :

<binding name="BasicHttpBinding_SomeName" closeTimeout="00:01:00" 
    openTimeout="00:01:00" receiveTimeout="00:10:00" 
    sendTimeout="00:10:00" maxBufferPoolSize="2147483647" 
    maxBufferSize="2147483647" maxReceivedMessageSize="2147483647"> 
+1

그것은 작동합니다. 쉽고 간단한 해결책. 나는 이것을 고객과 서비스에 설정했다. 고마워. – FrenkyB

관련 문제