IIS7 & Castle.MicroKernel.Lifestyle.PerWebRequestLifestyleModule registering problems

Asked
Viewd6055

5

UPDATE:

In Windsor 2.5 the assembly name is Castle.Windsor not Castle.MicroKernel


I'm trying to deploy an ASP.NET MVC app to IIS7 and I'm getting this error:

Looks like you forgot to register the http module Castle.MicroKernel.Lifestyle.PerWebRequestLifestyleModule Add '' to the section on your web.config

My httpModules contains:

<httpModules>
   <add name="PerRequestLifestyle" type="Castle.MicroKernel.Lifestyle.PerWebRequestLifestyleModule, Castle.MicroKernel"/>
</httpModules>

system.webServer handlers section contains

<handlers>
  <remove name="PerRequestLifestyle"/>
  <add name="PerRequestLifestyle" preCondition="managedHandler" type="Castle.MicroKernel.Lifestyle.PerWebRequestLifestyleModule, Castle.Microkernel" verb="*" path="*.castle" />
</handlers>

I added the verb="*" path="*.castle" part as I was getting errors when they were missing. Not sure if their values are correct.

Anyone know what the problem is here?

  • Thanks, I removed the module declaration. The Version, Culture and PublicKeyToken weren’t necessary. I also had to add

    as a handler.

    Also had to create the directory ‘C:\TempImageFiles’ to get it working.

    Mr. Flibble30 сентября 2009, 18:53
  • Heh heh. Looks like I confused myself there. I was having problems with both Castle and ChartImageHandler - looks like I thought I had asked about ChartImageHandler in my question when I commented.

    Anywhoo - yes, my problem is solved.

    Mr. Flibble01 октября 2009, 12:14
  • So did it solve your problem? And what does ChartImageHandler have to do with Windsor?

    queen330 сентября 2009, 20:42
  • Try including the Version, Culture and PublicKeyToken in the module declaration.

    Mauricio Scheffer30 сентября 2009, 15:15
  • PerWebRequestLifestyleModule - это модуль, а не обработчик. Удалите его из раздела обработчиков.

    Mauricio Scheffer30 сентября 2009, 15:09

3 ответов

1

Мне потребовалось некоторое время, чтобы найти решение для этого, но все, что мне нужно было, это обновить DLL, на которую имеется ссылка в web.config ...

Использование Castle.Core и Windsor 2.5.1 ...

6

Вы можете решить проблему, зарегистрировав HTTP-модуль в configuration / system.webServer / modules вместо configuration / system.web / httpModules .

4

Моя проблема заключалась в том, что я загружал контейнер в Application_Start. В этот момент модули не инициализируются в ASP.NET, поэтому, когда вы пытаетесь зарегистрировать / использовать PerWebRequest Lifestyle, он выдает исключение, поскольку обнаруживает, что модуль не был инициализирован.

В итоге я использовал эту библиотеку из Castle Contrib , который предоставляет стиль жизни HybridPerWebRequestTransient, который, если в данный момент не инициализирован, использует переходный стиль жизни.

Вам просто нужно загрузить библиотеку (так как zip-файл в порядке), открыть Решение и скомпилировать его, взять сгенерированную DLL и указать ее в своем проекте.

Если вы используете Castle.Windsor версии выше 3.0, вам придется удалить текущую ссылку на него и добавить ссылку на версию, которую вы используете (я использовал 3.1, и у меня не было никаких проблем).

Это код для использования образа жизни: .LifeStyle.HybridPerWebRequestTransient()