2017-02-14 13 views
0

Я обнаружил, что иногда обратный вызов метода BeginExecute для службы OData (v2) не срабатывает. Эта ситуация возникает только в том случае, если выполняется несколько параллельных асинхронных запросов. Некоторые demonstartion код:WCF Client Proxy BeginExecute callback не активирован

public void Run() 
    { 
     Service = new SAP.TEST_SRV_Entities(new Uri(@"https://...")); 
     Service.Credentials = new NetworkCredential("user", "password"); 
     Service.MergeOption = System.Data.Services.Client.MergeOption.NoTracking; 

     for (int i = 0; i < 6; i++) 
     { 
      AsyncCallback callback = new AsyncCallback(Response); 
      string url = @"https://..."; 
      Service.BeginExecute<SAP.Folder>(new Uri(url), callback, null); 
      Console.WriteLine("Request"); 
      //System.Threading.Thread.Sleep(1000); 
     } 
    } 

    void Response(IAsyncResult asyncResult) 
    { 
     Console.WriteLine("Response"); 
     List<SAP.Folder> sapfolders = Service.EndExecute<SAP.Folder>(asyncResult).ToList(); 
    } 

Выход программы:

Request 
Request 
Request 
Request 
Request 
Request 
Response 
Response 
Response 
Response 

6 запросов началось, но только 4 закончились. Я не получаю недостающие два запроса на своем сервере. Если я вставляю сон между запросами или их называют синхронными, все прекрасно, и я получаю все ответы. Мне кажется, что первые запросы не верны. Увеличение ServicePointManager.DefaultConnectionLimit приводит к более законченным запросам. Код был вызван обработчиком событий кнопки wpf, поэтому приложение не вышло.

Я получаю аналогичную ошибку, если мне не удается позвонить по адресу WebResponse http-запроса. Не удается найти «закрыть» в WCF.

Любая идея, как получить ответы? Есть ли что-то отсутствует, как некоторые близкие/завершающие вызовы по первым ответам?

ответ

0

Поскольку я не нашел решение, я воспользуюсь обходным решением. Вместо использования методов async будет использовать синхронный в своем потоке.