我正在编写一个调用运行时间相对较长的服务。客户端需要能够发出彼此并行运行的连续请求,并且由于某种原因,我的服务不会同时执行它们,除非调用是从不同的客户端执行的。我试图弄清楚我缺少哪些配置设置。
我正在使用 netTcpBinding。我的节流配置是:
<serviceThrottling maxConcurrentInstances="10" maxConcurrentCalls="10" maxConcurrentSessions="10"/>
服务合同:
[ServiceContract(CallbackContract=typeof(ICustomerServiceCallback))]
public interface ICustomerService
{
[OperationContract(IsOneWay = true)]
void PrintCustomerHistory(string[] accountNumbers,
string destinationPath);
}
[ServiceBehavior(InstanceContextMode=InstanceContextMode.PerCall)]
public class CustomerService : ICustomerService
{
public void PrintCustomerHistory(string[] accountNumbers,
string destinationPath)
{
//Do Stuff..
}
}
在客户端,我进行了两个连续的异步调用:
openProxy();
//call 1)
proxy.PrintCustomerHistory(customerListOne, @"c:\DestinationOne\");
//call 2)
proxy.PrintCustomerHistory(customerListTwo, @"c:\DestinationTwo\");
在服务上,第二个操作只有在第一个操作结束后才开始。但是,如果我从不同的客户端执行这两个调用,它们都会由服务同时执行。
我错过了什么?我曾假设通过将我的服务类标记为“PerCall”,调用 1 和调用 2 将分别接收它们自己的 InstanceContext 并因此在单独的线程上同时执行。