Как я могу инициировать текущий httpcontext при доступе к библиотеке asp.net из службы? - PullRequest
0 голосов
/ 27 июля 2011

У меня есть проект asp.net, который скомпилирован на сервере. На этом же сервере у меня есть служба Windows, которая запускает методы, на которые ссылается asp.net .dll.

Все работает нормально, за исключением случаев, когда необходимо получить доступ к объекту httpcontext.current.

Я вполне уверен, что причина того, что .current имеет значение null, заключается в том, что он ссылается на общую библиотеку без фактического экземпляра работающего сайта. В предыдущей версии сервиса я мог найти обходной путь в asp.net, не используя контекст, однако теперь это последнее средство, так как большая часть архитектуры сайта изменилась.

Можно ли в любом случае создать экземпляр сайта и смоделировать текущий httpcontext для целей службы?

Ответы [ 2 ]

1 голос
/ 27 июля 2011

Фреймворк ASP.NET создает экземпляр HTTP-контекста и управляет им, а вне ASP.NET это всегда будет нулевым. Вы должны были бы покопаться в фреймворке, чтобы понять, как его создать, но, честно говоря, оно того не стоит ...

Однако, не могли бы вы перенастроить ваши ссылки HttpContext, чтобы они указывали на HTTpcontextbase? Если вы это сделали, HttpContextBase является базовым классом и может быть унаследован любым. Очень легко, вы можете создать собственный, чтобы достичь того, что вы хотите. Вы даже можете создать свой собственный статический объект, чтобы обернуть HttpContext.Current, сослаться на этот статический объект в приложении и на этот статический объект в сервисе (но сначала сервис должен создать его экземпляр).

НТН.

0 голосов
/ 27 июля 2011

Не из службы Windows.Я думаю, что правильный способ сделать это - создать веб-сервис, который обрабатывает все, что вам нужно для asp.net, и вызвать этот веб-сервис из вашей службы Windows.

Кроме того, если вы публикуете часть кода, который полагаетсяна httpcontext.current возможно найти альтернативы (при условии, что они действительно не полагаются на действия запрос / ответ).

...