c# - Web 服务不处理来自具有代理类的同一应用程序的多个同时请求

标签 c# wcf proxy-classes wsdl.exe simultaneous-calls

我有一个应用程序调度多个调用不同网络服务的任务,一些相同的网络服务但不同的方法。每个任务都在一个时间间隔内执行,并且每个任务都在自己的线程中运行。为了获得对 web 服务的引用,我有一个 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

最佳答案

这可能与 concurrency/instancing settings 有关在您的 WCF 服务上。

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

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

关于c# - Web 服务不处理来自具有代理类的同一应用程序的多个同时请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5990469/

相关文章:

c# - WebClient 能够执行多个请求

javascript - Angular JS 方法未使用 Wcf 服务定义

c# - WCF Web 服务响应 XML 文件

C++:使用复数共轭设置/获取数组值的代理

c# - 从左到右编号坐标和拉绳

c# - Fancybox - ASP.NET 按钮不工作

c# - 我可以在 Form.Close() 之后放置命令吗?

wcf - OData/WCF 数据服务不适用于复杂类型

python - 具有代理继承的 Django 模型多态性

java - 如何从动态代理中解包原始对象