2012-07-05 116 views
15

我正在处理自托管的ASP.NET Web API应用程序。 一切工作正常,但现在我挣扎着HttpContextHttpSelfHostServer和HttpContext.Current

我需要保存来自客户端的会话信息。 但HttpContext.Current始终为空。 所以很明显,我的HttpSelfHostServer不适用于静态HttpContext类。

我不明白的是:为什么......? 而我不知道HtttpSelfHostServerHttpSelfHostConfigurationHttpContext一起工作的方式。

下面是我在做什么:

  1. 创建HttpSelfHostConfiguration

    • 1.1添加Service-Resolvers & Routes
    • 1.2添加自定义UserNamePassword-Validator
  2. 创建HttpSelfHostServer的新实例配置

    • 2.1 server.OpenAsync().Wait()

任何帮助,我怎么能告诉我的服务器HttpContext.Current工作是非常感谢! 干杯!

+0

也许需要'AspNetCompatibility':http://stackoverflow.com/questions/5904313/access-httpcontext-current-from-wcf-web-service – mellamokb 2012-07-05 15:43:49

+0

嗨mellamokb。谢谢,但是如果我使用aspNetCompatibelity-Mode,我仍然需要一个IIS,这是我想避免的。 – Richard 2012-07-06 09:42:34

+0

另请注意,我发布的链接中的第二个答案指的是OperationContext中提供的许多相同的信息。你究竟需要从HttpContext中获得什么? – mellamokb 2012-07-06 13:18:28

回答

26

您将无法在自托管环境中使用HttpContext。 HttpContext由ASP.Net管道设置,如果您不在IIS/ASP.Net下运行,则不会有此管道。

HttpContext仅在Web-Hosting模式下可用,其中HttpControllerHandler创建请求。

FYI-我请你阅读佩德罗菲利克斯下面的大文章,以更好地了解不同的主机型号:

10

要解决这个问题(我发现我现在使用很多组件需要在Web API和MVC中同样好),你可以试试这个老的sh即时通讯我写道让你回到一个类似于HttpContext的界面,这两种界面都适用于这两种风格。这是对的NuGet还,这里的源: Link on github (或Link on Nuget

+0

感谢您抽出时间在此发布此信息并发布到Github;我有一个遗留组件,它期望在当前线程的静态变量中浮动,并且即使在SelfHost下,该Shim也会将其提交到提交中。奇迹般有效! – 2015-10-06 13:02:48

+0

你提供的东西看起来很酷。但是,我无法看到它是否支持替换'HttpSession'对象 - 'HttpContext.Current.Session'似乎不可用。你的图书馆是否支持会话状态?如果没有,你能推荐任何方式来获得会话状态替换吗?我可以使用'HttpContext.Current.Items'吗? – 2015-10-17 22:43:51

+0

这不知怎的删除了我的system.web.http 5.2.3.0引用并用4.0.0.0替换它,从它得到大量的构建错误 – 2017-09-20 06:44:34

相关问题