弄了1天半,没弄成功。郁闷死了。asp.net客户端(称作A)就是读不到通过C# webservice (称作B)传过来登录验证 系统(称作C)的session

KAI3000 2006-04-12 01:23:09
首先用户通过登录验证系统 C产生一个Session["c"],
session不是在webservice B里面产生的,

其次B和C在一个web应用程序内,所以理论上B可以直接通过Session["c"]取到值)

我就是想通过Webservice B的GetUserInfo()将Session["c"]传给A,总是不成功。
我直接通过Post方法调用webservice可以显示登录后的xml数据,但是,
A总是取不到值。

A端代码:
-------------------------------
public partial class Test : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
www.eChengs.com.SecurityWebService ws = new www.eChengs.com.SecurityWebService();
CookieContainer cc = new CookieContainer();
ws.CookieContainer = cc;
www.eChengs.com.UserInfo ui = ws.GetUserInfo();
if(ui!=null)
Response.Write(ui.UserName);
}
}
---------------------------
请各位大侠指点。
...全文
425 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
jsjxjb2000 2006-04-13
  • 打赏
  • 举报
回复
你可以在 WS端定义一个自己的类 然后把要得到的信息先保存在 此类中,在客户端通过引用此类,得到你所需要的登录信息。这其中要用到序列化的知识。你不防试试
charles_y 2006-04-13
  • 打赏
  • 举报
回复
『A系统』——Session["A"]---->『Webservice B』———Session["A"]———》『C系统』
-----
你理解的就不对
『A系统』——Session["A"]
这个Session不是属于整个A系统的,而是属于A系统的一个客户端的,或者说属于A系统的一个应用实例所有。

所以Wbservice怎么可能取得A系统产生的Session["A"]呢?
如果能这么乱取的话,系统还有什么安全性而言,当然除非你有办法把这个webservice的一个实例跟这个客户端连接起来,cookiecontainer是一个方法,问题是你想先从ie到这个cookiecontainer并传送给你的ws一个实例。

记住,session 应用是针对一个实例,所以你的ws必须是一个实例,这个实例必须跟你要取session值的那个应用实例(比如一个ie客户端应用)先行挂钩
KAI3000 2006-04-13
  • 打赏
  • 举报
回复
我再说一遍啦:稍后请去看我另外开的总结贴~
-------
『A系统』——Session["A"]---->『Webservice B』———Session["A"]———》『C系统』

-------
从A系统登录,产生Session["A"],Wbservice取得从A系统产生的Session["A"],传给C系统

我意思是说这样的过程似乎不可能实现。


charles_y 2006-04-13
  • 打赏
  • 举报
回复
不明白你的思路是什么。

要取到Session,必须保证客户端的实例是同一个,你怎么能保证你这个webservice的实例跟你在web上运行的客户端实例是同一个?

KAI3000 2006-04-13
  • 打赏
  • 举报
回复
问题还没解决,但我还是先揭帖了。
KAI3000 2006-04-12
  • 打赏
  • 举报
回复
看来在webservice内部产生session才能传递给其他客户端,而在webservice之外的第三方产生的session,webservice可以取到他却似乎没有办法传给其他客户端
KAI3000 2006-04-12
  • 打赏
  • 举报
回复
即便取得到(通过直接调用asmx的方法),也无法传到客户端,客户端没法接受到。代码如下。
--------------------------------
[WebMethod(EnableSession = true, Description = "获得已在大平台上登录的当前用户信息类实例")]
public string GetUserInfo()
{

UserInfo ui = new UserInfo();
ui = Session["UserInfo"] as UserInfo;
return ui.UserName;
}

------------------------------------
public partial class Test : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
www.eChengs.com.SecurityWebService ws = new www.eChengs.com.SecurityWebService();
Response.Write(ws.GetUserInfo());//会报错,说没有取到实例”)
}
}

------------------------------
KAI3000 2006-04-12
  • 打赏
  • 举报
回复
奇怪了啊。
在同一个web程序内,webserviec服务器端似乎不能取到asp.net程序产生的session喔?

难道session必须在webservice里面产生?
charles_y 2006-04-12
  • 打赏
  • 举报
回复
在同一个web程序内(这一点必须保证),应该是能取到值。


CookieContainer cc = new CookieContainer();
ws.CookieContainer = cc;

这两句不能要,不然的话你的webservice里面的session 会被置空。因为这个是可以传递webservice状态的,而你新开了一个空的CookieContainer
真相重于对错 2006-04-12
  • 打赏
  • 举报
回复
UserInfo 定义 ???
mmqingfeng 2006-04-12
  • 打赏
  • 举报
回复
其次B和C在一个web应用程序内,所以理论上B可以直接通过Session["c"]取到值

==========================
确定么?还真没这样用过,
你在 Session["IsLogined"] 这句加断点看看有没有session的值
mmqingfeng 2006-04-12
  • 打赏
  • 举报
回复
感觉webservice似乎有问题,把GetUserInfo()代码贴上来
KAI3000 2006-04-12
  • 打赏
  • 举报
回复
to all:EnableSession我已经设置过。session不是在webservice里面产生的,是在外部产生之后,用webservice来传递的。

[WebMethod(EnableSession = true, Description = "获得已在大平台上登录的当前用户信息类实例")]
public Etrip.Security.MembershipExModel.UserInfo GetUserInfo()
{
//if ((int)Session["IsLogined"] == 1)
//{
return Session["UserInfo"] as UserInfo;
//}
}
KAI3000 2006-04-12
  • 打赏
  • 举报
回复
我把那两行注释了,似乎不行。

session不是在webservice里面产生的,实在外部产生之后,用webservice来传递。

如果是在webservice里面产生的,我就会弄了。

关键是原有系统有一整套的session产生机制,无需也没必要在webservice再弄session生成
真相重于对错 2006-04-12
  • 打赏
  • 举报
回复
[ WebMethod(EnableSession=true) ]
public xxx youwebmethod()
{
}
长江支流 2006-04-12
  • 打赏
  • 举报
回复
不要用Cookie

12,162

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 Web Services
社区管理员
  • Web Services社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧