将MVC 2应用程序添加到IIS 7中的Nancy站点

时间:2012-08-15 16:25:48

标签: asp.net-mvc iis asp.net-mvc-2 iis-7 nancy

在IIS 7中,我使用Nancy项目创建了一个网站。然后,我使用别名api向网站添加了MVC 2应用程序。我能够完美地访问南希项目中已定义的路线。但是,当我访问/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. 对于MVC 2应用程序的Web.config,我将以下内容添加到<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. 到Nancy应用程序的Web.config,我将以下内容添加到<system.web/>块:

    <httpHandlers>
      <add verb="*" type="Nancy.Hosting.Aspnet.NancyHttpRequestHandler" path="*" />
      <remove verb="*" path="api/*" />
    </httpHandlers>
    
  3. 我也尝试过使用两个应用程序中<system.webServer/><system.serviceModel/>块中的设置。

  4. 如果将MVC 2应用程序嵌入IIS 7中的Nancy站点,我怎样才能使其正常运行?任何指导都将不胜感激。

1 个答案:

答案 0 :(得分:1)

您有正确的想法 - 您需要阻止NancyFx特定配置部分继承到子MVC站点。

在根目录(NancyFx)网站中,使用正常配置创建<location/>标记。您的NancyFx web.config结构如下所示。 (如果您决定将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>