【发布时间】:2018-02-28 10:29:38
【问题描述】:
据我所知,BasicHttpBinding 不支持 ReliableSession 功能。因此,这意味着当服务器(wcf 主机)收到请求时,无论客户端是否断开连接,都会执行该请求。我希望我是对的?
问题是: 我有一个带有 BasicHttpBinding 的 WCF 服务。我们通过在客户端使用不同的线程调用它 10 次来测试该服务。而且这些请求都是同时(几乎)同时提出的。在线程调用之后,我们通过终止进程来终止程序。结果,10 个请求中有 6 个被执行,但有 4 个请求没有被执行。我们使用wireshark 检查了网络流量,发现wcf 服务主机收到了10 个请求。但是,我们知道其中有 4 人没有被处决。
(绑定时未配置超时值:这意味着它们都设置为默认值。wcf 服务也托管在 iis 上)。
这里有什么问题?我在哪里可以检查?即使客户端断开连接,我们如何才能实现 10 次执行中的 10 次?
【问题讨论】:
-
您是否在服务中添加了以下属性? [ServiceBehavior(InstanceContextMode = InstanceContextMode.Single, ConcurrencyMode= ConcurrencyMode.Multiple)] 处理并发请求必须设置并发模式。
-
你可能是对的@RavirajPalvankar:docs.microsoft.com/en-us/dotnet/api/… 相反,当我调试案例时,它工作正常。假设我正在调试客户端和服务器。客户端发送 10 个请求,当第一个请求开始在服务器上执行时,我到达了一个制动点并停留在那里,直到我终止客户端应用程序。在终止之后,我让服务器继续处理并且它工作正常。所以在我调试的时候它可以工作,但我不调试的时候它不工作。
-
请将并发模式设置为multiple,不要调试代码,但是有一个计数器什么的可以统计客户端和服务器端的调用次数,统计执行的调用次数,这样你就知道它是否真的发生了。
-
现在我明白了为什么没有区别@RavirajPalvankar:我不希望同时运行我的服务。我只希望可靠地运行我的服务。我的意思是,主机是否可以一次执行 10 个或一个一个执行它们并不重要。我只想确保如果主机收到 10 个请求,那么将发生 10 次执行(并发或顺序执行都没有关系)。
标签: c# wcf basichttpbinding