服务器,webservice,winform客户端他们三者之间的通信过程。是服务器直接将数据发送给winform客户端,还是服务器将数据发送给webservice后,webservice将数据库发送给客户端啊,通信的过程中有没有办法加密。能给出好的例子的我追加100分,本人目前325分。说道做到。

解决方案 »

  1.   

    webservice,你可把它看成是一组数据交换接口规范.客户端(winform)通过它与服务器交换数据.所以很显示,数据是要经过webservice的.------------
    店家乐服装店管理软件,[服装店销售软件,服装收银软件,店家乐服装销售管理软件]_http://www.djlsoft.net
      

  2.   

    你可以查一下SoapExtension类的资料,可以自定义完成如身份验证、数据压缩、数据加密等
      

  3.   

    在webservice准备数据时,可以进行加密、压缩等
      

  4.   


    using System;
    using System.Collections;
    using System.ComponentModel;
    using System.Data;
    using System.Web;
    using System.Web.Services;
    using System.Web.Services.Protocols;
    using whims.common;namespace DTService
    {
        /// <summary>
        /// Service1 的摘要说明
        /// </summary>
        [WebService(Namespace = "http://tempuri.org/")]
        [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
        [ToolboxItem(false)]
        // 若要允许使用 ASP.NET AJAX 从脚本中调用此 Web 服务,请取消对下行的注释。
         //[System.Web.Script.Services.ScriptService]
        public class OraService : System.Web.Services.WebService
        {
            /// <summary>
            ///  实例数据集
            /// </summary>
            //public DataSet ds = new DataSet();
            public OraService()
            {
                //PubConstant.myConnectionString =
                //   System.Configuration.ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString;
            }
            [WebMethod]
            public string HelloWorld()
            {
                return "Hello World";
            }
            /// <summary>
            ///   返回数据集
            /// </summary>
            /// <param name="str"></param>
            /// <returns></returns>
            [WebMethod]
            public DataSet GetDataList(string str)
            {
                try
                {
                    return DbHelperSQL.Query(str);
                }
                catch (Exception ex)
                {
                    throw ex;
                }
            }
            /// <summary>
            ///   返回数据集
            /// </summary>
            /// <param name="str"></param>
            /// <returns></returns>
            [WebMethod]
            public void ExecuteTran(ArrayList arrSqlList)
            {
                try
                {
                    DbHelperSQL.ExecuteSqlTran1(arrSqlList);
                }
                catch
                {
                    throw new ArgumentNullException();
                }
            }
            /// <summary>
            ///   创建id
            /// </summary>
            /// <param name="str"></param>
            /// <returns></returns>
            [WebMethod]
            public string CreateID(string TableName, string Prefix, int StartID)
            {
                try
                {
                    return CommonWhsell.CreateID(TableName, Prefix, StartID);
                }
                catch (Exception ex)
                {
                    throw ex;
                }
            }
            /// <summary>
            /// 执行一个查询结果,如果响应的行数大于0,执行一个Update,否则执行一个Insert
            /// </summary>
            /// <param name="Selectstr">查询语句</param>
            /// <param name="Insertstr">插入语句</param>
            /// <param name="Updatestr">更新语句</param>
            /// <returns></returns>
            [WebMethod]
            public int DoRecordIn(string Selectstr, string Insertstr, string Updatestr)
            {
                int xnum = 0;
                try
                {
                    if (DbHelperSQL.Query(Selectstr).Tables[0].Rows.Count > 0)
                    {
                        DbHelperSQL.Query(Updatestr);
                        xnum = 1;
                    }
                    else
                    {
                        DbHelperSQL.Query(Insertstr);
                        xnum = 2;
                    }
                }
                catch //(System.Exception ex)
                {
                    //throw ex;
                    return xnum = 3;
                }
                return xnum;
            }
            /// <summary>
            /// 返回第一行第一列的值
            /// </summary>
            /// <param name="SQLString"></param>
            /// <returns></returns>
            [WebMethod]
            public object GetSingle(string str)
            {
                try
                {
                    object Res = DbHelperSQL.GetSingle(str);
                    return Res;            }
                catch (System.Exception ex)
                {
                    throw ex;
                }
            }
            /// <summary>
            /// 执行增,删,改操作
            /// </summary>
            /// <param name="sql"></param>
            /// <returns></returns>
            [WebMethod]
            public int OperateSql(string str)
            {
                try
                {
                    int Res = DbHelperSQL.ExecuteSql(str);
                    return Res;
                }
                catch (System.Exception ex)
                {
                    throw ex;
                }
            }
            /// <summary>
            /// 执行增,删,改操作--针对Oracle数据库
            /// </summary>
            /// <param name="sql"></param>
            /// <returns></returns>
           // [WebMethod]
            //public int OperateParamsSql(string str, params CommonParameter[] cmdParams)
            //{
            //    return DbHelperSQL.ExecuteSql(str, cmdParams);
            //}
            /// <summary>
            /// 根据表名,字段和所属组织结构得到该表新的ID
            /// ID=组织结构对应码+表标识+5位自增码;组织结构对应码可以在表JC_SYSINFO中根据组织结构编号获取,表标识可以根据表名在数据字典中获取。
            /// 如1YG90001就是采油一厂组织结构表
            /// </summary>
            /// <param name="TblName">所要产生ID表名</param>
            /// <param name="ColName">所要产生ID字段名</param>
            /// <param name="OrgID">组织结构代码,用来获取组织结构对应码</param>
            /// <returns></returns>
            //public string GetID(string TblName,string ColName,string OrgID)
            //{
            //    try
            //    {
            //        string MaxID="";
            //        string returnNum = "";
            //        string strsql = "select max(" + ColName + ") from  " + TblName + " where substr(" + ColName + ",1,1)='" + GetUserSign(OrgID) + "' and substr(" + ColName + ",2,2)='" + GetTableSign(TblName) + "' ";
            //        object obj = GetSingle(strsql);
            //        if ((Object.Equals(obj, null)) || (Object.Equals(obj, System.DBNull.Value)))
            //        {
            //            MaxID = "00001";
            //        }
            //        else
            //        {                    
            //            ////取编号中的后五位并根据这五位获得新的值。
            //            MaxID = obj.ToString().Substring(3,5);
            //            MaxID = GetMaxID(MaxID);
            //            ////如果最大值长度不等于5则自动补齐5位。
            //            //if (MaxID.Length < 5)
            //            //{
            //            //    while (MaxID.Length < 5)
            //            //    {
            //            //        MaxID = "0"+MaxID;
            //            //    }
            //            //}
            //            ////如果5位的数字已经到99999则从第一位开始用字母如A0001        //        }
            //        returnNum = GetUserSign(OrgID) + GetTableSign(TblName) + MaxID;
            //        return returnNum;
            //    }
            //    catch (Exception ex)
            //    {
            //       throw ex; 
            //    }
            //}        /// <summary>
            /// 编码规则:从最后一位开始赋值,取值范围从0到Z。如果最后一位到Z则从上一位开始。
            /// 比如目前编号0000Z则新产生的编号就是0001Z;目前编号为0000A则新产生的编号为0000B
            /// </summary>
            /// <param name="tMaxID">当前的最大值</param>
            /// <returns></returns>
            //private string GetMaxID(string tMaxID)
            //{
            //    string tTemp = "00000";
            //    string tMaxID1 = "00001";
            //    int sCount = 0;//存储当前有几位字符已经满值即是Z。
            //    char[] sMaxSign = new char[] { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z' };
            //    for (int i = 5; i > 0; i--)
            //    {
            //        //如果当前字符是数组最后一位则从下一字符开始。
            //        if (tMaxID.Substring(i - 1, 1) == sMaxSign[35].ToString())
            //        {
            //            sCount++;
            //            tMaxID = tMaxID.Substring(0, i - 1) + "0";
            //        }
            //        else
            //        {
            //            for (int j = 0; j < 36; j++)
            //            {
            //                //如果当前字符与数组中的字符相同则得到该值并被数组中的下一个值代替。
            //                if (tMaxID.Substring(i - 1, 1) == sMaxSign[j].ToString())
            //                {
            //                    tMaxID1 = tMaxID.Substring(0, i - 1).ToString() + sMaxSign[j + 1].ToString() + tTemp.Substring(0, sCount).ToString();                            
            //                    return tMaxID1;
            //                }
            //            }
            //        }
            //    }
            //    return tMaxID1;
            //}        ///// <summary>
            ///// 执行存储过程,返回影响的行数  System.Data.OracleClient.OracleParameter
            ///// </summary>
            ///// <param name="storedProcName">存储过程名</param>
            ///// <param name="parameters">存储过程参数</param>
            ///// <param name="rowsAffected">影响的行数</param>
            ///// <returns></returns>
            //[WebMethod]
            //public int RunProcedure(string storedProcName, System.Data.OracleClient.OracleParameter[] parameters, out int rowsAffected)
            //{
            //    return DbHelperSQL.RunProcedure(storedProcName, parameters, out rowsAffected);
            //}    }
    }
      

  5.   

    using System;
    using System.Collections.Generic;using System.Text;
    using System.Security.Cryptography;namespace whims.common
    {
        public class Md5Encrypt
        {
            public Md5Encrypt()
            {
            }
            /// <summary>
            /// 将明文进行哈希处理,返回16进制字符串
            /// </summary>
            /// <param name="plainText"></param>
            /// <returns></returns>
            public static string Encrypt(string plainText)
            {
                MD5CryptoServiceProvider md5 = new MD5CryptoServiceProvider();
                byte[] fromData = System.Text.Encoding.Unicode.GetBytes(plainText);
                byte[] targetData = md5.ComputeHash(fromData);
                string t2 = BitConverter.ToString(targetData);
                t2 = t2.Replace("-", "");
                return t2;
            }
        }
    }