poniedziałek, 14 października 2013

.NET Client consuming PHP ZendFramework Web Service - solution no.2 (HttpWebRequest)

Dostałem za zadanie zintegrowanie się z kilkoma web serwisami. Naturalnym rozwiązaniem było wybranie do tego celu technologii WPF, co opisałem we wcześniejszym wpisie. Na szczęście, platforma .NET pozwala wykonywać wiele zdań na wiele, różnorodnych sposobów. W tym wpisie, przedstawię inny sposób odpytania web serwisu, tj. za pomocą klasy HttpWebRequest

W przypadku korzystania z klasy HttpWebRequest, całość zapytania SOAP, jakie wykonamy musimy napisać samemu w stringu, a nast. odpytać serwis za pomocą metody POST.
Odpowiedź dostajemy w strumieniu bajtów, który następnie zamieniamy na XmlDocument

        public string GetMigDZiDByPost()
        {
            try
            {
                WebRequest webRequest = WebRequest.Create("http://xxx.yyy.zzz/Dzsoapserver/queryko");

                HttpWebRequest httpRequest = (HttpWebRequest)webRequest;
                httpRequest.Method = "POST";
                httpRequest.ContentType = "text/xml";
                httpRequest.Headers.Add("SOAPAction: http://xxx.yyy.zzz/Dzsoapserver/queryko");
                Stream requestStream = httpRequest.GetRequestStream();

                //Create Stream and Complete Request
                StreamWriter streamWriter = new StreamWriter(requestStream);
                streamWriter.Write(this.GetSoapString());
                streamWriter.Close();

                //Get the Response
                WebResponse webResponse = httpRequest.GetResponse();
                Stream responseStream = webResponse.GetResponseStream();
                StreamReader streamReader = new StreamReader(responseStream);

                //Read the response into an xml document
                System.Xml.XmlDocument soapResonseXMLDocument = new System.Xml.XmlDocument();
                soapResonseXMLDocument.LoadXml(streamReader.ReadToEnd());

                //return only the xml representing the response details (inner request)
                string test = soapResonseXMLDocument.GetElementsByTagName("organisation")[0].InnerXml;
                return test;
            }
            catch (Exception ex)
            {
                //error 500 mean rekord not found
                return null;
            }
        }
        private string GetSoapString()
        {
            string hash = Constraints.MIGDZ.MigDzHashBase64;
            StringBuilder sb = new StringBuilder();
            sb.Append("<?xml version=\"1.0\" encoding=\"UTF-8\"?>");
            sb.Append("<SOAP-ENV:Envelope SOAP-ENV:encodingStyle=\"http://schemas.xmlsoap.org/soap/encoding/\" xmlns:SOAP-ENC=\"http://schemas.xmlsoap.org/soap/encoding/\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:ns1=\"http://xxx.yyy.zzz/Dzsoapserver/queryko\" xmlns:SOAP-ENV=\"http://schemas.xmlsoap.org/soap/envelope/\"><SOAP-ENV:Body>");
            sb.Append("<ns1:getParcel><parameters xsi:type=\"ns1:Logic_DzSoapServer_Request_BodyKo\"><sy xsi:type=\"xsd:string\">12345678</sy></parameters><hashCode xsi:type=\"xsd:string\">abcdefg0123456VUZ123ABCD01a=</hashCode></ns1:getParcel></SOAP-ENV:Body></SOAP-ENV:Envelope>");

            return sb.ToString();
        }

Brak komentarzy:

Prześlij komentarz