Как мне получить 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;