1

我有两个 .net 3.5 WCF 服务,其中服务 A 同步调用服务 B。

两个服务都在同一台机器上,并且具有以下行为:

[ServiceBehavior(InstanceContextMode = InstanceContextMode.PerCall)]

我为服务 B 创建了客户端,并在服务 A 中像这样使用它OperationContract

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 在这里重试基础上工作。但这会向我的日志文件发送垃圾邮件,我不确定这是否会在将来造成一些问题。

一些非常特别的事情要注意:

仅当客户端超过 2 分钟未调用服务 B 时才会出现此问题(但这个时间会因我测试的每个绑定而变化)。因此,在服务启动后的第一次日志中没有错误,如果我每 10 秒调用一次该服务,日志中也不会出现错误。

我已经做了什么:

  1. 我玩了所有服务的超时设置,没有任何更改
  2. 我将客户端放入控制台应用程序并从该控制台应用程序调用服务 B。这里就不写这些错误了!
  3. 我在多台机器上对此进行了测试,并在所有机器上都遇到了问题。
  4. 我从服务 A 和 B 中删除了所有代码。我只有 WCF 基本代码,但仍然有这个问题。

我希望有人能帮助我。

提前致谢。

4

0 回答 0