2012-08-15 125 views
6

添加到南希的网站在IIS 7中,我创建了使用南希项目网站。然后,我添加了一个MVC 2应用程序使用别名api网站。我能够完美地访问Nancy项目中定义的路线。然而,当我访问/api,我得到以下错误:的MVC 2应用程序在IIS 7

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. 南锡应用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应用程序嵌入到IIS 7中的Nancy站点时正常运行?任何指导将不胜感激。

回答

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> 
+0

好极了!只是测试了这一点,它就像一个魅力。如果我能说服我的团队从过去两周南希迁移我们所有的工作MVC3。 :) 感谢您的信息。干杯! – 2012-09-07 18:24:24

相关问题