1

我不确定 WCF 代理类将如何处理通过 plinq 发送的请求。下面的代码片段看起来不错,还是看起来可能会导致跨多个线程的共享状态出现问题?(另外,我已经明白 using 块并不理想,这只是一个例子)

using (var proxy = new ServiceProxyOfSomeSort())
{
    _aBunchOfMessagesToSend.AsParallel()
        .WithDegreeOfParallelism(SomeDegree).ForAll(m =>
    {
        proxy.SomeOperation(m);
    }
}

我应该为每个线程创建一次代理吗?可以跨线程共享代理吗?我不想创建比我需要的更多的代理,因为这是一个有点昂贵的操作。

编辑:

我真的没有服务器端服务的任何实现细节。从需求的角度来看,他们应该开发它以便多个客户端可以随时调用它(异步)。假设他们可以处理异步调用(这可能是一个很大的假设),我只是想弄清楚这是否是客户端可以接受的方法。它正在工作,我只是不知道这种方法是否有任何问题。

4

1 回答 1

1

回答您关于代理的问题:您应该为每个线程创建一个新的。重用代理往往会工作一段时间,然后在数十次请求后抛出错误。正如他们喜欢说的那样,它的行为是不确定的。创建新代理的性能开销并不大(在创建第一个代理之后),所以应该没什么大不了的。

至于淹没服务器的多个并发请求的讨论:几个,甚至十几个,应该没问题 - 服务器可能处理尽可能多的请求,因为您的处理器可以创建线程。再说一次,来自单一来源的请求的突然涌入可能会被解释为拒绝服务攻击,所以你应该小心,特别是如果你对服务的控制是有限的。

于 2013-03-05T17:30:35.770 回答