Как мне получить URI, который вызвал WebException?
-
13-09-2019 - |
Вопрос
Я вызываю метод в веб-сервисе, и он выдает 403 Запрещенное исключение WebException...
Исключение System.Net.WebException:Запрос сбой со статусом HTTP 403:Запрещено.
Я зарегистрировал эту ошибку, но мне бы очень хотелось, чтобы URI был записан в сообщении журнала, чтобы было легко определить, какой веб-сервис вызывает проблему.
Есть ли простой способ получить URI из генерируемого WebException?Я просмотрел список объектов недвижимости и не вижу ничего, что дало бы мне то, что я хочу.
Решение
Вы можете получить доступ к Url
свойство вашего прокси-объекта SOAP-клиента (SoapHttpClientProtocol
тип).
Если вы вызываете две разные веб-службы из одного метода в своем коде, просто поместите try {} catch вокруг вызовов веб-службы и создайте соответствующий пользовательский 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);
}
Другие советы
Убедитесь, что вы не совершаете вызов службы через webproxy, требующий проверки подлинности.Вы получите эту (или, возможно, 401) ошибку и будете рвать на себе волосы (как это сделал я), пытаясь выяснить, где происходит сбой.Я не понимал, что происходит, пока не провел трассировку сети и не обнаружил, что запросы попадают на наш исходящий аутентифицированный прокси, а у запроса нет учетных данных, и он возвращается обратно.
Это сработало для меня, чтобы получить Uri непосредственно из WebException:
Uri uri = wex.Response.ResponseUri;