Добавление приложения MVC 2 на сайт Nancy в IIS 7

в IIS 7 я создал веб-сайт, используя проект Nancy. Затем я добавил приложение MVC 2 на сайт, используя псевдоним api. Я могу посетить определенные маршруты в проекте Nancy отлично. Однако, когда я посещаю /api, Я получаю следующую ошибку:

Could not load type 'Nancy.Hosting.Aspnet.NancyHttpRequestHandler'.

Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code. 

Exception Details: System.Web.HttpException: Could not load type 'Nancy.Hosting.Aspnet.NancyHttpRequestHandler'.

Source Error: 

An unhandled exception was generated during the execution of the current web request. Information regarding the origin and location of the exception can be identified using the exception stack trace below.

Stack Trace: 

[HttpException (0x80004005): Could not load type 'Nancy.Hosting.Aspnet.NancyHttpRequestHandler'.]
   System.Web.Compilation.BuildManager.GetType(String typeName, Boolean throwOnError, Boolean ignoreCase) +11588073
   System.Web.Configuration.HandlerFactoryCache.GetTypeWithAssert(String type) +47
   System.Web.Configuration.HandlerFactoryCache.GetHandlerType(String type) +18
   System.Web.Configuration.HandlerFactoryCache..ctor(String type) +27
   System.Web.HttpApplication.GetFactory(String type) +95
   System.Web.MaterializeHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() +352
   System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously) +375

кажется, что приложение MVC 2 пытается использовать NancyHttpRequestHandler для обработки запроса. Я говорю это, потому что маршруты, которые не определены в приложении Nancy, отображают 404 страница.

Я пробовал несколько вещей:

  1. до Web.config из приложения MVC 2, я добавил следующее в <system.web/> блок:

    <httpHandlers>
      <add verb="*" path="*.mvc" validate="false" type="System.Web.Mvc.MvcHttpHandler, System.Web.Mvc, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
    </httpHandlers>
    
  2. до Web.config приложения Нэнси, я добавил следующее в <system.web/> блок:

    <httpHandlers>
      <add verb="*" type="Nancy.Hosting.Aspnet.NancyHttpRequestHandler" path="*" />
      <remove verb="*" path="api/*" />
    </httpHandlers>
    
  3. Я также пытался играть с настройками в <system.webServer/> и <system.serviceModel/> блоки в обоих приложениях.

как я могу заставить приложение MVC 2 вести себя правильно, когда оно встроено в сайт Nancy в IIS 7? Любые указания были бы весьма признательны.

1 ответов


у вас была правильная идея-вам нужно заблокировать наследование разделов конфигурации NancyFX для дочерних сайтов MVC.

в корневом (NancyFx) сайте создайте <location/> тег с вашей обычной конфигурацией. Веб-NancyFx.структура конфигурации будет выглядеть примерно так, как показано ниже. (Я добавил комментарии, чтобы попытаться уберечь вас от неприятностей, если вы решите обновить свой сайт MVC2 до MVC3.)

<configuration>
  <configSections/>
  <!-- FYI... configSections cannot be moved into the location tag. If you plan
       to upgrade to MVC3 and use the Razor view engine, those configSection 
       declarations need to live here. If you upgrade to MVC3 and use the Razor 
       view engine, you will need to remove the Razor configSections from the 
       views/web.config files any child MVC3 project. -->
  <system.web /> <!-- site-wide system.web settings -->
  <system.webServer /> <!-- site-wide system.webServer settings -->

  <!-- Put the NancyFx specific configuration here -->
  <location path="." inheritInChildApplications="false"> 
  <!-- The inheritInChildApplications attribute is the magic sauce! :) -->
    <connectionStrings /> 
    <!-- If the connectionStrings are shared by the child site, 
         you could move them out to the main configuration. But they 
         cannot exist in both sections of this file. -->
    <appSettings />
    <system.web>
      <httpHandlers>
        <add verb="*" type="Nancy.Hosting.Aspnet.NancyHttpRequestHandler" path="*" />
      </httpHandlers>
    </system.web>
    <system.webServer>
      <handlers>
        <add name="Nancy" verb="*" type="Nancy.Hosting.Aspnet.NancyHttpRequestHandler" path="*" />
      </handlers>
    </system.webServer>
  </location>
</configuration>