#asp.net #web-services #debugging #wsdl #fiddler
#asp.net #веб-сервисы #отладка #wsdl #скрипач
Вопрос:
Я хочу зафиксировать запрос SOAP и фактический ответ от веб-сервиса.
Сценарий: При нажатии кнопки в asp.net приложение, которое я вызываю веб-сервис. Веб-служба возвращает исключение : System.Web.Services.Protocols.SoapHeaderException: Access is denied. at System.Web.Services.Protocols.SoapHttpClientProtocol.ReadResponse(SoapClientMessage message, WebResponse response, Stream responseStream, Boolean asyncCall) at System.Web.Services.Protocols.SoapHttpClientProtocol.Invoke(String methodName, Object[] parameters) at WebRefProject.HRWS.TeamMemberData201012Service.getTeamMemberProfilesByFullName(GetTeamMemberProfilesByFullNameRequest_Type getTeamMemberProfilesByFullName1) in C:ProjectFinalPATWebCode1PSVWebRefProjectWeb ReferencesHRWSReference.cs:line 138 at UIPSAT.GetUserDetails.GetUserDetailsbyFullName(String searchValue) in C:ProjectFinalPATWebCode1PSVUIGetUserDetails.cs:line 209
Объяснение:
- У меня есть asp.net приложение, которое вызывает веб-службу для поиска сведений о сотруднике.
- WS требует сертификаты, и мы прикрепляем их к запросу.
- Служба работает хорошо на локальном сервере с локальным сертификатом.
- Он не работает на сервере разработчиков и выдает вышеупомянутое исключение.
- Пример приложения хорошо работает на Dev с сертификатом Dev.
- Как я узнаю, какое SOAP отправляется веб-службе?
- Также я не смог добавить ссылку на веб-службу непосредственно в решение, поскольку оно было защищено, и Visual Studio IDE не смогла его добавить.
- Однако файл WSDL не был защищен. Оно было успешно добавлено, и URL веб-службы был изменен на основе соответствующих серверных сред.
Как проверить запрос SOAP и ответ?
Комментарии:
1. Веб-служба локальная или удаленная? Скрипач должен уметь делать и то, и другое, но конфигурация отличается.
Ответ №1:
Да, Скрипач.
Комментарии:
1. Веб-сервис размещен на другом сервере. Удаленный. Я не могу видеть запрос soap, даже когда я проверяю с помощью fiddler.
2. Установлен ли у вас фильтр в Fiddler? Запрос поступает с локального компьютера, на котором также запущен Fiddler?
3. Позвольте мне попытаться объяснить: 1) У меня есть asp.net приложение, которое вызывает веб-службу для поиска сведений о сотруднике. 2) WS требует сертификаты, и мы прикрепляем их к запросу. 3) Служба работает нормально на локальном сервере с локальным сертификатом. 4) Он не работает на сервере разработки и выдает вышеупомянутое исключение. 5) Пример приложения хорошо работает на Dev с сертификатом Dev. 6) Как мне узнать, какое SOAP отправляется веб-службе? 7) Также я не смог добавить ссылку на веб-службу непосредственно в решение, поскольку оно было защищено, и Visual Studio IDE не смогла его добавить.
4. 8) Однако файл WSDL не был защищен. Оно было успешно добавлено, и URL веб-службы был изменен на основе соответствующих серверных сред.
5. Похоже, у вас здесь происходит несколько проблем. Скрипач должен иметь возможность проверять трафик с вашего локального компьютера на сервер просто отлично. Если вы тестируете на «localhost», вам нужно будет добавить точку после «localhost», чтобы сделать его «localhost». для того, чтобы Fiddler получал трафик.
Ответ №2:
Вы можете использовать средства регистрации диагностических сообщений WCF. Просто настройте его на своем клиенте, сообщения soap будут регистрироваться. Например:
<diagnostics>
<messageLogging
logEntireMessage="true"
logMalformedMessages="true"
logMessagesAtServiceLevel="true"
logMessagesAtTransportLevel="true"
maxMessagesToLog="1000"
maxSizeOfMessageToLog="5000"/>
</diagnostics>
Комментарии:
1. Это Visual Studio 2005 ASP. Сетевое приложение.
Ответ №3:
Вы можете настроить SoapUI (http://www.soapui.org /) действовать как прокси-сервер для ведения журнала между клиентом вашей веб-службы и сервером. Настройте свой клиент для подключения к экземпляру прокси SoapUI, запущенному на хосте клиента. Настройте экземпляр SoapUI для последующей пересылки в службу на удаленном сервере.
Комментарии:
1. Да. Удалось получить файл журнала, созданный с использованием ведения журнала диагностики. Использовалось следующее: <system.diagnostics> <sources> <имя источника=»System.Net » tracemode=»includehex» maxdatasize=»1024″> <слушатели> <добавить имя =»System.Net «/> </listeners> </source> <имя источника=»System.Net.Sockets»> <слушатели> <добавить имя =»System.Net «/> </listeners> </source> <имя источника=»System.Net.Cache»> <слушатели> <добавить имя =»System.Net «/> </слушатели> </источник> </sources> <переключатели> <добавить имя =»System.Net » значение =»Подробный»/> <добавить имя=»System.Net.Sockets» значение =»Подробный»/>
2. <добавить имя=»System.Net.Cache» значение =»Verbose»/> </ switches> <sharedListeners> <добавить имя =»System.Net «type=»System. Диагностика. TextWriterTraceListener»initializeData=»C:Projects1PSVWebCode1PSVUIbintrace.log » /> </sharedListeners> <автозапуск трассировки=»true»/> </system.diagnostics>
Ответ №4:
Вы можете получить файл трассировки в определенное местоположение. Добавьте следующее в файл web.Config :