Добавление пользовательского заголовка SOAP с использованием c # / ASP.NET - PullRequest
1 голос
/ 22 сентября 2009

Я пытаюсь использовать веб-сервис трафика. Пример запроса SOAP приведен ниже.

Я создал прокси-класс в c #, используя Wsdl.exe из структуры WSDL.

То, что я должен сделать сейчас, чтобы как-то вставить заголовок SOAP «authenticate» в структуру SOAP вызов метода. Я не уверен, как добавить заголовок к вызову метода службы?

<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:ns1="http://www.inteleacst.com.au/wsdl"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
  <SOAP-ENV:Header>
    <ns1:authenticate>
      <SOAP-ENC:Struct>
        <username>username</username>
        <password>password</password>
      </SOAP-ENC:Struct>
    </ns1:authenticate>
  </SOAP-ENV:Header>
  <SOAP-ENV:Body>
    <ns1:getAllTraffic>
      <States SOAP-ENC:arrayType="xsd:string[3]" xsi:type="ns1:State_Arr">
        <item xsi:type="xsd:string">VIC</item>
        <item xsi:type="xsd:string">NSW</item>
        <item xsi:type="xsd:string">NT</item>
      </States>
      <EventCodes SOAP-ENC:arrayType="xsd:int[1]" xsi:type="ns1:EventCode_arr">
        <item xsi:type="xsd:int">802</item>
      </EventCodes>
    </ns1:getAllTraffic>
  </SOAP-ENV:Body>
</SOAP-ENV:Envelope>

Вот код прокси-класса для вызова метода веб-службы.

[System.Web.Services.Protocols.SoapRpcMethodAttribute("http://webservice.intelecast.com.au/traffic/PublicSoap/server.php#getAllTraffic", RequestNamespace="http://webservice.intelecast.com.au/traffic/PublicSoap/server.php", ResponseNamespace="http://webservice.intelecast.com.au/traffic/PublicSoap/server.php")]
        [return: System.Xml.Serialization.SoapElementAttribute("return")]
        public TrafficInfo[] getAllTraffic(string[] States, int[] EventCodes) {
            object[] results = this.Invoke("getAllTraffic", new object[] {
                        States,
                        EventCodes});
            return ((TrafficInfo[])(results[0]));
        }

Ответы [ 2 ]

4 голосов
/ 23 сентября 2009

Поиск в Интернете Я нашел сообщение на форуме об очень похожей проблеме и хорошем решении. Доступно здесь - forums.asp.net / t / 1137408.aspx

2 голосов
/ 22 сентября 2009

Добавление заголовков SOAP - одна из тех вещей, которые стали более запутанными с WCF по сравнению с предыдущим «Добавление ссылки на веб-службу» в Visual Studio .Net 2003/2005 и создание расширения SOAP.

Чтобы сделать это в WCF, вам нужно добавить EndPointBehavior. Вокруг немало примеров, Google на IEndpointBehavior и IClientMessageInspector. В этой статье приведен хороший лаконичный пример, но вам может потребоваться его расширить.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...