1

サービス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 秒ごとに呼び出すと、ログにもエラーはありません。

私がまだやったこと:

  1. すべてのサービスのタイムアウト設定を変更せずに試しました
  2. クライアントをコンソール アプリに配置し、そのコンソール アプリからサービス B を呼び出しました。ここではこれらのエラーは書きません!
  3. これを複数のマシンでテストしたところ、すべてのマシンで問題が発生しました。
  4. Service A と B から ALL CODE を削除しました。WCF の基本的なコードを持っているだけで、まだこの問題がありました。

誰かが私を助けてくれることを願っています。

前もって感謝します。

4

0 に答える 0