2012-11-29 1 views
0

최근에 우리 프로덕션 환경에서 WCF 웹 서비스가 중단되는 문제가있었습니다. 우리는 충돌시 메모리 덤프를했고, 우리가 WCF 웹 서비스 충돌 ... 메모리 덤프에서 원인을 알아야합니다.

*

을 windbg를 사용하여 디버깅 할 때 우리는 다음과 같은 스택 추적을받을 * 예외 개체 : System.ObjectDisposedException 메시지 : 유형 000000000a1e5db8 예외가 배치 개체에 액세스 할 수 없습니다. 의 InnerException : enter code here * * 스택 트레이스 (생성) :!!! System_ServiceModel_ni System.ServiceModel.Channels.CommunicationObject.ThrowIfClosed() + 0xfb2737 System_ServiceModel_ni System.ServiceModel.Channels.ServiceChannel.CleanupChannelCollections() + 0x37 System_ServiceModel_ni는 system.serviceModel .Channels.ServiceChannel.OnAbort() + 0x78을 System_ServiceModel_ni! System.ServiceModel.Channels.CommunicationObject.Abort() + 0x28e System_ServiceModel_ni! System.ServiceModel.Channels.ServiceChannel + SessionIdleManager.TimerCallback() + 0x6c System_Runtime_DurableInstancing_ni! System.Runtime .IOThreadScheduler + ScheduledOverlapped.IOCallback (UInt32, UInt32, System.Threading.NativeOverlapped *) + 0x71,451,515,System_Runtime_DurableInstancing_ni! System.Runtime.Fx + IOCompletionThunk.UnhandledExceptionFrame (UINT32, UINT32, System.Threading.NativeOverlapped *) + 0xdbc70 mscorlib_ni! System.Threading._IOCompletionCallback.PerformIOCompletionCallback (UINT32, UINT32, System.Threading.NativeOverlapped *) + 0x96을 * * StackTraceString : HRESULT : 80131622 StackTraceString : HRESULT : 80131622 **

누군가가이 발생할 수있는 경우에이 예외에 더 많은 통찰력을 줄 수 없습니다.

WCF webservice는 .NET Framework 4.0을 사용하는 Windows 2008 서버에서 실행되고있었습니다.

기타 자세한 사항 :

ConcurrencyMode = Multiple 
InstanceContextMode = PerSession 

우리의 웹 서비스가 다른 여러 WCF 서비스를 호출합니다. 이들에 대한 바인딩 정보 인 &은 다음과 같습니다. 서비스 코드가 어떻게 든 배치 WCF ServiceChannel 인스턴스가 다시 액세스되고있는 조건을 만들기 때문에

<behavior name="NAME"> 
     <serviceMetadata httpGetEnabled="true" /> 
     <serviceDebug includeExceptionDetailInFaults="true" /> 
     <serviceThrottling maxConcurrentSessions="1000" maxConcurrentCalls="1000" maxConcurrentInstances="10`enter code here`00"/> 
     <dataContractSerializer maxItemsInObjectGraph="655360"/> 
    </behavior>  
     <binding name="NAME" closeTimeout="00:01:00" openTimeout="00:01:00" receiveTimeout="00:10:00" sendTimeout="00:01:00" transactionFlow="false" transferMode="Buffered" transactionProtocol="OleTransactions" hostNameComparisonMode="StrongWildcard" listenBacklog="50" maxBufferPoolSize="524288" maxBufferSize="10485760" maxConnections="150" maxReceivedMessageSize="10485760"> 
      <readerQuotas maxDepth="32" maxStringContentLength="10485760" maxArrayLength="10485760" maxBytesPerRead="4096" maxNameTableCharCount="16384" /> 
      <reliableSession ordered="true" inactivityTimeout="00:10:00" enabled="false" /> 
      <security mode="None"> 
       <transport clientCredentialType="Windows" protectionLevel="None" /> 
      </security> 
     </binding> 
+0

이것은 완료되지 않은 것 같습니다 ... – ryadavilli

+1

빠른 답장을 보내 주셔서 감사합니다 ... ryadavilli ... 스택 추적이 불완전합니까? 또는 내가 제공 한 정보가 불완전한가? – Arvindh

답변

0

이 일어나고있다. 서비스가 다른 WCF 서비스를 호출하는 데 사용하는 WCF 서비스 프록시 또는 클라이언트 요청에 응답하기 위해 서비스가 사용하는 채널에서 이러한 일이 발생하는지 여부는 분명하지 않습니다. 프록시 인스턴스를 올바르게 처리하려면 "by design" behavior of the Dispose method에있는이 좋은 게시물을보십시오.

더 나은 답변을 얻으려면 InstanceContextModeConcurrencyMode 설정과 serviceModel 설정과 같은 서비스 구성에 대해 자세히 설명해야합니다.