Я пытаюсь протестировать сценарий использования клиента, имеющего прокси-сервер с учетными данными, и пытается использовать наш веб-сервис от нашего клиента.
Если запрос синхронный, моя работа проста. Перехватите WebException, проверьте код 407 и запросите у пользователя учетные данные для входа.
Однако для асинхронных запросов у меня возникает проблема: обратный вызов никогда не вызывается! Я запустил трассировку проволочной акулы и действительно увидел, что ошибка 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 также не вызывает его обратный вызов. Мне не хватает какой-то конфигурации?