2015-05-01 31 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頁面上訪問配置文件。我會進行測試。 –