Я внедряю приложение Silverlight, которое интенсивно использует службы WCF. Теперь я дошел до того, что иногда возникают несколько длинных вызовов служб, которые блокируют выполнение других вызовов служб.
Время ожидания этих сервисных вызовов истекло. Я хотел бы узнать, возможно ли это для системы очередей, которая выполняет вызовы службы один за другим, таким образом, длинные вызовы задержат другие вызовы, но не приведут к их таймауту.
Я использую сервисные агенты, чтобы обернуть сервисные вызовы
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
}
}
Есть ли способ, которым я мог бы поместить эти сервисные вызовы в очередь и выполнить их один за другим?
Я попытался обернуть их как Действия и добавить их в очередь, но это не заставляет ждать, пока один из них завершит выполнение, прежде чем запускать следующую, и, хотя они действительно вызывают сервис, никакие данные не возвращаются вызывающему ViewModel.