ASP.NET之SOAP的发送、接收与处理类 [转载]
首先本文不對SOAP有過多的解釋,你只需知道它是--簡單對象訪問協議,一種輕量的、簡單的、基于 XML 的協議。舉個例子,WebService其實就基于SOAP的。
如果你需要了解SOAP的運行機制,請看這里:http://www.51script.com/?p=932
再簡單的說一下,SOAP就是打包-->發送-->收包-->處理-->返回包等一系列流程,在ASP.NET中可以使用MSXML2中的XMLHTTPClass類來創建SOAP發送對象,先下載Interop.MSXML2.dll,然后復制到VS項目的bin目錄,或者在VS里添加引用。創建如下代碼:
view sourceprint?
001.#region 引用的命名空間
002.using System;
003.using System.IO;
004.using System.Data;
005.using System.Web;
006.using System.Text.RegularExpressions;
007.using System.Collections.Generic;
008.using System.Text;
009.using System.Xml;
010.using MSXML2;//xmlHttp所屬命名空間(添加引用:COM->Microsoft Xml 3.0)
011.#endregion
012.?
013.namespace Simple.SOAP
014.{
015.??? #region Send:處理 XML 數據的發送。
016.??? /// <summary>
017.??? /// 處理 XML 數據的發送。
018.??? /// </summary>
019.??? public class Send
020.??? {
021.??????? /// <summary>
022.??????? /// XMLHTTP 對象。
023.??????? /// </summary>
024.??????? private XMLHTTP xmlHttp = new XMLHTTPClass();
025.??????? /// <summary>
026.??????? /// Send 失敗后的提示信息。
027.??????? /// </summary>
028.??????? private string _error = "";
029.??????? /// <summary>
030.??????? /// 發送數據包的字符串表現形式。
031.??????? /// </summary>
032.??????? private string _data = "";
033.??????? /// <summary>
034.??????? /// Send 返回數據包的字符串表現形式。
035.??????? /// </summary>
036.??????? private string _return = "";
037.?
038.??????? /// <summary>
039.??????? /// 獲取或設置發送數據包的字符串表現形式(建議發送XML數據文檔的字符串表現形式)。
040.??????? /// </summary>
041.??????? public string Data
042.??????? {
043.??????????? get
044.??????????? {
045.??????????????? return _data;
046.??????????? }
047.??????????? set
048.??????????? {
049.??????????????? _data = value;
050.??????????? }
051.??????? }
052.??????? /// <summary>
053.??????? /// 獲取 Send 返回數據包的字符串表現形式。
054.??????? /// </summary>
055.??????? public string Return
056.??????? {
057.??????????? get
058.??????????? {
059.??????????????? return _return;
060.??????????? }
061.??????? }
062.??????? /// <summary>
063.??????? /// 獲取 Send 失敗后的提示信息。
064.??????? /// </summary>
065.??????? public string Error
066.??????? {
067.??????????? get
068.??????????? {
069.??????????????? return _error;
070.??????????? }
071.??????? }
072.?
073.??????? /// <summary>
074.??????? /// 初始化 Send 類的新實例。
075.??????? /// </summary>
076.??????? public Send()
077.??????? {
078.??????? }
079.??????? /// <summary>
080.??????? /// 初始化 Send 類的新實例。
081.??????? /// </summary>
082.??????? /// <param name="data">要發送數據的字符串表現形式(建議發送 XML 數據文檔的字符串表現形式)。</param>
083.??????? public Send(string data)
084.??????? {
085.??????????? _data = data;
086.??????? }
087.?
088.??????? /// <summary>
089.??????? /// 發送數據。
090.??????? /// </summary>
091.??????? /// <param name="url">要發送到的Url路徑字符串。</param>
092.??????? /// <returns>true 表示發送成功,false 發送失敗。</returns>
093.??????? public bool ExecuteSend(string url)
094.??????? {
095.??????????? return ExecuteSend("POST", url);
096.??????? }
097.??????? /// <summary>
098.??????? /// 發送數據。
099.??????? /// </summary>
100.??????? /// <param name="url">要發送到的 url 路徑字符串。</param>
101.??????? /// <param name="method">發送方式。</param>
102.??????? /// <returns>true 表示發送成功,false 發送失敗。</returns>
103.??????? public bool ExecuteSend(string url, string method)
104.??????? {
105.??????????? bool b = false;
106.??????????? xmlHttp.open(method, url, false, null, null);
107.??????????? xmlHttp.send(_data);
108.??????????? if (xmlHttp.readyState == 4)
109.??????????? {
110.??????????????? if (xmlHttp.status == 200)
111.??????????????? {
112.??????????????????? _return = xmlHttp.responseText;
113.??????????????????? b = true;
114.??????????????? }
115.??????????????? else
116.??????????????? {
117.??????????????????? _error = "請求頁面有異常(XMLHTTP.status=" + xmlHttp.status + ")。";
118.??????????????? }
119.??????????? }
120.??????????? else
121.??????????? {
122.??????????????? _error = "請求頁面有異常(XMLHTTP.readyState=" + xmlHttp.readyState + ")。";
123.??????????? }
124.??????????? return b;
125.??????? }
126.??? }
127.??? #endregion
128.?
129.??? #region Incept:處理 XML 數據的接收。
130.??? /// <summary>
131.??? /// 處理 XML 數據的接收。
132.??? /// </summary>
133.??? public static class Incept
134.??? {
135.??????? /// <summary>
136.??????? /// 獲取接收的數據包,并使用指定的編碼對數據包進行解碼。
137.??????? /// </summary>
138.??????? /// <returns>數據包的字符串形式。</returns>
139.??????? public static string ExecuteIncept()
140.??????? {
141.??????????? return ExecuteIncept(Encoding.GetEncoding("utf-8"));
142.??????? }
143.??????? /// <summary>
144.??????? /// 獲取接收的數據包,并使用指定的編碼對數據包進行解碼。
145.??????? /// </summary>
146.??????? /// <param name="encode">與首選編碼相對應的代碼頁值。</param>
147.??????? /// <returns>數據包的字符串形式。</returns>
148.??????? public static string ExecuteIncept(int encode)
149.??????? {
150.??????????? return ExecuteIncept(Encoding.GetEncoding(encode));
151.??????? }
152.??????? /// <summary>
153.??????? /// 獲取接收的數據包,并使用指定的編碼對數據包進行解碼。
154.??????? /// </summary>
155.??????? /// <param name="encode">字符編碼的名稱。</param>
156.??????? /// <returns>數據包的字符串形式。</returns>
157.??????? public static string ExecuteIncept(string encode)
158.??????? {
159.??????????? return ExecuteIncept(Encoding.GetEncoding(encode));
160.??????? }
161.??????? /// <summary>
162.??????? /// 獲取接收的數據包,并使用指定的編碼對數據包進行解碼。
163.??????? /// </summary>
164.??????? /// <param name="encode">字符編碼對象實例。</param>
165.??????? /// <returns>數據包的字符串形式。</returns>
166.??????? public static string ExecuteIncept(Encoding encode)
167.??????? {
168.??????????? StreamReader sr = new StreamReader(HttpContext.Current.Request.InputStream, encode);
169.??????????? return sr.ReadToEnd();
170.??????? }
171.??? }
172.??? #endregion
173.?
174.??? #region Return:處理 XML 數據的返回。
175.??? /// <summary>
176.??? /// 處理 XML 數據的返回。
177.??? /// </summary>
178.??? public static class Return
179.??? {
180.??????? /// <summary>
181.??????? /// 返回 XML 數據包。
182.??????? /// </summary>
183.??????? /// <param name="body">要返回的 XML 的字符串表現形式。</param>
184.??????? public static void ExecuteReturn(string body)
185.??????? {
186.??????????? ExecuteReturn(body, "utf-8");
187.??????? }
188.??????? /// <summary>
189.??????? /// 返回 XML 數據包。
190.??????? /// </summary>
191.??????? /// <param name="body">要返回的 XML 的字符串表現形式。</param>
192.??????? /// <param name="encode">輸出字符的編碼格式。</param>
193.??????? public static void ExecuteReturn(string body, string encode)
194.??????? {
195.??????????? if (!new Regex(@"^<\\\?xml.*\\\?>.*$", RegexOptions.IgnoreCase).IsMatch(Regex.Escape(body)))
196.??????????? {
197.??????????????? body = "<?xml version=\"1.0\" encoding=\"" + encode + "\" ?>\n" + body;
198.??????????? }
199.??????????? else
200.??????????? {
201.??????????????? string start = body.Substring(0, body.IndexOf("\"?>"));
202.??????????????? string left = body.Substring(0, start.LastIndexOf("\"") + 1);
203.??????????????? body = left + encode + body.Substring(body.IndexOf("\"?>"));
204.??????????? }
205.??????????? HttpContext.Current.Response.Clear();
206.??????????? HttpContext.Current.Response.Buffer = true;
207.??????????? HttpContext.Current.Response.ContentType = "text/xml";
208.??????????? HttpContext.Current.Response.Charset = encode;
209.??????????? HttpContext.Current.Response.Expires = 0;
210.??????????? HttpContext.Current.Response.Write(body);
211.??????????? HttpContext.Current.Response.End();
212.??????? }
213.??? }
214.??? #endregion
215.}
如果你已經讀過上一篇:ASP之SOAP的發送、接收與處理類 ,那么你現在已經知道如何使用這三個類了。很簡單,創建Send發送類,并發送XML數據包,在接收站點中,創建Incept接收包,并讀取和處理發送站點傳遞過來的數據包,然后再創建Return返回類,并返回(打印)數據包,最后在發送站點中讀取這個返回包并處理,OK了。。這就是SOAP流程。
?
本文來自CSDN博客,轉載請標明出處:http://blog.csdn.net/xz2001/archive/2009/05/31/4228582.aspx
轉載于:https://www.cnblogs.com/ddlzq/archive/2009/11/24/1609821.html
與50位技術專家面對面20年技術見證,附贈技術全景圖總結
以上是生活随笔為你收集整理的ASP.NET之SOAP的发送、接收与处理类 [转载]的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: [ZZ]职场白领必读:《如何成为PPT高
- 下一篇: UNREFERENCED_PARAMET