Как мне получить URI, который выбросил WebException?

Я вызываю метод на веб-сервисе, и он выбрасывает 403 Forbidden WebException...

System.Net.WebException: запрос не выполнен с состоянием HTTP 403: запрещено.

Я записал эту ошибку в журнал, но мне бы очень хотелось, чтобы URI был записан в сообщении журнала, чтобы было легко определить, какой веб-сервис вызывает проблему.

Есть ли простой способ получить URI из создаваемого исключения WebException? Я просмотрел список свойств, и я не вижу ничего, что получит мне то, что я хочу.

2 ответа

Решение

Вы можете получить доступ к Url свойство вашего прокси-объекта клиента SOAP (SoapHttpClientProtocol тип).

Если вы вызываете две разные веб-службы из одного метода в своем коде, просто поместите try {} в ловушку вызовов веб-службы и добавьте соответствующую Exception со свойством Url нарушающего веб-сервиса.

Что-то вроде:

string url = client.Url;
try
{
  client.MyWebServiceCall();
  url = client2.Url;
  client2.MyWebServiceCall2();
}
catch (Exception ex)
{
  throw new Exception("Webservice call failed. Url: "+url+", Error:"+ex.Message,ex);
}

Убедитесь, что вы не звоните в службу через веб-прокси, необходимый для аутентификации. Вы получите эту (или, возможно, 401) ошибку и выдерните свои волосы (как я), пытаясь выяснить, где происходит сбой. Я не осознавал, что происходило, пока не выполнил трассировку сети и не обнаружил, что запросы попадают на наш исходящий прокси-сервер с проверкой подлинности, а запрос не имеет учетных данных и возвращается.

Это сработало для меня, чтобы получить Uri непосредственно из WebException:

Uri uri = wex.Response.ResponseUri;
Другие вопросы по тегам