例如一个WebServices里面一个方法Test()被两个不同的用户调用,用户1调用了一次Test(),然后Test()又被调用了一次,这时怎么判断是用户1还是用户2调用的?

解决方案 »

  1.   

    http://blog.csdn.net/lhsxsh/archive/2008/11/01/3199911.aspx不过建议直接给方法增加一个user的参数。
      

  2.   

    1可以给 test()方法启用 sesson.通过 sesson来判
      

  3.   

     [WebMethod(EnableSession=true)]
            public string test()
            {
                if (this.Context.Session["userid"] == "u1")
                {
                    return "user is u1";
                }        }
      

  4.   

    如果问题仅仅是给出webservice,没有给出非常特别的使用环境,那么随便设置开启Session只是理论上的一种说法而已。不是不可以开启,是开启了往往什么用也没有,因为大多数web service客户端应用环境人家根本就不支持服务器端所需要提供Session环境。比较独立的方法,是为功能增加一个passport_id参数(只要是一个long型)就可以了。客户端首先要到服务器端注册一个passport,领取了这个passport_id之后在需要验证身份的通信时提供这个id号,服务器端根据这个id号就知道谁在跟自己通话了。
      

  5.   

    具体地说,把你的void Test()改为void Test(long passportID),就可以。之后增加一个方法例如: long RegisterPassport(string userName,string password,string email,decimal price)之类的方法(到底在注册时需要提交哪些参数,你自己指定),它返回一个passportID即可。这样,任何受到了PassportID的方法都知道是谁再请求操作。
      

  6.   

    顶,这相当于用了票证。System.Web.Security.FormsAuthenticationTicket
      

  7.   

    “相当于”似乎关系不大了。因为你要给出自己对于web service通用环境的一个前提分析,你不知道客户端可以支持或者被强迫支持那个东西时,设计出来的架构就最好不要带上那个额外的条件,而要非常清楚并且可以被任何客户端机制简单地用一两个代码就实现。
      

  8.   

    sp1234这个贴的分已经给你了,能不能再帮我看一下下面这个问题,谢谢,如果问题解决也马上给分
    http://topic.csdn.net/u/20100425/11/e91e6b83-e1b1-4a0f-af4d-64f105f2812b.html