C# webservice асинхронный обратный вызов не вызывается при ошибке HTTP 407
Я пытаюсь протестировать сценарий использования клиента, имеющего прокси-сервер с учетными данными, и использовать наш веб-сервис от нашего клиента.
Если запрос синхронный, моя работа проста. Перехватите WebException, проверьте код 407 и запросите у пользователя учетные данные для входа.
Однако для асинхронных запросов я, похоже, столкнулся с проблемой: обратный вызов никогда не вызывается! Я запустил трассировку Wireshark и действительно увидел, что ошибка HTTP 407 возвращалась обратно, поэтому я удивлен, что делать.
Вот код, который устанавливает обратный вызов и запускает запрос:
TravelService.TravelServiceImplService svc = new TravelService.TravelServiceImplService();
svc.Url = svcUrl;
svc.CreateEventCompleted += CbkCreateEventCompleted;
svc.CreateEventAsync(crReq, req);
И код, который был сгенерирован, когда я использовал WSDL:
public void CreateEventAsync(TravelServiceCreateEventRequest CreateEventRequest, object userState) {
if ((this.CreateEventOperationCompleted == null)) {
this.CreateEventOperationCompleted = new System.Threading.SendOrPostCallback(this.OnCreateEventOperationCompleted);
}
this.InvokeAsync("CreateEvent", new object[] {
CreateEventRequest}, this.CreateEventOperationCompleted, userState);
}
private void OnCreateEventOperationCompleted(object arg) {
if ((this.CreateEventCompleted != null)) {
System.Web.Services.Protocols.InvokeCompletedEventArgs invokeArgs = ((System.Web.Services.Protocols.InvokeCompletedEventArgs)(arg));
this.CreateEventCompleted(this, new CreateEventCompletedEventArgs(invokeArgs.Results, invokeArgs.Error, invokeArgs.Cancelled, invokeArgs.UserState));
}
}
Отладив код WS, я обнаружил, что даже метод SoapHttpClientProtocol.InvokeAsync также не вызывает его обратный вызов. Я пропускаю какую-то конфигурацию?
2 ответа
Позже я узнал, что проблема была с моим прокси-сервером, а не с кодом. Переключаясь на другой прокси-сервер, а также НЕ тестируя с базовой аутентификацией (кто вообще его использует?), Я смог получить свои обратные вызовы.
Я была такая же проблема. Теперь я просто запускаю таймер и захожу в свое отключенное состояние.