看了网上的几个文章,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(">", ">\n").Replace("<string>\n", "<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