【问题标题】:How can I initiate the current httpcontext when accessing an asp.net library from a service?从服务访问 asp.net 库时,如何启动当前的 httpcontext?
【发布时间】:2011-07-27 17:45:32
【问题描述】:

我有一个在服务器上编译的 asp.net 项目。在同一台服务器上,我有一个运行从 asp.net .dll 引用的方法的 Windows 服务。

除了需要访问 httpcontext.current 对象外,一切正常。

我相当肯定 .current 为 null 的原因是它引用了共享库而没有运行站点的实际实例。在该服务的先前版本中,我能够通过不使用上下文在 asp.net 中找到解决方法,但现在这是最后的手段,因为网站的大部分架构都发生了变化。

为了服务的目的,是否有创建站点的实例并模拟当前的 httpcontext?

【问题讨论】:

  • 没有HttpContext,因为你不在http上下文中。没有持续的请求和响应,就 Windows 服务而言,您甚至没有网站。您希望它如何工作?

标签: .net asp.net vb.net httpcontext


【解决方案1】:

ASP.NET 框架在 ASP.NET 之外实例化和管理 HTTP 上下文,这将始终为空。您必须深入研究框架才能弄清楚如何创建它,但老实说,这不值得......

但是,您能否重新配置您的 HttpContext 引用以指向 HTTpcontextbase?如果你这样做了,HttpContextBase 是一个基类,任何人都可以继承。很容易,您可以创建一个自定义的来实现您想要的。您甚至可以创建自己的静态来包装 HttpContext.Current,在应用中引用此静态,并在服务中引用此静态(但让服务首先实例化它)。

HTH。

【讨论】:

  • 感谢您的意见。我正在考虑将 web 服务添加到 asp.net 项目并尝试以这种方式提取数据。这是您可能推荐的东西吗?
  • HttpContext.Current 可用于 Web 请求,所以可以。我的解决方案是,如果您没有其他选择并且需要离线做某事。像@Patricker 建议的那样使用网络服务是可行的。
  • 好的,我最终添加了一个 Web 服务,一切顺利。谢谢。
【解决方案2】:

不是来自 Windows 服务。我认为正确的方法是创建一个 Web 服务来处理您需要 asp.net 的任何内容,并从您的 Windows 服务中调用该 Web 服务。

此外,如果您发布一些依赖于 httpcontext.current 的代码,则可能会找到替代方案(假设它们确实不依赖于请求/响应操作)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-09-23
    • 2013-10-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多