[原创] .net webservice 登录后 才可以访问其它的方法 2种方法

1.使用SoapHeader

1)定义一个类

public class WSSoapHeader : System.Web.Services.Protocols.SoapHeader
   {
       private string _userName;

       public string UserName
       {
           get { return _userName; }
           set { _userName = value; }
       }

       private string _password;

       public string Password
       {
           get { return _password; }
           set { _password = value; }
       }
   }

2)Webservice文件

public class WebserviceDemo : System.Web.Services.WebService

{

     public WSSoapHeader myHeader = new WSSoapHeader();

    

     [WebMethod]

     [System.Web.Services.Protocols.SoapHeader("myHeader")]

     public string Helloword()

     {

            if (!(myHeader.UserName == “user” && myHeader.Password == “123”))
            {
                return "login false";
            }

     }

}

这个方法,  对于.net客户端调用, 没什么问题, 对于其它语言的, 那就不知道了....

2. 自己想的办法, 不知道怎么样. 随便说来.

基本的思想是: 如果登录成功的话,  保存客户端的IP(这里可以用MAC什么的都可以, 只要是客户端唯一标记就可以了)到Cache里(Cache可以放用户名,密码什么的都可以).
面的Action里去读取Cache里是否有指定的IP的信息. 如果有就是登录成功,如果没有就是没有登录. 
调用完Action可以把Cache里的这个Key为该IP的删除, 这样就可以防止一次登录就一直连接.

(想: 这里也可以给Cache设置一个过期时间. 这样一次登录后面就可以不用再调用登录接口了, 可能会出现接口调用一半又不能用了. 所有还是觉得每次都要登录一下.)

[WebMethod]
public string CheckLogin(string username, string pwd)
{
    if (username == "123" && pwd == "123")
    {
        string ip = GetUserIP();

        CCD.WebCache.Insert(ip, Guid.NewGuid().ToString());

        return ip;
    }
    else
    {
        return "login fail.";
    }
}

public string GetUserIP()
{
    string userIP;
    if (HttpContext.Current.Request.ServerVariables["HTTP_VIA"] == null)
    {
        userIP = HttpContext.Current.Request.UserHostAddress;
    }
    else
    {
        userIP = HttpContext.Current.Request.ServerVariables["HTTP_X_FORWARDED_FOR"];
    }
    return userIP;
}

[WebMethod]
        public string Action()
        {
            if (CCD.WebCache.Get(GetUserIP()).ToString()!="")
            {
                CCD.WebCache.Remove(GetUserIP());
                return "登录成功";
            }
            else
            {
                return "登录失败";
            }
        }

个人觉得 用这种方法 比较好一些 , 什么语言都可以这样的思想来开发,  什么语言调用的时候也没有障碍.

有哪里不对的请大家多多指点, 谈论, 谢谢.

原文地址:https://www.cnblogs.com/chencidi/p/2251961.html