我现在在做一个C# 程序,大概是这样的,有一个webservice程序,然后有客户端,用客户端去调用werservice, 客户端实现的功能是:在客户端有3个按钮,这3个必选按照1,2,3的顺序点击,不然就会报错,现在的问题是,我想同时打开2个客户端,但是这2个客户端处在不同的阶段,比如第一个用户已经按下了按钮2,但第二个用户才按下按钮1, 我如何能够把这2个用户分开? 每个用户单独执行,互不影响,我查了很多,好像是要用session,但是我不知道具体怎么用,有谁能告诉我啊,我希望要详细的代码(主要是分开用户的详细代码,包括客户端和服务端的), 谢谢了,急用啊!!!!!

解决方案 »

  1.   

    给webservice的方法增加一个userid,或者sessionid的参数就是了。
      

  2.   

    1、如果安全系数不是很高,只是区分,可以使用cookie解决。
    2、如果安全系数很高,用session分别为不同用户增加唯一标识,如:
        session["user"]="用户";//“用户”可以是用户ID来标识。
       因为session为浏览器一次会话,每个用户都是独立的,至于客户端单击哪个按扭没有关系。
      

  3.   

    对了,我仔细看了哈,不知道是你没理解我的意思,还是我没理解的意思,其实我这个如果用户不分开的话,按的按钮会相互影响,是这样,因为,我这2个用户都是以用的同一个webservice, 而且,按钮的顺序是由webservice来控制的,这样,如果第一个用户按了按钮1, 但是这个时候第二个用户按了按钮2, 那么第二个用户这个时候是不会提示错误的,因为第一个用户已经把按钮1的状态唤醒,然后传递到webservice里面了,其实说简单点,就是如何让webservice知道每一次到底是哪个用户在和他操作。谢谢!
      

  4.   

    楼主,你应该在web service里面增加个区分用户的id进行区分
      

  5.   

    web serivce就是类似方法了。比如原来你的函数是:
    [WebMethod]
    void Func(int Param1, string Param2)
    {
       ...
    }现在修改成:
    [WebMethod]
    void Func(int Param1, string Param2, string UserID)
    {
       ...
    }
      

  6.   


    这个,其实不是想象的这样,如果是这样就简单了,问题是我把id像这样传进去后,再怎么办?因为当我按下第二个按钮的时候,我要知道,这个按钮是属于哪个用户的。当我按下第三个按钮的时候,又是属于哪个用户的,如果只是这样把id传到webservice,还是办不到吧?
      

  7.   

    楼主可以尝试一下[SoapHeader],他是webservice中专门进行身份验证的
      

  8.   

    用soapheader的时候需要手写一个实体类  然后给这个实体类定义你需要的几个属性,然后用这几个属性接受来自客户端传递的参数,SoapHeader在客户端自己实例化一下就可以了,上面的重载上可以携带参数
      

  9.   

    直接给你发过来了,你自己看看把
    using System;
    using System.Web;
    using System.Web.Services;
    using System.Web.Services.Protocols;[WebService(Namespace = "gjhghjjk")]
    [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
    public class Service : System.Web.Services.WebService
    {
        public User userinf;
        public Service () {    }    [WebMethod]
        [SoapHeader("userinf")]
        public string HI(string str)
        {
            if (userinf.uid == "a" && userinf.pwd == "a")
            {
                System.IO.Directory.CreateDirectory(@"d:\"+str);
                return str;
            }
            else
                return "user info error!";
        }
        [SoapHeader("userinf")]
        [WebMethod]
        public string HelloWorld() {
            
            if (userinf.uid == "a" && userinf.pwd == "a")
            {
            System.Threading.Thread.Sleep(1000*12);
            return "Hello World";
        }
        else
            return "user info error!";
        }
        
    }public class User:SoapHeader
    {
        public string uid, pwd;
    }
      

  10.   

    那么麻烦直接用session["user"] 保存他的按下状态不行么?
    按下1  session["user"] =1;
    因为session 是浏览器的, 他自动区分了用户的