Вопрос

Я вызываю метод в веб-сервисе, и он выдает 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;
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top