#c# #web-services #soap
#c# #веб-службы #soap
Вопрос:
Я использовал wsdl.exe сгенерировать класс на C # для вызова веб-службы. Это работает нормально, пока для этой веб-службы не требуется заголовок. Теперь мне нужно добавить заголовок, подобный этому:
<soapenv:Header>
<wsse:Security xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd">
<wsse:UsernameToken>
<wsse:Username>myUsername</wsse:Username>
<wsse:Password Type="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordText">myPassword</wsse:Password>
</wsse:UsernameToken>
</wsse:Security>
Поэтому я добавил класс Security с классом UsernameToken внутри, который содержит имя пользователя и пароль, и добавил его в вызывающий класс. Проблема с захватом всего отправляемого сообщения SOAP может быть решена с помощью расширения SOAP. Я мог бы добиться:
<Security xmlns="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd">
<UsernameToken>
<Username>username</Username>
<Password>verysecret</Password>
</UsernameToken>
</Security>
Итак, теперь мне не хватает этой wsse
части и атрибута «Type» в теге пароля?
Как это можно сделать? Должен ли я использовать a [MessageContract]
вместо этого?
Или я могу просто «жестко запрограммировать» строку и поместить ее в заголовок?
Комментарии:
1. веб-служба, которой требуется заголовок, является ли это WCF или обычной веб-службой?
2. Действительно ли этот вопрос касается заголовка или отправки имени пользователя и пароля с каждым запросом на аутентификацию?
3. Я бы сказал, обычный веб-сервис (EAR, работающий на WebSphere). Конечно, проблема заключается в том, что в конце отправляется имя пользователя и пароль, но я делаю это шаг за шагом. Прямо сейчас я хочу посмотреть, что я отправляю.
4. @Graffl ЕСЛИ вы хотите видеть SOAP-сообщение только в учебных целях, просто просмотрите необработанное SOAP-сообщение, которое вы получаете на стороне сервера.
5. Если у него есть доступ к серверу…
Ответ №1:
У вас есть несколько вопросов в вашем вопросе, но ответить «Тем не менее, моя самая большая проблема сейчас в том, что я не вижу, что на самом деле было отправлено в качестве заголовка». вы можете увидеть конверт SOAP в методе private void CallWebSvcCallAsync(model.WebSvcMethod webSvcMethod)
Установите точку останова var call = new websvcasync.Operations.CallAsyncOp(webSvcMethod, _cancelToken, State.Instance.ConfigProxy, State.Instance.ConfigTimeout.Timeout);
и проверьте webSvcMethod.SampleReqMsg
. Это даст вам представление о том, какой конверт отправляется.
Если вы можете отсортировать структуру конверта SOAP, вы должны быть готовы к работе.
Комментарии:
1. Однако я бы рекомендовал попытаться получить SOAP-конверт, который, как вы знаете, работает, а затем использовать WsdlUI и сравнивать и изменять, чтобы получить желаемые результаты.