9

4 つの実動サーバーのうちの 1 つで、次のような大量のエラーが発生することがあります。

メソッド RunRules はこのプロキシではサポートされていません。これは、メソッドが OperationContractAttribute でマークされていない場合、またはインターフェイス タイプが ServiceContractAttribute でマークされていない場合に発生する可能性があります。

メソッド「RunRules」は、wcf [ServiceContract] インターフェイスのメソッドの 1 つで、[OperationContract] としてマークされています。

このエラーが発生する前は、同じメソッドで、Castle コンテナーを介して間違ったサービスを受け取ることがありました。正確な原因を特定するためにログ情報を追加した後、現在のエラーに変化しました。

エラーが発生したのは Web サービスであり、これが発生すると wcf エンドポイントを介して Windows サービスを呼び出そうとします。そして、これは特定の 1 台のマシンでのみ発生します。頻度は週1~2週間程度です。Web サービスのリサイクルが発生すると (3 時間)、エラーは停止します。

私にとっては、破損した vtable のようなものです。この問題にどのようにアプローチしますか?確かな証拠なしに、IT 担当者にマシンの再イメージ化を開始するように依頼するのは嫌いです。

ありがとう!

4

1 に答える 1

0

このような抽象的な魔法のエラーに対する簡単な答えはありません。そのため、Castle標準例外にそのような深いコール スタック情報が含まれていない場合は、コール スタック全体、特に内部 DLL 呼び出しをログに記録してみてください - リフレクションを使用します。

// use this in loop incrementing levelIndex up to st.FrameCount
// to grab all possible callstack entries
StackTrace st = new StackTrace();
st.GetFrame(levelIndex).GetMethod().Name;

次に、ILSpy のようなユーティリティを使用して Castle DLL を逆アセンブルし、どの状態が具体的な実行フローを引き起こし、最終的に例外が発生するかを分析してみます。

コールスタックをログに記録できる場合は、共有してください。確認できるようになります。

于 2012-04-23T19:27:23.957 に答える