ASP.NET之SOAP的发送、接收与处理类
2009-05-31 15:24
169 查看
首先本文不对SOAP有过多的解释,你只需知道它是--简单对象访问协议,一种轻量的、简单的、基于 XML 的协议。举个例子,WebService其实就基于SOAP的。
再简单的说一下,SOAP就是打包-->发送-->收包-->处理-->返回包等一系列流程,在ASP.NET中可以使用MSXML2中的XMLHTTPClass类来创建SOAP发送对象,先下载Interop.MSXML2.dll,然后复制到VS项目的bin目录,或者在VS里添加引用。创建如下代码:
如果你已经读过上一篇:ASP之SOAP的发送、接收与处理类 ,那么你现在已经知道如何使用这三个类了。很简单,创建Send发送类,并发送XML数据包,在接收站点中,创建Incept接收包,并读取和处理发送站点传递过来的数据包,然后再创建Return返回类,并返回(打印)数据包,最后在发送站点中读取这个返回包并处理,OK了。。这就是SOAP流程。
再简单的说一下,SOAP就是打包-->发送-->收包-->处理-->返回包等一系列流程,在ASP.NET中可以使用MSXML2中的XMLHTTPClass类来创建SOAP发送对象,先下载Interop.MSXML2.dll,然后复制到VS项目的bin目录,或者在VS里添加引用。创建如下代码:
#region 引用的命名空间 using System; using System.IO; using System.Data; using System.Web; using System.Text.RegularExpressions; using System.Collections.Generic; using System.Text; using System.Xml; using MSXML2;//xmlHttp所属命名空间(添加引用:COM->Microsoft Xml 3.0) #endregion namespace Simple.SOAP { #region Send:处理 XML 数据的发送。 /// <summary> /// 处理 XML 数据的发送。 /// </summary> public class Send { /// <summary> /// XMLHTTP 对象。 /// </summary> private XMLHTTP xmlHttp = new XMLHTTPClass(); /// <summary> /// Send 失败后的提示信息。 /// </summary> private string _error = ""; /// <summary> /// 发送数据包的字符串表现形式。 /// </summary> private string _data = ""; /// <summary> /// Send 返回数据包的字符串表现形式。 /// </summary> private string _return = ""; /// <summary> /// 获取或设置发送数据包的字符串表现形式(建议发送XML数据文档的字符串表现形式)。 /// </summary> public string Data { get { return _data; } set { _data = value; } } /// <summary> /// 获取 Send 返回数据包的字符串表现形式。 /// </summary> public string Return { get { return _return; } } /// <summary> /// 获取 Send 失败后的提示信息。 /// </summary> public string Error { get { return _error; } } /// <summary> /// 初始化 Send 类的新实例。 /// </summary> public Send() { } /// <summary> /// 初始化 Send 类的新实例。 /// </summary> /// <param name="data">要发送数据的字符串表现形式(建议发送 XML 数据文档的字符串表现形式)。</param> public Send(string data) { _data = data; } /// <summary> /// 发送数据。 /// </summary> /// <param name="url">要发送到的Url路径字符串。</param> /// <returns>true 表示发送成功,false 发送失败。</returns> public bool ExecuteSend(string url) { return ExecuteSend("POST", url); } /// <summary> /// 发送数据。 /// </summary> /// <param name="url">要发送到的 url 路径字符串。</param> /// <param name="method">发送方式。</param> /// <returns>true 表示发送成功,false 发送失败。</returns> public bool ExecuteSend(string url, string method) { bool b = false; xmlHttp.open(method, url, false, null, null); xmlHttp.send(_data); if (xmlHttp.readyState == 4) { if (xmlHttp.status == 200) { _return = xmlHttp.responseText; b = true; } else { _error = "请求页面有异常(XMLHTTP.status=" + xmlHttp.status + ")。"; } } else { _error = "请求页面有异常(XMLHTTP.readyState=" + xmlHttp.readyState + ")。"; } return b; } } #endregion #region Incept:处理 XML 数据的接收。 /// <summary> /// 处理 XML 数据的接收。 /// </summary> public static class Incept { /// <summary> /// 获取接收的数据包,并使用指定的编码对数据包进行解码。 /// </summary> /// <returns>数据包的字符串形式。</returns> public static string ExecuteIncept() { return ExecuteIncept(Encoding.GetEncoding("utf-8")); } /// <summary> /// 获取接收的数据包,并使用指定的编码对数据包进行解码。 /// </summary> /// <param name="encode">与首选编码相对应的代码页值。</param> /// <returns>数据包的字符串形式。</returns> public static string ExecuteIncept(int encode) { return ExecuteIncept(Encoding.GetEncoding(encode)); } /// <summary> /// 获取接收的数据包,并使用指定的编码对数据包进行解码。 /// </summary> /// <param name="encode">字符编码的名称。</param> /// <returns>数据包的字符串形式。</returns> public static string ExecuteIncept(string encode) { return ExecuteIncept(Encoding.GetEncoding(encode)); } /// <summary> /// 获取接收的数据包,并使用指定的编码对数据包进行解码。 /// </summary> /// <param name="encode">字符编码对象实例。</param> /// <returns>数据包的字符串形式。</returns> public static string ExecuteIncept(Encoding encode) { StreamReader sr = new StreamReader(HttpContext.Current.Request.InputStream, encode); return sr.ReadToEnd(); } } #endregion #region Return:处理 XML 数据的返回。 /// <summary> /// 处理 XML 数据的返回。 /// </summary> public static class Return { /// <summary> /// 返回 XML 数据包。 /// </summary> /// <param name="body">要返回的 XML 的字符串表现形式。</param> public static void ExecuteReturn(string body) { ExecuteReturn(body, "utf-8"); } /// <summary> /// 返回 XML 数据包。 /// </summary> /// <param name="body">要返回的 XML 的字符串表现形式。</param> /// <param name="encode">输出字符的编码格式。</param> public static void ExecuteReturn(string body, string encode) { if (!new Regex(@"^<///?xml.*///?>.*$", RegexOptions.IgnoreCase).IsMatch(Regex.Escape(body))) { body = "<?xml version=/"1.0/" encoding=/"" + encode + "/" ?>/n" + body; } else { string start = body.Substring(0, body.IndexOf("/"?>")); string left = body.Substring(0, start.LastIndexOf("/"") + 1); body = left + encode + body.Substring(body.IndexOf("/"?>")); } HttpContext.Current.Response.Clear(); HttpContext.Current.Response.Buffer = true; HttpContext.Current.Response.ContentType = "text/xml"; HttpContext.Current.Response.Charset = encode; HttpContext.Current.Response.Expires = 0; HttpContext.Current.Response.Write(body); HttpContext.Current.Response.End(); } } #endregion }
如果你已经读过上一篇:ASP之SOAP的发送、接收与处理类 ,那么你现在已经知道如何使用这三个类了。很简单,创建Send发送类,并发送XML数据包,在接收站点中,创建Incept接收包,并读取和处理发送站点传递过来的数据包,然后再创建Return返回类,并返回(打印)数据包,最后在发送站点中读取这个返回包并处理,OK了。。这就是SOAP流程。
相关文章推荐
- ASP之SOAP的发送、接收与处理类
- ASP.NET之SOAP的发送、接收与处理类 [转载]
- asp.net接收发送的xml字符串数据
- Asp.net XMLHTTP 基类 (GET,Post发送和接收数据)
- asp.net利用Jmail发送邮件和接收全部代码
- asp.net 2.0发送和接收邮件总结
- asp.net 发送 xml post请求和接收 xml post请求时出现(500) 内部服务器错误(WebClient学习笔记)
- ASP.NET POST XML JSON数据,发送与接收
- Asp.net XMLHTTP 基类 (GET,Post发送和接收数据)
- Asp.net Socket客户端(远程发送和接收数据)
- Asp.net Socket客户端(远程发送和接收数据)
- ASP.NET MVC前台js发送数组,后台用数组接收
- Asp.net XMLHTTP封装类(GET,Post发送和接收数据)
- asp.net后台接收app发送的图片
- asp.net 2.0发送和接收邮件总结
- ASP.NET中将数据作为XML数据发送 使用 Request.InputStream 接收
- ASP.NET中常用功能代码总结(7)——利用Jmail发送和接收邮件
- asp.net 发送 xml post请求和接收 xml post请求时出现(500) 内部服务器错误(WebClient学习笔记)
- ASP.NET中常用功能代码总结(7)——利用Jmail发送和接收邮件