gpt4 book ai didi

c# - WCF 服务和线程

转载 作者:太空狗 更新时间:2023-10-29 18:04:15 26 4
gpt4 key购买 nike

我创建了一个简单的 WCF (.NET 3.5) 服务,它定义了 10 个契约(Contract),这些契约(Contract)基本上是对所提供数据的计算。目前,我预计很少有客户会调用其中一些契约(Contract)。如何使服务响应更快?我有一种感觉,该服务将等到它处理一个请求才能转到下一个请求。我如何在 WCF 中使用多线程来加快处理速度?

最佳答案

虽然我同意 Justin's answer ,我相信这里可以进一步阐明 WCF 的工作原理。

你做出具体声明:

I have a feeling that the service will wait until it process one request to go to the next one. How can I use multithreading in WCF to speed things up ?

服务的并发性(它可以同时接受多少次调用)取决于 ConcurrencyMode value for the ServiceBehavior附加到服务。默认情况下,此值为 ConcurrencyMode.Single,这意味着它将一个接一个地序列化调用。

但是,这可能没有您想象的那么严重。如果您的服务的 InstanceContextMode等于InstanceContextMode.PerCall那么这不是问题;每次调用都会创建一个新的服务实例,不会用于任何其他调用。

但是,如果您有单例或基于 session 的服务对象,那么对服务实现实例的调用将被序列化。

您可以随时更改 ConcurrencyMode,但请注意,如果您这样做,您将不得不手动处理并发问题和访问您的资源,因为您已明确告诉 WCF 您将这样做.

重要的是不要仅仅因为您认为这会导致性能提高而改变这些。虽然并发性不是那么多,但服务的实例化方面在很大程度上是服务标识的一部分(如果它是 session 或不是基于 session 的)并且更改它们会影响使用该服务的客户端,所以不要这样做轻轻一点。

当然,这与实际实现服务的代码是否高效无关。当您指出是这种情况时,这绝对是需要研究的事情。

关于c# - WCF 服务和线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3969324/

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