0

最近、実稼働環境で WCF Web サービスの 1 つがクラッシュするという問題が発生しました。クラッシュ中にメモリ ダンプがあり、windbg を使用してデバッグすると、次のスタック トレースが得られます。

* *例外オブジェクト: 000000000a1e5db8 例外の種類: System.ObjectDisposedException メッセージ: 破棄されたオブジェクトにアクセスできません。内部例外: enter code here **StackTrace (生成): 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 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 Web サービスは、.net Framework 4.0 を使用して Windows 2008 サーバーで実行されていました。

その他の詳細:

ConcurrencyMode = Multiple
InstanceContextMode = PerSession

私たちの Web サービスは、他のいくつかの wcf サービスを呼び出します。それらのバインドと動作の情報は次のとおりです。

 <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>
4

1 に答える 1

0

これは、サービス コードが、破棄された WCFServiceChannelインスタンスが再度アクセスされる状況を何らかの形で作成しているために発生しています。これが、サービスが別の WCF サービスを呼び出すために使用する WCF サービス プロキシで発生しているのか、サービスがクライアント要求に応答するために使用しているチャネルで発生しているのかは明らかではありません。適切なプロキシ インスタンスの破棄については、メソッドの「設計による」動作Disposeに関するこの優れた投稿を参照してください。

より良い回答を得るにはInstanceContextModeConcurrencyMode設定や構成などのサービス構成について詳しく説明する必要があります。serviceModel

于 2012-11-29T18:17:49.070 に答える