web service验证问题
请教:
现在用c#客户端请求服务(windows应用程序),使用session登陆
设置了public System.Net.CookieContainer对象保存session的id
在同一服务页面(asmx)可以取回设置的session
但是在请求第二个服务页面的时候怎么也取回不了session
而且用cook.Count属性取回的数量cook有2个,不知怎么解决
(使用ie测试服务的时候可以取回session值)
大家一定要帮忙啊!
问题点数:100、回复次数:7Top
1 楼Tomgus(小桥流水)回复于 2004-12-04 17:17:43 得分 50
因为SESSION是跟会话有关的。
在使用浏览器进行WEBSERVICE访问时,浏览器会自动的把对应的SESSION数据提交到WEBSERVICE,这样WEBSERVICE就有机会获得上次调用时的SESSION值了。
而在WINDOWS应用中,一般的应用是不具备上传SESSION的功能的,所以会出现你说的问题。
解决:
1——
有一个办法在请求的时候,把SESSION内容一起附带进去,但要实现低层的SOCKET开发
2——
把SESSION传递给WEBSERVICE,自己解析SESSION加密的数据(应该有这样的方法,但我不知道)
3——
把SESSION放到数据库中或别的地方而不使用COOKIE看WIN应用能否提交一致的SESSIONID
4——
在WIN应用中不要使用两步走的方法,而是一步到位:
同时把Login数据和GetSearchResult一起提交,由WebService执行时先执行LOGIN后执行GetSearchResult实现。
当然,这个处理方法需要对LOGIN信息进行加密处理。
5——
当访问WEBSERVICE的时候,创建一个GUID,每次都把这个GUID进行来回传输,通过GUID来识别有效性。但要设置好GUID值的有效期,特别是访问连接信息,否则很步安全Top
2 楼Tomgus(小桥流水)回复于 2004-12-04 17:19:13 得分 50
ASP.NET都把session的ID放在session cookie里(asp.net_sessionID),然后夹在response中发送到客户端; 客户端在发送request时候也会把这个sessionid附带送到server, server收到session的信息之后会将其放在session collection用于以后的交流.
所以, 客户端没有cookieContainer是不行地:)
Top
3 楼Tomgus(小桥流水)回复于 2004-12-04 17:19:28 得分 0
客户机上 你必须为你的 WebServie设置好 CookieContainer 才能够为WebServie 保存状态。
CookieContainer cookieJar;
MyService myService= new localhost.MyService();
MyService.CookieContainer = cookieJar;
而且如果你要在多次调用之间保持状态的话 你必须保证你的CookieContainer 是唯一的。
Top
4 楼dengmain(军火)回复于 2004-12-04 17:38:25 得分 0
问题是一个服务文件可以实现session的传递,而在第二个服务文件中就不能回传了(两个服务文件在同一个虚拟目录中,同一个命名空间,而且使用服务的ie测试页面session可以成功传递)
只要就是怎样使两个服务文件使用同一个CookieContainer ,现在Net.CookieContainer把两个服务的CookieContainer分开存放了.Top
5 楼dengmain(军火)回复于 2004-12-04 17:52:52 得分 0
谁知道啊!帮帮忙啊!Top
6 楼Tomgus(小桥流水)回复于 2004-12-04 22:54:47 得分 0
可以把CookieContainer做成全局static 变量Top
7 楼wangxt(海贝)回复于 2004-12-06 08:33:41 得分 0
帮你顶Top




