none
ASP.NET2.0のWebサイトの下にASP.NET4.0のWebサイトは置けますか? RRS feed

  • 質問

  • こんにちは、TrailRunner-MFです。お世話になっています。

    現在開発と保守を手掛けている比較的大きなサイトがあり、その中のWebサイト構成に関する質問です。

    ----------------
    現在のシステム構成
    ----------------

    Web.SiteA ・・・ asp.net 2.0
    + Web.SiteB ・・・ asp.net 2.0
    + Web.SiteC ・・・ asp.net 4.0で新規構築

    ・asp.net 2.0のWebサイト、4.0のWebサイトはそれぞれのFrameworkに適したApplicationPoolに紐づいています。

    ・本来ならプレーンな仮想ディレクトリを作成してその下に並列にWeb.SiteA~Cまでを並べるべきですが諸般の理由でこうなっています。

    ----------------
    問題点
    ----------------

    Web.SiteCをASP.NET 4.0用のサイト内のページを表示しようとすると、次のようなエラーが表示されます。

    • 'system.web.extensions/scripting/scriptResourceHandler' セクションが重複しています。

    このセクションはWeb.SiteC側ではなくWebSiteA側のWeb.Configのエラーとして表示されます。
    WebSiteBのWeb.Configにはこのような記載がないのでおかしいと思い.NET Framework 4.0用の
    machine.Configを調べたところそちらに記述されておりました。

    恐らくこの記載が原因となってWebSiteCが正しく動作しないものかと思われます。

    ----------------
    質問
    ----------------

    システム構成のルートにあるWebSiteAはWeb.Config上で配下にある個々のアプリの管理を一元的に行っています。

    従ってこの構成を変えたくありません。

    本来はご法度なのでしょうが、どうしてもこのシステム構成を遵守する場合、以下の方法しかないように思われます。

    ① WebSiteA~CのASP.NETのバージョンを、全て4.0または逆に2.0に揃える。

    ② ASP.NET 4.0のmachine.configを書き換えてワーニングが出ているセクションをコメント化する。
    ※)かつ今後ASP.NET2.0の配下に無い単独のASP.NET 4.0のWebサイトを作るときは、そのサイトのWeb.Configに明示的に追加する。

    ----------------

    現場での雰囲気では②で対応出来るものならそうしたい・・・という感じですが、そもそもasp.net2.0のWebサイトを仮想ディレクトリに見立てて、その下にasp.net 4.0のWebサイトを配置するというシステム構成が技術的に問題ないかどうかをご教授いただきたいと思います。

    イレギュラーなケースとは存じますが何卒有用なアドバイス、またはヒント等お寄せいただきたくお願い申し上げます。

    TrailRunner-MF



    2016年6月24日 9:08

回答

すべての返信

  • 追記事項
    --------

    前述の"scriptResourceHandler"というセクションの内容ですが、案の定ASP.NET 2.0と4.0では記載されているバージョンが違っていました。

    ASP.NET 2.0
    ----------------
    <section name="scriptResourceHandler" type="System.Web.Configuration.ScriptingScriptResourceHandlerSection, System.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" requirePermission="false" allowDefinition="MachineToApplication"/>

    ASP.NET 4.0
    ----------------
    <section name="scriptResourceHandler" type="System.Web.Configuration.ScriptingScriptResourceHandlerSection, System.Web.Extensions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" requirePermission="false" allowDefinition="MachineToApplication"/>

    PublicKeyTokenが同じなので開発時に作成したアセンブリ署名は同じなのでしょうが、バージョン自体が変わっている=ロジックも変わっている可能性が高いですね。しかもallowDefinition="MachineToApplication"なのでWeb.Configレベルでの書き換えは不可能!

    となるとやはりWegSiteA~CまでのASP.NETのバージョンを揃えるしかない!

    ということになるのでしょうか・・・?

    ※)原因がmachine.configのこのセクションだけのことであれば、少々残念な気がします。

    2016年6月24日 9:45
  • 構成情報の継承の関係でエラーになるそうですが、以下の記事にその解決方法が書いてあります。

    ASP.NET 4 Breaking Changes
    http://www.asp.net/whitepapers/aspnet4/breaking-changes#0.1__Toc256770150

    上記の記事の対処方法で質問者さんの問題か解決できるかは分かりませんが・・・

    2016年6月24日 12:58
  • SurferOnWww様
    ----------------

    大変ありがとうございました。この方法で難なく解決出来ました。

    このホワイトペーパーは重要ですね。

    ASP.NET 2.0/3.5からASP.NET 4.0への移行に関する問題というテーマのドキュメントは色々見ましたが、この問題についてちゃんと解説しているのはここだけでした。

    http://www.asp.net/whitepapers/aspnet4/breaking-changes#0.1__Toc256770150

    以上にてこの件は解決です。

    2016年6月27日 2:51