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 ответа

Решение

Позже я узнал, что проблема была с моим прокси-сервером, а не с кодом. Переключаясь на другой прокси-сервер, а также НЕ тестируя с базовой аутентификацией (кто вообще его использует?), Я смог получить свои обратные вызовы.

Я была такая же проблема. Теперь я просто запускаю таймер и захожу в свое отключенное состояние.

Другие вопросы по тегам