【问题标题】:Keep an object for the time the connection is running in ASP.NET在 ASP.NET 中运行连接时保留一个对象
【发布时间】:2010-04-21 13:33:04
【问题描述】:

我正在使用 ASP.NET 开发 Web 服务,它不是 .asmx 或 WCF,它是自定义的,所以我正在使用 Http 类(上下文、请求、响应等)。会话被禁用。我正在使用我自己的处理程序和模块。

我想在连接有效期间保持对象的活动和可访问性。我的意思是,一个请求进入,我给它分配了一个 DbCommand 并且该连接将使用该命令,只要正在执行操作,当该连接结束时,该对象应该被释放。

我想,我可以将它添加到我的 IPrincipal 实现中,然后当在模块中对连接进行身份验证并检索到用户时,我可以将该 DbCommand 添加到 IPrincipal,这样我就可以从任何我想要的地方检索它在代码中,在模块 EndRequest 事件之后,我可以处理它,但我不知道是否有更好的方法来做到这一点。

你怎么看?

干杯

【问题讨论】:

    标签: .net asp.net httpmodule lifecycle iprincipal


    【解决方案1】:

    这在一定程度上取决于您的 WCF 配置。

    我建议你阅读这篇文章,因为它可能会让你对你想要采取的方向有所了解。 http://msdn.microsoft.com/en-us/magazine/cc163590.aspx

    您的客户将如何连接到服务?

    您还可以在服务上使用单例模式(因此它及其数据在“会话”中持续存在)并基于每个用户将数据存储在服务对象本身中。

    【讨论】:

    • 这不是 WCF。客户端通过一个简单的 WebRequest 进行连接。我要避免的是为此保留一个集合,因为那时我必须同步访问和添加/删除。例如,我只想将一个对象粘贴到 HttpConext 或 HttpRequest 上,但我不知道在哪里。干杯。
    • 啊,我看错了问题!我道歉。那么你最好的选择(恕我直言)就是缓存。您不需要使用缓存中的集合来存储对象,并且可以依赖用户特定的数据作为键来检索他们的对象。
    • 但是缓存会在连接之间持续存在,不是吗?我想保留它只是为了连接时间。
    • 是的。没有办法(除了捕获窗口关闭事件并向服务器发送请求)知道客户端已经关闭了他们的窗口。即使捕获窗口关闭事件也不完美,因为计算机可能会随机关闭或浏览器任务结束。或者只是浏览器可能不会发送关闭页面的请求。
    • 这不是一个网页,是一个网络服务:D 我想我会按照我之前的计划去做,也许不是那么糟糕:P
    猜你喜欢
    • 2019-01-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-23
    • 2019-05-06
    • 1970-01-01
    相关资源
    最近更新 更多