[原创] .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 "登录失败";
}
}
个人觉得 用这种方法 比较好一些 , 什么语言都可以这样的思想来开发, 什么语言调用的时候也没有障碍.
有哪里不对的请大家多多指点, 谈论, 谢谢.