C# HttpWebRequest 发送SOAP XML(转)

调用webservice的几种方法:

方法一:添加web引用(简单/方便 局限客户端是.net)

方法二:Post xml(本文重点讲述)

方法三:使用微软MSXML2组件(好像在window server2008上就不支持)

方法四:在页面上添加form post到服务端

        static void Main(string[] args)
        {
            string url = "服务地址";
            Uri uri = new Uri(url);
            WebRequest webRequest = WebRequest.Create(uri);
            webRequest.ContentType = "text/xml";
            webRequest.Method = "POST";

            StringBuilder soap = new StringBuilder();
            soap.Append("<?xml version=\"1.0\" encoding=\"utf-8\"?>");
            soap.Append(@"<soap:Envelope xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' xmlns:xsd='http://www.w3.org/2001/XMLSchema' xmlns:soap='http://schemas.xmlsoap.org/soap/envelope/'>");
            soap.Append("<soap:Body>");
            soap.Append("<Request xmlns=\'http://tempuri.org/'>");
            soap.Append("<requestXml>");

            string requestBody = @"&lt;TestRequest&gt;
                &lt;***&gt;
                &lt;/TestRequest&gt;";
            soap.Append(requestBody);
            soap.Append("</requestXml>");
            soap.Append("</Request>");
            soap.Append("</soap:Body>");
            soap.Append("</soap:Envelope>");

            byte[] bytes = Encoding.UTF8.GetBytes(soap.ToString());
            Stream writer = webRequest.GetRequestStream();
            writer.Write(bytes, 0, bytes.Length);
            writer.Flush();
            writer.Close();
            string result = "";

            try
            {
                HttpWebResponse hwRes = webRequest.GetResponse() as HttpWebResponse;
                if (hwRes.StatusCode == System.Net.HttpStatusCode.OK)
                {//是否返回成功
                    Stream rStream = hwRes.GetResponseStream();
                    //流读取
                    StreamReader sr = new StreamReader(rStream, Encoding.UTF8);
                    result = sr.ReadToEnd();
                    sr.Close();
                    rStream.Close();
                }
                else
                {
                    result = "连接错误";
                }
                //关闭
                hwRes.Close();
                Console.WriteLine(result);
            }
            catch (System.Net.WebException ex)
            {
                String responseFromServer = ex.Message.ToString() + " ";
                if (ex.Response != null)
                {
                    using (WebResponse response = ex.Response)
                    {
                        Stream data = response.GetResponseStream();
                        using (StreamReader reader = new StreamReader(data))
                        {
                            responseFromServer += reader.ReadToEnd();
                        }
                    }
                }
                Console.WriteLine(responseFromServer);
            }

            Console.ReadKey();            
        }

参考:http://www.cnblogs.com/zhxhdean/archive/2012/06/12/2546277.html

posted @ 2015-01-14 14:13  邹邹  Views(1775)  Comments(0)    收藏  举报