我有两个 .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 秒调用一次该服务,日志中也不会出现错误。
我已经做了什么:
- 我玩了所有服务的超时设置,没有任何更改
- 我将客户端放入控制台应用程序并从该控制台应用程序调用服务 B。这里就不写这些错误了!
- 我在多台机器上对此进行了测试,并在所有机器上都遇到了问题。
- 我从服务 A 和 B 中删除了所有代码。我只有 WCF 基本代码,但仍然有这个问题。
我希望有人能帮助我。
提前致谢。