Я обнаружил, что иногда обратный вызов метода 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.
Любая идея, как получить ответы? Есть ли что-то отсутствует, как некоторые близкие/завершающие вызовы по первым ответам?