6

IIS 7 で、Nancy プロジェクトを使用して Web サイトを作成しました。次に、エイリアスを使用して 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.configMVC 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.configNancy アプリケーションの に、次をブロックに追加しました<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 サイトに埋め込まれている場合、MVC 2 アプリケーションを適切に動作させるにはどうすればよいですか? ガイダンスをいただければ幸いです。

4

1 に答える 1

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>
于 2012-08-29T01:35:29.647 に答える