WS-Addressing Visual Studio 2010

0

Witam,
próbuję stworzyć prostego klienta usługi WebService udsotępnionej przez zewnętrznego dostawcę, dodałem usługę w WebReferences i usługa jest widoczna, problem pojawia się kiedy próbuję sprawdzić działanie i wywołac prostą operację zalogowania. Sprawdziłem w aplikacji SOAPUI i usługa działa po dodaniu obsługi WS-Addressing w nagłówku żądania, w SOAPUI zrobiłem to ręcznie, natomiast pytanie jak zaimplementowac WS-Addresing w C# (Visual Studio 2010)? Znalazłem informacje nt. AddressingVersion, ale nie wiem czy to dobry kierunek i jak to ugryźć żeby działało. Poniżej prosty kod aplikacji do łączenia z usługą i xml żądania z dodanym WS-Addressing (linie 2,3,4)

aplikacja

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using REGONService.pl.gov.stat.wyszukiwarkaregontest;
//using System.ServiceModel.Channels;


namespace REGONService
{
    class Program
    {
        static void Main(string[] args)
        {
            String sid;
            String key;

            UslugaBIRzewnPubl webService = new UslugaBIRzewnPubl();

            key = "abcde12345abcde12345";

            sid = webService.Zaloguj(key);

            //Console.WriteLine(webService.Zaloguj(key));
        }
    }
}

xml żądania

<soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope" xmlns:ns="http://CIS/BIR/PUBL/2014/07">
   <soap:Header xmlns:wsa="http://www.w3.org/2005/08/addressing">
	<wsa:To>https://wyszukiwarkaregontest.stat.gov.pl/wsBIR/UslugaBIRzewnPubl.svc</wsa:To>
   </soap:Header>
   <soap:Body>
      <ns:Zaloguj>
         <!--Optional:-->
         <ns:pKluczUzytkownika>abcde12345abcde12345</ns:pKluczUzytkownika>
      </ns:Zaloguj>
   </soap:Body>
</soap:Envelope> 

Z góry dziękuję za pomoc.

0

Mimo przestudiowania mnóstwa tutoriali, nie udało mi się obsłużyć tego przez konfigurację WS-Addressing w C#, ale zrobiłem to przez ręczne wysyłanie żądania metodą POST i działa, poniżej kod, może sie komuś przyda.

using System.Xml;
using System.Net;
using System.IO;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace REGONInt
{
    class Program
    {

    public static string key;

    public static String GetKey()
    {
        HttpWebRequest request = CreateWebRequest();
        XmlDocument soapEnvelopeXml = new XmlDocument();
        XmlDocument resultXml = new XmlDocument();

        soapEnvelopeXml.LoadXml(@"<soap:Envelope xmlns:soap=""http://www.w3.org/2003/05/soap-envelope"" xmlns:ns=""http://CIS/BIR/PUBL/2014/07"">
        <soap:Header xmlns:wsa=""http://www.w3.org/2005/08/addressing"">
	    <wsa:To>https://wyszukiwarkaregontest.stat.gov.pl/wsBIR/UslugaBIRzewnPubl.svc</wsa:To>
        <wsa:Action>http://CIS/BIR/PUBL/2014/07/IUslugaBIRzewnPubl/Zaloguj</wsa:Action></soap:Header>
        <soap:Body>
            <ns:Zaloguj>
                <!--Optional:-->
            <ns:pKluczUzytkownika>abcde12345abcde12345</ns:pKluczUzytkownika>
            </ns:Zaloguj>
        </soap:Body>
        </soap:Envelope>");

        using (Stream stream = request.GetRequestStream())
        {
            soapEnvelopeXml.Save(stream);
        }

        using (WebResponse response = request.GetResponse())
        {
            using (StreamReader rd = new StreamReader(response.GetResponseStream()))
            {
                string soapResult = rd.ReadToEnd();
                //Console.WriteLine(soapResult);

                int first = soapResult.IndexOf("<ZalogujResult>") + "<ZalogujResult>".Length;
                int last = soapResult.IndexOf("</ZalogujResult>");
                key = soapResult.Substring(first, last - first);

                return key;
            }
        }
    }

    public static HttpWebRequest CreateWebRequest()
    {
        HttpWebRequest webRequest = (HttpWebRequest)WebRequest.Create(@"https://wyszukiwarkaregontest.stat.gov.pl/wsBIR/UslugaBIRzewnPubl.svc");
        webRequest.ContentType = "application/soap+xml;charset=\"utf-8\"";
        webRequest.Accept = "application/soap+xml";
        webRequest.Method = "POST";
        return webRequest;
    }

    static void Main(string[] args)
    {
        key = GetKey();
        Console.WriteLine(key);
        Console.ReadKey();
    }

    }
} 

1 użytkowników online, w tym zalogowanych: 0, gości: 1