2015-05-01 9 views
2

Недавно я переключил некоторые запросы AJAX на использование файлов ashx вместо aspx, обнаружив, что Response.End больше не в моде. В случае, когда я смотрю сейчас, представление заказа на поставку обрабатывается ashx. Пользователь нажимает кнопку «Отправить» на PO, а файл ashx записывает время и пользователя в таблицу базы данных. Объект с данными текущего пользователя (включая их первичный ключ) сохраняется в сеансе и записывается там с помощью настраиваемого поставщика профилей. Я добавил IReadOnlySessionState, чтобы иметь возможность доступа к сеансу, но, похоже, что если другая страница .net не была доступна, поставщик профиля не запускается, а сеанс не имеет значений. (проверено путем перехода по коду.)Как создать экземпляр профиля из файла ashx?

Я пробовал IRequiresSessionState, но те же результаты.

Я предполагаю, что HttpHandler System.Web.UI.Page HttpHandler создает экземпляр настраиваемого профиля, если он еще не был и что мне нужно будет добавить его в свой пользовательский HttpHandler.

Я кратко посмотрел на HttpModules, но я не думаю, что это то, что я хочу, потому что они загружаются для каждого запроса.

+0

Вы утверждаете, что используете собственный поставщик профилей? Предоставляет ли этот провайдер данные в Session ?! Это похоже на машину rube-goldberg. – JJS

+0

@JJS - да и да. Вы говорите, что, как машины Rube Goldberg, это не круто, LOL. Я написал это, может быть, 10 лет назад во время порта с классического сайта asp. Я подозреваю, что сделал это так, потому что «Профиль» оказался местом для размещения этой информации, а приложение asp использовало Session для хранения информации о профиле. В ретроспективе я, вероятно, должен был использовать пользовательские свойства профиля или, возможно, как функцию в пользовательском профиле, который обращался к сеансу. Любой из них может решить проблему создания объекта Profile перед доступом к сеансу. –

+0

Машины Rube Goldberg Очень здорово, когда они работают, но это боль для поддержания. Если бы мы знали сегодня, когда знали 10 лет назад, мы бы сделали это по-другому. Оглядываясь назад, 20/20. – JJS

ответ

1

Какая ценность HttpContext.Current.Profile? Свойство 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 раньше всего. Я проведу тест. –