ASP.NET MVC + Bootstrap + XML + WCF 封装短信验证服务(三)
2015-10-12 14:47
656 查看
经过前两篇博客之后,我们已经成功的对短信内容等信息进行了维护,可以动态的添加新的内容。短信平台信息的维护界面和短信内容类似,就不在重复了。
那么下一步就是应该对其他系统提供短信验证服务了。这里采用WCF完成服务的远程调用。
BLL层对服务的封装
一共两个方法:SendSMS()和SendMessage()。SendSMS()方法是对外提供服务的具体实现,它有四个参数分别是:
captcha(短信验证码)项目中随机生成的几位数字作为验证码,
phoNumber(手机号码)用户注册时输入的手机号,
programKey(项目标识)配置短信内容时输入的项目标识,根据传过来的项目标识,去xml文件中查询出对应的短信详情配置,拼成完整的短信内容
platform(短信平台名称)根据传过来的短信平台名称,去xml文件中获取对应的平台信息,用户名密码等参数。
参数都准备好后,调用SendMessage()方法(短信服务的核心方法),完成短信的实际发送动作。
然后通过WCF对服务进行发布,其他系统配置上终结点信息即可调用该服务。
WCF的具体创建过程不再叙述,详见:项目源码
那么下一步就是应该对其他系统提供短信验证服务了。这里采用WCF完成服务的远程调用。
BLL层对服务的封装
public class SMSVerification { #region 对外提供的方法发送短信SendSMS()-牛迁迁-2015年8月12日 17:30:32 /// <summary> /// 对外提供的方法发送短信 SendSMS() /// </summary> /// <param name="captcha">短信验证码</param> /// <param name="phoNumber">手机号码</param> /// <param name="programKey">项目标识</param> /// <param name="platform">短信平台名称</param> /// <returns></returns> public bool SendSMS(string captcha, string phoNumber, string programKey, string platform) { XmlReader readersms = null; XmlReader readeruser = null; try { //获取路径 ..\TGB.Common.Message\TGB.Common.Message.UI\XML下的XML文件 string smsxmlPath = System.Web.HttpContext.Current.Server.MapPath("~/XML/SMSContent.xml"); string userxmlPath = System.Web.HttpContext.Current.Server.MapPath("~/XML/SMSPlatform.xml"); XmlDocument smsxmlDoc = new XmlDocument(); XmlDocument userxmlDoc = new XmlDocument(); //设置,读取时忽略xml注释 XmlReaderSettings settings = new XmlReaderSettings(); settings.IgnoreComments = true;//忽略文档里面的注释 //加载SMS XML文件 readersms = XmlReader.Create(smsxmlPath, settings); smsxmlDoc.Load(readersms); //加载User XML文件 readersms = XmlReader.Create(userxmlPath, settings); userxmlDoc.Load(readeruser); //根据项目标识,从xml文件中加载对应的短信详情信息 XmlNode smsxn = smsxmlDoc.SelectSingleNode(programKey); XmlNodeList smsxnlist = smsxn.ChildNodes; //拼接出全部短信内容,开始内容+ 验证码+结尾内容 string realMessage = smsxnlist.Item(0).InnerText + captcha + smsxnlist.Item(1).InnerText; //根据项目标识,从xml文件中加载对应的用户详情信息 XmlNode userxn = userxmlDoc.SelectSingleNode(platform); XmlNodeList userxnlist = userxn.ChildNodes; string userid = userxnlist.Item(0).InnerText; string password = userxnlist.Item(1).InnerText; string account = userxnlist.Item(2).InnerText; string url = userxnlist.Item(3).InnerText; bool issend = SendMessage(realMessage, phoNumber, url, userid, password, account); return issend; } catch (Exception ex) { throw ex; } finally { readersms.Close(); } } #endregion #region 最底层短信发送方法SendMessage()-牛迁迁-2015年8月12日 17:27:56 /// <summary> /// 最底层-短信发送方法 /// </summary> /// <param name="content">短信内容</param> /// <param name="phoNumber">手机号码</param> /// <param name="url">请求地址</param> /// <param name="userid">企业id</param> /// <param name="password">密码</param> /// <param name="account">用户帐号</param> /// <returns>bool 是否发送成功</returns> public bool SendMessage(string content, string phoNumber, string url, string userid, string password, string account) { try { Encoding myEncoding = Encoding.GetEncoding("UTF-8"); //按照平台给定格式,组装发送参数 包括用户id,密码,账户,短信内容,账户等等信息 string param = "action=send&userid=" + userid + "&account=" + HttpUtility.UrlEncode(account, myEncoding) + "&password=" + HttpUtility.UrlEncode(password, myEncoding) + "&mobile=" + phoNumber + "&content=" + HttpUtility.UrlEncode(content, myEncoding) + "&sendTime="; //发送请求 byte[] postBytes = Encoding.ASCII.GetBytes(param); HttpWebRequest req = (HttpWebRequest)HttpWebRequest.Create(url); req.Method = "POST"; req.ContentType = "application/x-www-form-urlencoded;charset=UTF-8"; req.ContentLength = postBytes.Length; using (Stream reqStream = req.GetRequestStream()) { reqStream.Write(postBytes, 0, postBytes.Length); } System.Xml.XmlDocument xmlDoc = new System.Xml.XmlDocument(); //获取返回的结果 using (WebResponse wr = req.GetResponse()) { StreamReader sr = new StreamReader(wr.GetResponseStream(), System.Text.Encoding.UTF8); System.IO.StreamReader xmlStreamReader = sr; //加载XML文档 xmlDoc.Load(xmlStreamReader); } //解析XML文档,进行相应判断 if (xmlDoc == null) { return false; } else { String message = xmlDoc.GetElementsByTagName("message").Item(0).InnerText.ToString(); if (message == "ok") { return true; } else { return false; } } } catch (Exception ex) { throw ex; } } #endregion }
一共两个方法:SendSMS()和SendMessage()。SendSMS()方法是对外提供服务的具体实现,它有四个参数分别是:
captcha(短信验证码)项目中随机生成的几位数字作为验证码,
phoNumber(手机号码)用户注册时输入的手机号,
programKey(项目标识)配置短信内容时输入的项目标识,根据传过来的项目标识,去xml文件中查询出对应的短信详情配置,拼成完整的短信内容
platform(短信平台名称)根据传过来的短信平台名称,去xml文件中获取对应的平台信息,用户名密码等参数。
参数都准备好后,调用SendMessage()方法(短信服务的核心方法),完成短信的实际发送动作。
然后通过WCF对服务进行发布,其他系统配置上终结点信息即可调用该服务。
WCF的具体创建过程不再叙述,详见:项目源码
相关文章推荐
- 分享微信开发Html5轻游戏中的几个坑
- bootstrap初试进度条
- Bootstrap 3.3.4 发布,Web 前端 UI 框架
- XML 与 JSON 优劣对比
- As3.0 xml + Loader应用代码
- 网马生成器 MS Internet Explorer XML Parsing Buffer Overflow Exploit (vista) 0day
- ext读取两种结构的xml的代码
- C#针对xml基本操作及保存配置文件应用实例
- asp下查询xml的实现代码
- sqlserver FOR XML PATH 语句的应用
- 使用sp_xml_preparedocument处理XML文档的方法
- EBS xml publisher中文乱码问题及解决办法
- C#中的Linq to Xml详解
- C#操作XML文件实例汇总
- SQL Server中的XML数据进行insert、update、delete
- SQL Server中的XML数据进行insert、update、delete操作实现代码
- 关于SQLServer2005的学习笔记 XML的处理
- C#通过DataSet读写xml文件的方法
- C#实现基于XML配置MenuStrip菜单的方法