asp.net

位置:IT落伍者 >> asp.net >> 浏览文章

在asp.net webservice中如何使用session


发布日期:2023年12月06日
 
在asp.net webservice中如何使用session

在使用编写webservice时默认情况下是不支持session的但我们可以把WebMethod的EnableSession选项设为true来显式的打开它请看以下例子

新建网站WebSite

新建web服务WebServiceasmx它具有以下两个方法

C#Code:

[WebMethod(EnableSession = true)]

public string Login(string name)

{

ContextSession[name] = name;

return name;

}

[WebMethod(EnableSession = true)]

public string GetName()

{

if (ContextSession[name] != null)

return ContextSession[name]ToString();

else

return ;

}

添加页面SessionInWebserviceaspx

ASPNETCode:

<form id=form runat=server>

<div>

<asp:TextBox ID=txtName runat=server></asp:TextBox>

<asp:Button ID=btnLogin runat=server

Text=Login OnClick=btnLogin_Click />

</div>

<div>

<asp:Button ID=btnGetName runat=server

Text=GetName OnClick=btnGetName_Click />

<asp:Label ID=lblName runat=server Text=Label></asp:Label>

</div>

</form>

SessionInWebserviceaspxcs

C#Code:

protected void btnLogin_Click(object sender EventArgs e)

{

WebService ws = new WebService();

wsLogin(txtNameText);

}

protected void btnGetName_Click(object sender EventArgs e)

{

WebService ws = new WebService();

lblNameText = wsGetName();

}

问题似乎到此结束了按Login按钮记录用户名以后再按GetName就可以获取到刚才输入的名字

但如果我们另外新建一个website并添加web引用来调用刚才编写的webservice问题就出来了GeName方法并没有获取到我们刚才登录的用户名(如果是在winform中调用该方法也会出现同样的问题)莫非这个方法行不通了?

其实不然我们给该WebService的CookieContainer赋值就可以了修改SessionInWebserviceaspxcs 的代码

C#Code:

private static SystemNetCookieContainer cookieContainer

= new SystemNetCookieContainer();

protected void btnLogin_Click(object sender EventArgs e)

{

localhostWebService ws = new localhostWebService();

wsCookieContainer = cookieContainer;

wsLogin(txtNameText);

}

protected void btnGetName_Click(object sender EventArgs e)

{

localhostWebService ws = new localhostWebService();

wsCookieContainer = cookieContainer;

lblNameText = wsGetName();

}

请注意Login方法和GetName方法必须指定同一个CookieContainer因此在这里我们使用了静态变量

但如果是在不同的页面中调用该webservice问题依旧存在因此我们需要重新修改代码通过编写新类继承上面的webservice并给CookieContainer赋值就可以解决该问题了

C#Code:

public class WebService:localhostWebService

{

private static SystemNetCookieContainer cookieContainer;

static WebService()

{

cookieContainer = new SystemNetCookieContainer();

}

public WebService()

{

thisCookieContainer = cookieContainer;

}

}

调用的时候也不需要重新给CookieContainer赋值了

C#Code:

protected void btnLogin_Click(object sender EventArgs e)

{

WebService ws = new WebService();

wsLogin(txtNameText);

}

protected void btnGetName_Click(object sender EventArgs e)

{

WebService ws = new WebService();

lblNameText = wsGetName();

}

               

上一篇:ASP.NET 2.0中DataTable小兵变大将

下一篇:asp.net 2.0 权限树的控制