.net 多线程自托管WCF服务
在使用自托管时,WCF似乎只使用一个线程。我想为此使用几个线程或某种线程池。是否可以使用自托管配置,或者我需要使用IIS进行此操作?我自托管所有内容-保证它不是单线程的。上面的Commenter可能是正确的-请确保如果service impl上的ServiceBehavior属性设置为InstanceContextMode.Single,那么您也设置了ConcurrencyMode.Multiple,否则您将只看到一个线程。如果没有ServiceBehavior属性,则默认情况下,每次调用将为您提供一个service impl实例(InstanceContextMode.PerCall、ConcurrencyMode.Single)。也可能与连接限制有关,但您可能知道是否在配置中设置了连接限制。如果您在UI应用程序中使用默认服务行为设置自托管服务,您可能会看到您正在描述的行为。默认服务行为使用同步上下文。在UI线程(WinForms,WPF)中启动服务主机的情况下,所有请求都被路由到公共windows消息循环=>所有请求都由UI线程按顺序处理 在任何其他情况下(包括为UI线程中承载的服务手动设置.net 多线程自托管WCF服务,.net,wcf,.net,Wcf,在使用自托管时,WCF似乎只使用一个线程。我想为此使用几个线程或某种线程池。是否可以使用自托管配置,或者我需要使用IIS进行此操作?我自托管所有内容-保证它不是单线程的。上面的Commenter可能是正确的-请确保如果service impl上的ServiceBehavior属性设置为InstanceContextMode.Single,那么您也设置了ConcurrencyMode.Multiple,否则您将只看到一个线程。如果没有ServiceBehavior属性,则默认情况下,每次调用将为您
[ServiceBehavior(UseSynchronizationContext=false)]
),服务主机从线程池为每个请求分派新线程。基于实例上下文模式和并发模式,还有一些进一步的区别,但是使用默认设置,您将看到我描述的行为
[ServiceBehavior(UseSynchronizationContext = false)]
解决了我的问题。阅读此评论后,在服务和命令行应用程序中对此进行了测试,没有遇到相同的并发问题。因此,我很高兴地确认,当在UI线程上实例化时,这只是一个问题
我认为学到的教训是为您的WCF测试线束使用命令行应用程序。是什么让您认为它只使用一个线程?实例模式的设置是什么?我在调试器中观察到了它。我不知道实例模式。我如何改变它?顺便说一句,我不使用WCF配置应用程序和App.config文件。调试器不是真实的。而且您可能也没有很好的测试。请记住,调试器在暂停时默认情况下会阻止所有线程,因此传入的请求似乎不会得到服务。我已尝试使用一个具有5个并行线程的客户端,然后使用两个客户端。另外,我尝试延迟从服务方法返回,我可以看到下一个请求直到第一个请求完成才被服务。太好了!成功了。非常感谢。但您的意思可能是UseSynchronizationContext=false。它也取决于客户端实现,并且每个方法调用都需要ServiceFactory.CreateChannel