У меня есть два асинхронных вызова одной веб-службы в приложении .NET 4.0 C#. Они управляются с помощью AutoResetEvent WaitOne()
.Использование AutoResetEvent несколько раз
У меня на локальном компьютере это работает как ожидается. Но когда я развернул его на сервере, в первом вызове вызывается обработчик второго шага.
Какие изменения необходимо сделать для правильной работы нити?
if (userID != null)
{
AddressBookRequest req = new AddressBookRequest
{
contactsSearchCriteria = new ContactsSearchCriteria
{
searchUserID = userID.Trim()
},
HeaderParams = new HttpHeaderParms
{
UserId = userID.Trim(),
UserPrincipalName = userID.Trim() ,
ContentType = "application/xml"
}
};
lookupServicesAssociate.SearchContactDetailsAsync(req);
autoRestEvent = new AutoResetEvent(false);
lookupServicesAssociate.SearchContactDetailsCompleted +=
new EventHandler<ServiceResponseEventArgs<ContactDetailsPreview[]>>(AssociateSearchContactDetailsCompleted);
autoRestEvent.WaitOne();
}
if (reportsToUserID != null)
{
AddressBookRequest req1 = new AddressBookRequest
{
contactsSearchCriteria = new ContactsSearchCriteria
{
searchUserID = reportsToUserID.Trim()
},
HeaderParams = new HttpHeaderParms
{
UserId = reportsToUserID.Trim(),
UserPrincipalName = reportsToUserID.Trim(),
ContentType = "application/xml"
}
};
lookupServiceReports.SearchContactDetailsAsync(req1);
lookupServiceReports.SearchContactDetailsCompleted +=
new EventHandler<ServiceResponseEventArgs<ContactDetailsPreview[]>>(ReportsToAssociateSearchContactDetailsCompleted);
autoRestEvent.WaitOne();
}
Что означает «обработчик успеха второго шага в первом вызове» означает? Какова область действия 'autoRestEvent' и какой код вызывает метод' Set'? Если вы ждете ответа на вызовы веб-службы, почему вы вызываете их асинхронно? – Igor
@Igor autoRestEvent находится на уровне класса. 'Set' вызывается обработчиками успеха. Это существующий асинхронный сервис. Я не контролирую службу – Lijo
Являются ли условия и тестовые данные на сервере такими же, как на вашем локальном компьютере? Может быть, я что-то упустил, но он выглядит нормально, и единственная причина, почему «ReportToAssociateSearchContactDetailsCompleted» вызывается первым, - это первый оператор 'if', который возвращает' false' – Pako