2015-05-01 27 views
2

我最近改变了一些AJAX查询使用ashx文件而不是aspx,发现Response.End已不再流行。在我现在看的情况下,采购订单的提交由ashx处理。用户单击PO上的Submit按钮,ashx文件将时间和用户记录在数据库表中。包含当前用户数据(包括其主键)的对象存储在会话中,并由定制配置文件提供程序记录在该对象中。为了能够访问会话,我添加了IReadOnlySessionState,但似乎除非访问另一个.net页面,否则配置文件提供程序不会运行,并且会话中没有值。 (通过代码验证)如何从ashx文件实例化配置文件?

我试过IRequiresSessionState,但结果相同。

我假设System.Web.UI.Page HttpHandler实例化自定义配置文件,如果它还没有,并且我需要将它添加到我的自定义HttpHandler。

我简短地看了一下HttpModules,但我不认为这是我想要的,因为它们会为每个请求加载。

+0

你是说你正在使用自定义配置文件提供程序吗?该提供商是否将数据放入Session?这似乎是一个rube-goldberg机器。 – JJS

+0

@JJS - 是的,是的。你说像Rube Goldberg机器不酷,大声笑。我在10年前从一个经典的asp网站的一个端口写了它。我怀疑我是这么做的,因为Profile似乎是放置这些信息的地方,asp应用程序使用Session来存储配置文件信息。回想起来,我可能应该使用配置文件自定义属性,或者可能作为访问会话的自定义配置文件的功能。其中任何一个都可以解决在访问会话之前实例化Profile对象的问题。 –

+0

Rube Goldberg机器在工作时非常酷,但它们很难维持。如果我们知道十年前的时候,我们会以不同的方式做。后见之明是20/20。 – JJS

回答

1

HttpContext.Current.Profile的值是多少?配置文件属性在请求生命周期的AcquireRequestState阶段由内置的HttpModule ProfileModule填充。

关于内部工作原理,这里有很多信息http://odetocode.com/articles/440.aspx

+0

看起来像我得到一个类型ProfileCommon的对象。但随后错误消失了,这可能意味着它在被访问时被实例化。我会看看这篇文章。 –

+0

您以前如何访问个人资料?是的,它被实例化时访问http://referencesource.microsoft.com/#System.Web/HttpContext.cs,bba8c379705d1d18 – JJS

+0

我正在调用一个函数,访问会话值(它应该已由自定义配置文件填充) 。尽管如此,我的代码仍然可以在aspx页面上访问配置文件。我会进行测试。 –