我目前正在进行的项目涉及使用 session 变量的 MS SQL Server 和 ASP.net Web 服务。显然,这会导致客户端的调用以顺序方式执行。我想确保这些方法异步执行。
经过一些研究后,在我看来,最好的方法是使用跟踪 session 的表(例如使用 guid )和每个 session 的单独表将 session 状态保留在数据库中。
在直接深入探讨此问题之前,我需要知道如果我配置 SQL Server 来存储 session ,是否可以获得与 Web 服务相同的异步操作感觉。
可以吗?
最佳答案
很遗憾地说,异步执行代码和使用 session 变量的唯一方法是创建完全自定义的 session 解决方案 - 我的意思是完全自定义并完全禁用 ASP.NET session 。
进行 session 的基本技巧:
- 您有一个与用户数据相关的 Cookie
- 数据位于数据库的一张表中。
- 您可以在该表上为每个 session 创建自定义字段,并避免使用字典<>来保留它们
- 您使用脏读,最后写入获胜
- 您每次只读取和写入需要的 session 变量(而不是一起读取和写入)
- 每一行都有一个超时日期,并像 MS 一样使用 SQL 上的调度程序来删除旧 session 。
- 在
OnPreInit
上加载 session ,仅保存OnUnload
上更改的内容 - 通过完全禁用 session ,您需要使用
Mutex
代码进行锁定,该代码现在可以正常工作,因为 session 在不通知的情况下进行同步,但如果没有 session 锁定,则可能会执行两次,例如新的插入到数据库调用。
亲戚:
Web app blocked while processing another web app on sharing same session
What perfmon counters are useful for identifying ASP.NET bottlenecks?
Replacing ASP.Net's session entirely
回答这个问题如果我配置 SQL Server 来存储 session ?
session 仍然处于锁定状态并阻止其余请求。如果您在 SQL Server 或其他介质上有 session ,则不会改变工作方式,只会改变保存数据的位置。
关于asp.net - 尝试使 Web 方法异步,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11325150/