加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

webservice

发布时间:2020-12-17 00:57:55 所属栏目:安全 来源:网络整理
导读:WebService 应用 最近的项目采用了基于WEBSERVICE的三层架构,仔细想想,这种方式还是扩展性蛮好的。本来担心WEBSERVICE的瓶颈问题,现在发现,担心是多余的,微软的东西还不会那么差劲。下面来一个总结: 使用WEBSERVICE的优点: 1.系统扩展性增强 2.便于集
WebService 应用

最近的项目采用了基于WEBSERVICE的三层架构,仔细想想,这种方式还是扩展性蛮好的。本来担心WEBSERVICE的瓶颈问题,现在发现,担心是多余的,微软的东西还不会那么差劲。下面来一个总结:
使用WEBSERVICE的优点:
1.系统扩展性增强
2.便于集中统一控制
3.屏蔽数据层(安全性)
webservice功能总结:
1.用户的身份认证
?? WEBSERVICE是采用SOAP通讯协议,使用WSDL定义语言,以XML为传输数据格式,SOAP信息包括SOAPHEADER 和 SOAPBODY两个部分。
?? 在项目中,我们也用到了soapheader:
?? public class SecurityHeader :??? System.Web.Services.Protocols.SoapHeader
? {
??? private SecurityInfo _securityinfo;
? //验证信息
??? public SecurityInfo SecurityInfo
??? {
????? get
????? {
??????? return _securityinfo;
????? }
??? }
??? public ClientUserInfo Check()
??? {
????? try
????? {
??????? if (_securityinfo == null)
??????? {
????????? errinfo = "无效的验证信息,错误代码 1001";
????????? return null;
??????? }

??????? //检测缓存中是否存在,并且合法
??????? ClientUserInfo lc_UserInfo = ClientUserInfo.GetClientUserInfo(_securityinfo);
??????? if (lc_UserInfo != null)
??????? {
????????? if (_securityinfo.Seq >= lc_UserInfo.Seq)
????????? {
??????????? lc_UserInfo.Seq = _securityinfo.Seq;
??????????? return lc_UserInfo;
????????? }
????????? else
????????? {
??????????? //直接打回
??????????? errinfo = "无效的验证信息,错误代码 1002";
??????????? return null;
????????? }
??????? }

??????? //到期,或者是新登录
??????? ServerDataAccess lc_da = new ServerDataAccess();
??????? try
??????? {
????????? if (string.IsNullOrEmpty(_securityinfo.UserCode))
????????? {
??????????? errinfo = "没有找到登录信息";
??????????? return null;
????????? }
????????? //检测用户名密码
????????? string lc_SQL = "Select fPassword From T_User Where fUserCode=@UserCode";
????????? DbParameter[] lc_Pam = new DbParameter[1];
????????? lc_Pam[0] = ServerDataAccess.CreateParameter("@UserCode",_securityinfo.UserCode);
????????? string lc_DbPassStr = Convert.ToString(lc_da.GetScalar(lc_SQL,lc_Pam));
????????? if (string.IsNullOrEmpty(lc_DbPassStr))
????????? {
??????????? errinfo = "没有找到该用户";
??????????? return null;
????????? }

????????? byte[] lc_DBPass = Convert.FromBase64String(lc_DbPassStr);
????????? if (!ServerFun.CompDBPass(lc_DBPass,_securityinfo.UserPass,_securityinfo.UserCode))
????????? {
??????????? errinfo = "用户名密码错误";
??????????? return null;
????????? }

????????? lc_UserInfo = ClientUserInfo.Create(_securityinfo);
????????? if (lc_UserInfo == null)
????????? {
??????????? errinfo = "用户验证失败";
??????????? return null;
????????? }

????????? return lc_UserInfo;
??????? }
??????? finally
??????? {
????????? lc_da.Close();
??????? }
????? }
????? catch (Exception exp)
????? {
??????? errinfo = "验证失败,错误原因:" + exp.Message;
??????? return null;
????? }
??? }
???? }
SecurityHeader类作为webservice类的一个属性公开
?
2.数据访问接口
? 在项目中,由于所有的数据都通过WEBSERVICE取得,那么在WEBSERVICE里会定义很多相关的WEBMthod。
[WebMethod,SoapHeader("header")]
? public int QueryToDataSet(int pm_Type,string pm_SQL,byte[] pm_Params,bool pm_NeedCompress,
??? out DataSet pm_DataSet,out string pm_ErrorInfo)
? {
??? pm_DataSet = null;
??? pm_ErrorInfo = string.Empty;
??? ClientUserInfo lc_Info;
??? if (!ClientUserInfo.CheckHeader(header,out lc_Info,out pm_ErrorInfo)) return -100;

??? try ??? { ????? DbParameter[] lc_Params = ServerDataAccess.BufferToDbParameters(pm_Params); ????? pm_DataSet = ServerDataAccess.DoQuery(pm_Type,pm_SQL,lc_Params); ????? pm_ErrorInfo = string.Empty; ????? return 0; ??? } ??? catch (Exception exp) ??? { ????? pm_DataSet = null; ????? pm_ErrorInfo = exp.Message; ????? return -1; ??? } ? }

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读