powered by simpleCommunicator - 2.0.59     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / ASP.NET [игнор отключен] [закрыт для гостей] / При вызове SOAP службы - как задать поля для Soap:Header ?
4 сообщений из 4, страница 1 из 1
При вызове SOAP службы - как задать поля для Soap:Header ?
    #38491068
HowToSoap
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Приветствую.

Пишу клиент для сторонней SOAP Web службы. Сильные подозрения, что она написана на Джаве.
Использую VS2010.

Итак.
Импортировал ссылку на службу (Добавить ссылку на службу -> Дополнительно - Добавить ссылку на Web Службу).

Создалась прокся, отнаследованная от System.Web.Services.Protocols.SoapHttpClientProtocol

Вот WSDL службы (убрал реальные адреса, т.к. не хочется чтобы потом в гугле при поиске сайта выводилась вся программная спецификация :) )

Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
<definitions xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap12="http://schemas.xmlsoap.org/wsdl/soap12/" xmlns:wsaw="http://www.w3.org/2006/05/addressing/wsdl" 

<types>
<xsd:schema ... >
<xsd:include schemaLocation="https://server.com/path/path/Serv?xsd=../path/path/path/name.xsd"/>
... 
</xsd:schema>
</types>
<message name="Mes1_Message">
<part element="..." name="body"></part>
</message>
... 
<message>...</message>

<portType name="name">

<operation name="Method1">
<input message="name" wsaw:Action="name"></input>
<output message="name" wsaw:Action="name"></output>
</operation>
... 
</operation>


<binding name="name" type="type">
<soap12:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/>
<wsaw:UsingAddressing xmlns:ns3="http://schemas.xmlsoap.org/wsdl/" required="true"/>
<wsaw:Anonymous>required</wsaw:Anonymous>
<operation name="Method1">...</operation>
<operation name="Method2">...</operation>

<service name="name">
<port binding="tns:name" name="name">
<soap12:address location="https://server.com/Serv"/>
</port>
</service>
</definitions>



Вопрос.
Как сделать, чтобы при отправке сообщения в SOAP добавились такие поля:
Код: xml
1.
2.
3.
4.
5.
<wsa:MessageID> ...</wsa:MessageID>
<wsa:ReplyTo> <wsa:Address>http://www.w3.org/2005/08/addressing/anonymous</wsa:Address></wsa:ReplyTo>
<wsa:Action>...</wsa:Action>
<wsa:To>...</wsa:To>
<wsa:RelatesTo></wsa:RelatesTo>



При вызове метода, я вижу SOAP сообщение, и там нет полей WSA.

Также вылетает ошибка "A required header representing a Message Addressing Property is not present". Подозреваю, что дело вот в этом
<wsaw:UsingAddressing xmlns:ns3=" http://schemas.xmlsoap.org/wsdl/" required="true" />

PS. Во время гуглопоиска, выяснил, что вроде бы нужно работать с библиотекой Microsoft.Web.Services3.
Вроде бы даже нашел примеры, которые бы помогли в этом.
Однако я не могу понять как прикрутить эту библиотеку к проекту, ибо сгенерированная прокси использует пространство System.Web.Services. ну и плюс, эта библиотека уже устаревшая и видимо не надо ее использовать.
Может я ошибаюсь и не то нашел.

Подскажите пожалуйста !
...
Рейтинг: 0 / 0
При вызове SOAP службы - как задать поля для Soap:Header ?
    #38491074
HowToSoap
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Я не пойму какую технологию вообще использовать :)
Не пойму в какую сторону рыть.

Пока мне удалось лишь добавить в Soap Header свою секцию AddedHeader с помощью атрибута SoapHeaderAttribute. Но он не затрагивает сам Header.

Вот что мне нужно получить.

Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
<s:Header>
    <AddedHeader>
      <Info>
        <userId></userId>
      </Info>
    </AddedHeaderHeader>

    <wsa:MessageID> ...</wsa:MessageID>
    <wsa:ReplyTo> <wsa:Address>http://www.w3.org/2005/08/addressing/anonymous</wsa:Address></wsa:ReplyTo>
    <wsa:Action>...</wsa:Action>
    <wsa:To>...</wsa:To>
    <wsa:RelatesTo></wsa:RelatesTo>
</s:Header>



Пока же отправляется вот так:
Код: xml
1.
2.
3.
4.
5.
6.
7.
<s:Header>
    <AddedHeader>
      <Info>
        <userId></userId>
      </Info>
    </AddedHeaderHeader>
</s:Header>
...
Рейтинг: 0 / 0
При вызове SOAP службы - как задать поля для Soap:Header ?
    #38491082
Фотография Где-то в степи
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
HowToSoap,
SoapExtension
...
Рейтинг: 0 / 0
При вызове SOAP службы - как задать поля для Soap:Header ?
    #38491965
HowToSoap
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо большое !

Такой тогда еще вопросик разрешите (не к Вам именно, а ко всем, кто знает)
Вопрос несколько пространный.

Я вообще думал, что эти вот доп поля, они как то стандартизованы и есть готовые классы. Ну как тот же SoapHttpClientProtocol.
Но получается их надо что ли вручную создавать (хотя бы вот через SoapExtension) ?

Проблема в том, что мне еще нужно будет общаться с сервисом, с использованием сертификатов. Я не верю, что и там придется все вручную реализовывать :)

PS.
Вообще, я пот что нашел
WS-Addressing Message Information Headers
http://msdn.microsoft.com/en-us/library/ms996537.aspx

Это Microsoft библиотека для работы со всем этим. Но она аж от 2004 года !

Что-то пришло ей на смену ? Зная Microsoft их опыт и желание поучаствовать во всех серьезных областях-тем более в вебе. Я думаю что то должно быть.

Вообще как нужно писать программы для связи с Web сервисами, имея их WSDL ? Какую технологию использовать ?
Может это есть в Asp.net MVC ?
...
Рейтинг: 0 / 0
4 сообщений из 4, страница 1 из 1
Форумы / ASP.NET [игнор отключен] [закрыт для гостей] / При вызове SOAP службы - как задать поля для Soap:Header ?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]