C#学习教程:Web服务不使用代理类处理来自同一应用程序的多个同时请求分享


Web服务不使用代理类处理来自同一应用程序的多个同时请求

我有一个应用程序调度多个任务,调用不同的Web服务,一些相同的Web服务,但不同的方法。 每个任务都在一个时间间隔内执行,每个任务都在自己的线程中运行。 为了获得对webservice的引用,我有一个wsdl.exe生成的代理类,它在每个任务中实例化并且总是被处理掉。 但是,在运行应用程序时,任务实际上是在服务请求中等待彼此,Web服务在从任务x完成处理请求之前没有处理来自任务y的服务请求(我可以看到这是因为来自任务x的服务调用可能需要5分钟,任务y 100毫秒,但是如果y在x运行时开始,则在x完成后100毫秒完成)。

这是来自任务的代码(在自己的线程内运行):

public class TaskX : TaskWrapper { public TaskX(Guid id, string name, EventQueue eventqueue) : base(id, name, eventqueue) { } protected override void DoTask() { try { var factory = new ServiceReferenceFactory(); using (var reference = factory.GetServiceReference()) { bool result; bool isSpecified; reference.Run(out result, out isSpecified); } } } } 

这是上面提到的工厂方法的代码:

 public ProxyClassService GetServiceReference() { var refer = new ProxyClassServiceNamespace.ProxyClassService(); refer.Timeout = 1000 * 60 * 60; return refer; } 

有谁知道我为什么会遇到这种行为?

编辑:

在我将[ServiceBehavior(InstanceContextMode = InstanceContextMode.PerCall)]添加到我的wcf服务的实现之后,这里有一些来自任务的日志。 我没有对visual studio 2008中创建的wcf服务进行任何配置更改。

15:02 – 任务开始:TaskXWithInternalException

15:02 – 任务开始:TaskYQuickOne

15:02 – 任务结束:TaskYQuickOne任务已用时间:00:00:00.1214762

15:02 – 任务开始:TaskZSlowOne

15:03 – 任务开始:TaskXWithInternalException

15:03 – 任务开始:TaskYQuickOne

15:05 – 任务结束:TaskZSlowOne任务已用时间:00:03:11.6510947

15:05 – 任务结束:TaskYQuickOne任务已用时间:00:02:09.7311905

15:06 – 任务开始:TaskYQuickOne

15:06 – 任务结束:TaskYQuickOne任务已用时间:00:00:00.0546980

这可能与您的WCF服务上的并发/实例设置有关。

如果所有调用都转到同一个服务实例(例如InstanceContextMode = PerSession or Single ),那么通常需要确保已将ConcurrencyMode设置为Multiple ,否则将以序列化方式处理调用。

您能告诉我们更多关于如何设置WCF服务(而不是客户端)的信息吗?

上述就是C#学习教程:Web服务不使用代理类处理来自同一应用程序的多个同时请求分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—猴子技术宅(www.ssfiction.com)

本文来自网络收集,不代表猴子技术宅立场,如涉及侵权请点击右边联系管理员删除。

如若转载,请注明出处:https://www.ssfiction.com/ckf/959941.html

发表评论

邮箱地址不会被公开。 必填项已用*标注