gpt4 book ai didi

wcf - 双工 WCF 服务在第 11 次调用时挂起

转载 作者:行者123 更新时间:2023-12-01 12:01:18 26 4
gpt4 key购买 nike

我有一个双工 WCF 服务,它在神奇的 10 个代理实例化之后挂起。客户端的具体错误是:

“System.TimeoutException:发送到 net.tcp://localhost:8080/RoomService/netTcp 的此请求操作未在配置的超时 (00:00:59.9960000) 内收到回复”。

服务器上没有任何明显的错误消息。

请注意,这不是标准的、明显的问题,即无法关闭我的代理连接,因为我在打开下一个之前适本地关闭了我的代理连接的每个实例:

try
{
client.Close();
}
catch (CommunicationException)
{
client.Abort();
}
catch (TimeoutException)
{
client.Abort();
}
catch (Exception)
{
client.Abort();
throw;
}

我已将我的节流行为设置为 500 个同时发生的一切:

ServiceThrottlingBehavior throttlingBehavior = new ServiceThrottlingBehavior()
{
MaxConcurrentCalls = 500,
MaxConcurrentSessions = 500,
MaxConcurrentInstances = 500
};

我已将我的服务的 ConcurrencyMode 设置为 Multiple,并且我已经尝试了 InstanceContextMode 的所有三个可能值。

[ServiceBehavior(InstanceContextMode=InstanceContextMode.PerSession, ConcurrencyMode = ConcurrencyMode.Multiple)]

我尝试过自托管该服务,并在 IIS 中托管它,并且我在每个上都得到了相同的结果。

我尝试了 NetTcpBinding、WSDualHttpBinding 和 PollingDuplexBinding(在 Silverlight 上),每个结果都相同。我无法尝试 BasicHttpBinding 或 WSHttpBinding,因为这是双工服务。

我的代码中有一个地方启动了多个线程(同时执行多个回调),但出于故障排除的目的,我已经注释掉了这一点,但并没有什么不同。

在客户端,我曾尝试为每个测试使用新的代理,并在所有测试中重复使用相同的代理,但没有任何运气。我已经尝试为每个代理创建一个新的 InstanceContext,并在所有代理中重复使用相同的 InstanceContext,但再次失败。

无论我做什么,在我的测试工具中执行第 10 次测试后,对服务的下一次调用都会挂起。

关于我可能做错了什么的想法?

最佳答案

好的,所以我至少犯了一个愚蠢的错误:我正在创建节流行为,但忽略了将其添加到适当的服务中。现在已正确添加:

ServiceThrottlingBehavior throttlingBehavior = new ServiceThrottlingBehavior()
{
MaxConcurrentCalls = 500,
MaxConcurrentSessions = 500,
MaxConcurrentInstances = 500
};
base.Description.Behaviors.Add(throttlingBehavior);

现在我可以运行 10 个以上的测试,因此我眼前的问题就解决了。

但我仍然对为什么我会遇到这个问题感到困惑,因为我特意关闭了一个代理,然后才转到下一个。 MaxConcurrentXXX 为 2 应该在这种情况下有效;我不需要 500 的 MaxConcurrentXXX。如果连接到服务器的每个客户端在实际连接时间之后继续破坏连接,我有点担心可伸缩性。

也许我在其他地方犯了一个愚蠢的错误——这不是第一次了——但我已经专门逐步完成了关闭代理的代码,它肯定会被调用。

关于wcf - 双工 WCF 服务在第 11 次调用时挂起,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1141141/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com