微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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;     }   }

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐