博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
WebService,ASMX文件使用XML格式数据传递参数、验证与获取XML格式返回值的一种方式...
阅读量:4876 次
发布时间:2019-06-11

本文共 8363 字,大约阅读时间需要 27 分钟。

1:首先WebService方法定义,每个方法定义两个参数,一个用于验证权限,string格式的XML文本用于传输数据。最终目的实现,WebService方法,验证权限,获取XML数据,处理之后返回XML数据。一下面一段代码为例进行说明:

[WebMethodAttribute(Description = "新增督学计划")]        public string InspectorPlan_Add(string Token, string XMLParas)        {            try            {                //安全凭证检查                if (!TokenAuth.Check(Token))                {                    //为了测试方便先注释掉                    //return this.GetResult(false, "安全凭证无效!", "");                }                Hashtable paras = GetParametersFromXML(XMLParas);                //检查参数是否存在                string msg = this.CheckParas("InspectorGuid,Year,Month,MainContent", paras);                if (msg != "")                {                    return GetResult(false, msg, "", "InspectorPlan_Add", XMLParas);                }                string UserGuid = paras["InspectorGuid"].ToString(); //用户UserGuid                string Year = paras["Year"].ToString();//传过来的月份                string Month = paras["Month"].ToString();//传过来的月份                string MainContent = paras["MainContent"].ToString();//传过来的计划内容                //根据UserGuid获取用户所在部门名称,所在部门Guid,用户姓名                string UserInfoSql = "select a.userguid,a.displayname,b.ouguid,b.ouname from frame_user a join frame_ou b on a.ouguid = b.ouguid where a.userguid ='" + UserGuid + "'";                //查询该月督学计划是否存在,存在则不能重复插入                if (DB_XXTInspectorPlan.InspectorPlan_CheckExist(UserGuid, Year, Month))                {                    //如果该月已经存在,则提示月度督学计划重复                    return GetResult(false, "月度督学计划重复", "", "AddInspectorPlan", XMLParas);                }                else                {                    DataView dv = Epoint.EduFront.Bizlogic.DB_Common.ExecuteToDataView(UserInfoSql);                    if (dv.Count > 0)                    {                        string RowGuid = DB_XXTInspectorPlan.InspectorPlan_Add(dv[0]["UserGuid"].ToString(), dv[0]["displayname"].ToString(), dv[0]["ouguid"].ToString(), dv[0]["ouname"].ToString(), MainContent, Year, Month);                        //评价成功,返回评价的rowguid                        return GetResult(true, "添加成功", "
" + RowGuid + "
", "AddInspectorPlan", XMLParas); } else { return GetResult(false, "", "
添加失败
", "ParEvaSchInsert", XMLParas); } } } catch (Exception ex) { ErrorLog("AddInspectorPlan", XMLParas, ex.Message); return GetResult(false, ex.Message, "", "AddInspectorPlan", XMLParas); } }
View Code

2:Token参数用于验证权限,XMLParas用于传递string格式的XML数据

此方法需要传递的参数如下:

当前用户UserGuid
年份,1000至9999字符串。(☆注意必须是四位)
月份,01至12字符串。(☆注意必须是两位)
督学计划内容

3:循环解析每个节点获取对应的参数值,Hashtable paras = GetParametersFromXML(XMLParas);该语句调用解析XML字符串并转化参数到HashTable中

GetParametersFromXML方法如下:

Hashtable paras = GetParametersFromXML(XMLParas);
public Hashtable GetParametersFromXML(string XMLParameters)        {            XmlDocument xml = new XmlDocument();            xml.LoadXml(XMLParameters);            XmlNode DataNode = xml.SelectSingleNode("paras");            Hashtable Parameters = new Hashtable();            foreach (XmlNode node in DataNode.ChildNodes)            {                Parameters.Add(node.Name, node.InnerText);            }            return Parameters;        }

4:检查必填参数是否存在,并对缺少的参数给出提示。checkParas方法,用于检测每个参数。实现代码如下:

//检查参数是否存在,第一个值为必填参数节点名称,每个参数用","隔开                string msg = this.CheckParas("InspectorGuid,Year,Month,MainContent", paras);
///         /// 检查是否缺少参数必填参数        ///         /// 参数名称,多个参数用逗号隔开        /// 获取到参数Hastable        /// 
public string CheckParas(string Parastr, Hashtable Paras) { string[] listParas = Parastr.Split(','); string Error = ""; for (int i = 0; i < listParas.Length; i++) { if (listParas[i] != "") { if (!Paras.ContainsKey(listParas[i])) { Error += listParas[i] + ","; } } } if (Error != "") { return "缺少参数:" + Error.TrimEnd(','); } else { return ""; } }

5:确认必填参数存在后获取对应的参数值,进行操作,每个XML参数的节点名称作为hashtable的name,每个节点的值作为nodevalue,根据nodename获取参数值代码

 

string UserGuid = paras["InspectorGuid"].ToString(); //用户UserGuid                string Year = paras["Year"].ToString();//传过来的月份                string Month = paras["Month"].ToString();//传过来的月份                string MainContent = paras["MainContent"].ToString();//传过来的计划内容

6:参数的返回,对获取的数据处理后,把需要返回的数据用拼接为XML格式的字符串返回。

string UserInfoSql = "select a.userguid,a.displayname,b.ouguid,b.ouname from frame_user a join frame_ou b on a.ouguid = b.ouguid where a.userguid ='" + UserGuid + "'";                //查询该月督学计划是否存在,存在则不能重复插入                if (DB_XXTInspectorPlan.InspectorPlan_CheckExist(UserGuid, Year, Month))                {                    //如果该月已经存在,则提示月度督学计划重复                    return GetResult(false, "月度督学计划重复", "", "AddInspectorPlan", XMLParas);                }                else                {                    DataView dv = Epoint.EduFront.Bizlogic.DB_Common.ExecuteToDataView(UserInfoSql);                    if (dv.Count > 0)                    {                        string RowGuid = DB_XXTInspectorPlan.InspectorPlan_Add(dv[0]["UserGuid"].ToString(), dv[0]["displayname"].ToString(), dv[0]["ouguid"].ToString(), dv[0]["ouname"].ToString(), MainContent, Year, Month);                        //评价成功,返回评价的rowguid                        return GetResult(true, "添加成功", "
" + RowGuid + "
", "AddInspectorPlan", XMLParas); } else { return GetResult(false, "", "
添加失败
", "ParEvaSchInsert", XMLParas); } }
public string GetResult(bool status, string description, string UserData, string MethodName, string XMLPars)        {            StringBuilder sb = new StringBuilder();            sb.Append("
"); sb.Append("
"); sb.Append("
"); sb.Append("
"); sb.Append("
" + status.ToString() + "
"); sb.Append("
"); sb.Append("
"); if (status && UserData != "") { sb.Append("
" + UserData + "
"); } sb.Append("
"); sb.Append("
"); //保存接口调用日志 //string ClientIP = Context.Request.ServerVariables.GetValues("REMOTE_ADDR")[0]; //DB_XXTWebServiceLog.InsertLog(ClientIP, MethodName, System.Text.Encoding.Default.GetBytes(XMLPars), System.Text.Encoding.Default.GetBytes(sb.ToString()), status ? "1" : "0", description); return sb.ToString(); }

7:最终实现返回的XML格式文本如下:

新增成功时返回插入行的RowGuid
True
42ccaec8-9091-4950-a653-ecbb4328428c
一个月份重复插入时返回:
False

8:最后的也是最重要的一步形成文档,以方便调用此方法的人进行开发。

 

服务名称

InspectorPlan_Add

服务说明

插入用户所填写的督学计划信息

输入值

<?xml version="1.0" encoding="gb2312" ?>

<paras>

  <InspectorGuid>当前用户UserGuid</InspectorGuid>

 <Year>年份,10009999字符串。(☆注意必须是四位)</Year>

  <Month>月份,0112字符串。(☆注意必须是两位)</Month>

  <MainContent>督学计划内容</MainContent>

</paras> 

 

输入参数详细

参数名称

参数说明

 类型

是否必填

UserGuid

当前用户UserGuid

字符型

Year

所选择年份Year

字符型

Month

月份,0112字符串

字符型

MainContent

计划内容

字符型

返回值

新增成功时返回插入行的RowGuid

<?xml version="1.0" encoding="gb2312"?>

<EpointDataBody>

<DATA><ReturnInfo><Status>True</Status><Description>

<![CDATA[插入成功]]>

</Description></ReturnInfo><UserArea>

<RowGuid>42ccaec8-9091-4950-a653-ecbb4328428c</RowGuid>

</UserArea>

</DATA>

</EpointDataBody>

一个月份重复插入时返回:

<EpointDataBody><DATA>

<ReturnInfo><Status>False</Status>

<Description><![CDATA[月度计划重复]]>

</Description></ReturnInfo></DATA>

</EpointDataBody>

 

 

9:浏览器中测试的结果

 

转载于:https://www.cnblogs.com/weity/p/5590633.html

你可能感兴趣的文章
ADB抓取日志和日志过滤
查看>>
20941输入输出系统
查看>>
使用 Flash 描述复杂的社交网络
查看>>
唐骏十年管理经验谈:管理者要学会让员工感动
查看>>
几道和「黑洞照片」那种海量数据有关的算法问题
查看>>
为什么有禁用Mac系统的Spotlight的需求:
查看>>
paip. 定时 关机 休眠 的总结
查看>>
Oracle core02_数据块
查看>>
检查用户名是否存在jsp——access
查看>>
AmazeUI 保存浏览器数据 永久性
查看>>
使用内存数据库进行单元测试
查看>>
centos7 64位系统jdbc连接oracle报错问题
查看>>
最清晰细致的教程!一步步教你打造Win7+CentOS双系统
查看>>
移动端部分安卓手机(三星,小米)竖拍上传图片预览的时候发生旋转问题
查看>>
Visual Studio 11 Beta 官方下载地址
查看>>
渲染树render tree
查看>>
BZOJ3810: [Coci2015]Stanovi
查看>>
12、Flask实战第12天:子域名
查看>>
关于文字内容溢出用点点点(…)省略号表示
查看>>
(转)人与人
查看>>