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); } }
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(" "); //保存接口调用日志 //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(); }"); sb.Append(" "); if (status && UserData != "") { sb.Append("" + status.ToString() + " "); sb.Append(""); sb.Append(" " + UserData + " "); } sb.Append(""); sb.Append("
7:最终实现返回的XML格式文本如下:
新增成功时返回插入行的RowGuid一个月份重复插入时返回: True 42ccaec8-9091-4950-a653-ecbb4328428c False
8:最后的也是最重要的一步形成文档,以方便调用此方法的人进行开发。
服务名称 | InspectorPlan_Add | |||
服务说明 | 插入用户所填写的督学计划信息 | |||
输入值 | <?xml version="1.0" encoding="gb2312" ?> <paras> <InspectorGuid>当前用户UserGuid</InspectorGuid> <Year>年份,1000至9999字符串。(☆注意必须是四位)</Year> <Month>月份,01至12字符串。(☆注意必须是两位)</Month> <MainContent>督学计划内容</MainContent> </paras>
| |||
输入参数详细 | 参数名称 | 参数说明 | 类型 | 是否必填 |
UserGuid | 当前用户UserGuid | 字符型 | 是 | |
Year | 所选择年份Year | 字符型 | 是 | |
Month | 月份,01至12字符串 | 字符型 | 是 | |
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:浏览器中测试的结果