请教.net高手一个关于WebService中Session的问题。

K0000000r 2015-03-17 11:44:39
我的客户端是一个WinForm程序,在访问WebService的过程中会生成一些数据保存在Session中。
如何实现像浏览器一样,关闭WinForm程序下次打开时还能访问到上一次保存在Session中的数据。
...全文
233 10 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
在你的WinForm程序多次访问WS时可以支持其Session之后,如果要“关闭”了Winform程序再打开,那么你需要将你的实现机制“持久化”。也就是关闭Winform之前保证将它序列化到文件中,下一次打开时反序列化到内存里。这样,服务器端不知道(也不管)你的Winform是否重新启动了,它只要你的每一次请求都按照它需要的唯一会话编号去访问就行了。
於黾 2015-03-17
  • 打赏
  • 举报
回复
如何实现像浏览器一样,关闭WinForm程序下次打开时还能访问到上一次保存在Session中的数据 首先,浏览器根本不是什么winform,而是browser 而且关闭了浏览器,再打开,也根本访问不到session
  • 打赏
  • 举报
回复
可以端 --> 客户端
引用 楼主 K0000000r 的回复:
我的客户端是一个WinForm程序,在访问WebService的过程中会生成一些数据保存在Session中。 如何实现像浏览器一样,关闭WinForm程序下次打开时还能访问到上一次保存在Session中的数据。
另外,你的描述很容易理解为你的WinForm程序访问Session。客户端不可能访问到Session的。 不论是什么Session概念,它都起码要求你客户端给持久化地返回Session的唯一编号。基本上对于基于Http的服务来说,这通常就是从Http消息头中的Cookie中读取。
  • 打赏
  • 举报
回复
不过话要说回来,开发一个服务程序,不要基于Session。要想识别客户端是谁,应该自己设计协议(比如说让你的客户端每一次请求服务时都把第一次访问所返回的授权编号给发回来),不要使用只适合极个别客户端的设计。
  • 打赏
  • 举报
回复
ws的Session和ASP.NET的Session不是一回事情……
  • 打赏
  • 举报
回复
要想在服务器端使用到 Session,你的可以端必须支持 CookieContainer。
K0000000r 2015-03-17
  • 打赏
  • 举报
回复
引用 9 楼 sp1234 的回复:
你到底是想让你的winform访问ws、并且你的服务需要访问Session呢?还是别的什么设计? 如果是别的,具体描述别的需求。 如果只是保存一个唯一的客户端编号,那么就是上面那种就行了(不过一个持久化的客户端编号与一个每一次联网都随机生成的会话号,两个号码联合起来使用,更安全一些)。 证书是考虑到本地有可能被黑客复制、网络有可能被黑客入侵的。你的程序如果值得被黑客入侵了,一是可以选择报警,而是可以选择其它非技术手段。不一定要什么证书。
引用 9 楼 sp1234 的回复:
你到底是想让你的winform访问ws、并且你的服务需要访问Session呢?还是别的什么设计? 如果是别的,具体描述别的需求。 如果只是保存一个唯一的客户端编号,那么就是上面那种就行了(不过一个持久化的客户端编号与一个每一次联网都随机生成的会话号,两个号码联合起来使用,更安全一些)。 证书是考虑到本地有可能被黑客复制、网络有可能被黑客入侵的。你的程序如果值得被黑客入侵了,一是可以选择报警,而是可以选择其它非技术手段。不一定要什么证书。
证书那个,我就是举个例子,意思是我想要那种类似的效果。 谢谢了~
  • 打赏
  • 举报
回复
你到底是想让你的winform访问ws、并且你的服务需要访问Session呢?还是别的什么设计? 如果是别的,具体描述别的需求。 如果只是保存一个唯一的客户端编号,那么就是上面那种就行了(不过一个持久化的客户端编号与一个每一次联网都随机生成的会话号,两个号码联合起来使用,更安全一些)。 证书是考虑到本地有可能被黑客复制、网络有可能被黑客入侵的。你的程序如果值得被黑客入侵了,一是可以选择报警,而是可以选择其它非技术手段。不一定要什么证书。
K0000000r 2015-03-17
  • 打赏
  • 举报
回复
引用 6 楼 sp1234 的回复:
在你的WinForm程序多次访问WS时可以支持其Session之后,如果要“关闭”了Winform程序再打开,那么你需要将你的实现机制“持久化”。也就是关闭Winform之前保证将它序列化到文件中,下一次打开时反序列化到内存里。这样,服务器端不知道(也不管)你的Winform是否重新启动了,它只要你的每一次请求都按照它需要的唯一会话编号去访问就行了。


是这样的,主要是要做一个跟证书申请一样的东西。就是这个玩意:

这个就是你在本机浏览器提交了证书申请,下次打开这个网页还能查询到你申请的信息。别的机器的浏览器是查询不到你申请的信息的。
我看了一下它的VBScript的代码,大致就是用了Session。我想用WinForm做一个类似的。这个是不是跟浏览器的功能啊?
K0000000r 2015-03-17
  • 打赏
  • 举报
回复
引用 6 楼 sp1234 的回复:
在你的WinForm程序多次访问WS时可以支持其Session之后,如果要“关闭”了Winform程序再打开,那么你需要将你的实现机制“持久化”。也就是关闭Winform之前保证将它序列化到文件中,下一次打开时反序列化到内存里。这样,服务器端不知道(也不管)你的Winform是否重新启动了,它只要你的每一次请求都按照它需要的唯一会话编号去访问就行了。
多谢指教

111,094

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • AIGC Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

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