SOAP简单示例

看了网上的几个文章,SOAP的示例布局都不清晰,不能马上入手,特意写个例子与大家分享,同时记录备用。

当前环境:VS2013 + WPF

private void Button_Click(object sender, RoutedEventArgs e)
        {
            string url = "http://www.webxml.com.cn/WebServices/WeatherWS.asmx";
            string soap = SetSoapMessage();// 构造soap请求信息

            string result = GetSOAPReSource(url, soap);

            txtShow.Text = result.Replace(">", ">
").Replace("<string>
", "<string>");
        }

        #region 发起SOAP请求
        /// <summary>
        /// 发起SOAP请求
        /// </summary>
        /// <param name="url">URL</param>
        /// <param name="datastr">数据</param>
        /// <returns></returns>
        public static string GetSOAPReSource(string url, string datastr)
        {
            //发起请求
            Uri uri = new Uri(url);
            WebRequest webRequest = WebRequest.Create(uri);
            webRequest.ContentType = "text/xml; charset=utf-8";
            webRequest.Method = "POST";
            using (Stream requestStream = webRequest.GetRequestStream())
            {
                byte[] paramBytes = Encoding.UTF8.GetBytes(datastr.ToString());
                requestStream.Write(paramBytes, 0, paramBytes.Length);
            }

            //响应
            WebResponse webResponse = webRequest.GetResponse();
            using (StreamReader myStreamReader = new StreamReader(webResponse.GetResponseStream(), Encoding.UTF8))
            {
                string result = "";
                return result = myStreamReader.ReadToEnd();
            }
        } 
        #endregion

        #region 构造soap请求信息
        string SetSoapMessage()
        {
            string header = "";
            string body = "";
            string fault = "";

            body = "<getRegionCountry xmlns="http://WebXml.com.cn/" />";
            
            return GetSoapMessageByBase(header, body, fault);
        } 
        #endregion

        #region SOAP消息基本结构
        /// <summary>
        /// SOAP消息基本结构
        /// </summary>
        /// <param name="header">头部(包含Header)</param>
        /// <param name="body">内容主体(包含Body)</param>
        /// <param name="fault">错误提示(包含Fault)</param>
        /// <returns></returns>
        string GetSoapMessageByBase(string header, string body, string fault)
        {
            StringBuilder soap = new StringBuilder();
            soap.Append("<?xml version="1.0" encoding="utf-8"?>");
            soap.Append("<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">");
            //添加头部
            if (!string.IsNullOrWhiteSpace(header))
            {
                soap.Append("<soap:Header>");
                soap.Append(header);
                soap.Append("</soap:Header>");
            }
            //添加内容
            if (!string.IsNullOrWhiteSpace(body))
            {
                soap.Append("<soap:Body>");
                soap.Append(body);
                 
                //添加错误
                if (!string.IsNullOrWhiteSpace(fault))
                {
                    soap.Append("<soap:Fault>");
                    soap.Append(fault);
                    soap.Append("</soap:Fault>");
                }

                soap.Append("</soap:Body>");
            }

            soap.Append("</soap:Envelope>");

            return soap.ToString();
        } 
        #endregion
原文地址:https://www.cnblogs.com/xcsn/p/4383419.html