我正在实现一个使用WCF服务的Silverlight应用程序,其中有时会出现多个长时间的服务调用阻塞其他服务调用的情况。
这些服务调用最终会超时。我想看看是否可能实现一个队列系统,按顺序执行服务调用,这样长时间的调用将会阻塞其他调用,但不会导致它们超时。
我正在使用服务代理来包装服务调用。
上述服务代理将在代码中如下调用:
有没有一种方法可以把这些服务调用放入队列中,逐个执行?
我尝试将它们封装为Actions并添加到队列中,但这不会等待一个完成执行后再开始下一个。虽然它们确实正确地调用了服务,但没有数据返回给调用的ViewModel。
这些服务调用最终会超时。我想看看是否可能实现一个队列系统,按顺序执行服务调用,这样长时间的调用将会阻塞其他调用,但不会导致它们超时。
我正在使用服务代理来包装服务调用。
public interface IExampleServiceAgent
{
void ProcessData(int a, string b, EventHandler<ProcessDataCompletedEventArgs> callback);
}
Public ExampleServiceAgent1 : IExampleServiceAgent
{
ExampleClient _Client = new ExampleClient();
public void ProcessData(int anInt, string aString, EventHandler<ProcessDataCompletedEventArgs> callback)
{
EventHandler<ProcessDataCompletedEventArgs> wrapper = null;
wrapper = (a,b) =>
{
callback(a,b);
_Client.ProcessDataCompleted -= wrapper;
}
_Client.ProcessDataCompleted += wrapper;
_Client.ProcessDataAsync(anInt,aString);
}
}
上述服务代理将在代码中如下调用:
ServiceAgent.ProcessData(1,"STRING", (a,b) =>
{
if (b.Error != null)
{
//Handle Error
}
else
{
//DO something with the data
}
}
有没有一种方法可以把这些服务调用放入队列中,逐个执行?
我尝试将它们封装为Actions并添加到队列中,但这不会等待一个完成执行后再开始下一个。虽然它们确实正确地调用了服务,但没有数据返回给调用的ViewModel。
[ServiceBehavior(ConcurrencyMode=ConcurrencyMode.Single, InstanceContextMode = InstanceContextMode.PerSession)]
- Joel C