• 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

  • 相关阅读:
    【转】Visual Studio 2008中使用科学计算库GSL
    【转】[Python Tip]如何在Windows下方便地进入命令行运行程序
    【转】URL Encoding (URL转义字符)
    RDLC报表,纯文字内容,动态数据源 解决方案
    C# 数值计算
    标准库List使用注意
    VS2008 运行出现 “无法启动该程序 计算机中丢失 MSVCR90D.dll”
    数据结构在游戏中的简单应用(转)
    SQL SERVER 2005 四种排序函数
    2010.11.30
  • 原文地址:https://www.cnblogs.com/ddlzq/p/1609821.html
Copyright © 2020-2023  润新知