サービスAがサービスBを同期的に呼び出す2つの.net 3.5 WCFサービスがあります。
両方のサービスが同じマシン上にあり、次のように動作します。
[ServiceBehavior(InstanceContextMode = InstanceContextMode.PerCall)]
サービス B のクライアントを作成し、OperationContract
サービス A内で次のように使用します。
Proxyclient client = null;
bool error = true;
int returnVal = 0;
try
{
client = new Proxyclient;
returnVal = client.CallServiceB();
client.Close();
error = false;
}
finally
{
if (error)
{
client.Abort();
}
}
しかし、サービス A が呼び出されると、TraceListener ログファイルにエラーが書き込まれます。
認識されないエラー 232 のパイプへの書き込み中にエラーが発生しました。
このメッセージは拘束力のあるものであることに注意してください ( netNamedPipeBinding
)。私がテストした他のすべてのバインディングについても、エラーが発生しました。他のバインディングの一般的な意味は次のとおりです。
書き込みができませんでした / 接続がタイムアウトになり、接続が閉じられました。
ただし、サービス/クライアントは機能しますが、ログファイルにエラーが生成されるだけなので、WCF はここで再試行ベースで機能すると思います。しかし、これは私のログファイルにスパムを送信し、将来的に問題が発生するかどうかはわかりません.
注意すべき非常に特別なこと:
この問題は、クライアントがサービス B を 2 分以上呼び出していない場合にのみ発生します (ただし、この時間は、テストしたバインディングごとに異なります)。したがって、サービス開始後の初回はログにエラーはありません。また、このサービスを 10 秒ごとに呼び出すと、ログにもエラーはありません。
私がまだやったこと:
- すべてのサービスのタイムアウト設定を変更せずに試しました
- クライアントをコンソール アプリに配置し、そのコンソール アプリからサービス B を呼び出しました。ここではこれらのエラーは書きません!
- これを複数のマシンでテストしたところ、すべてのマシンで問題が発生しました。
- Service A と B から ALL CODE を削除しました。WCF の基本的なコードを持っているだけで、まだこの問題がありました。
誰かが私を助けてくれることを願っています。
前もって感謝します。