0

サイトの一部として多数の Silverlight 3 プロジェクトを使用して、Visual Studio 2008 SP1 で MVC (1.0) アプリとして開始されたアプリケーションがあります。まったく空想的なものはありません。依存性注入に Ninject を使用します (最初のバージョン 2 ベータ版、現在は MVC 拡張機能を備えたバージョン 2 がリリースされています)。

.Net 4.0、VS2010、MVC2 などのリリースに伴い、アプリケーションを最新のプラットフォームに移行することにしました。VS2010 の変換ウィザードは、1 つの例外を除いてすべてを処理したようです。mvc1 への参照が mvc2 を指すように変更されなかったため、手動で行う必要がありました。もちろん、これにより、アプリから欠落している可能性のある他のMVC2のことについて考えさせられます.File-> New Projectを実行するとそこにあるでしょう...しかし、それはこの質問の焦点では​​ありません。

このアプリケーションを IIS 7.5 サーバー (Win2008 R2 x64 で実行) に展開すると、アプリケーション自体が機能します。ただし、画像、スクリプト、およびその他の静的コンテンツは存在しないようです。もちろん、それらはサーバーのディスク上にありますが、クライアントの Web ブラウザーには表示されません。

私は IIS にまったく慣れていないので、サーバー上のブラウザーで Web ページを開こうとすることだけを知っていました。そしてここで、ついに敵と対峙します。画像の 1 つの URL (たとえば、http://server/Content/someimage.jpg )に直接アクセスしようとすると、ブラウザーに次のエラーが表示されます。

IControllerFactory 'Ninject.Web.Mvc.NinjectControllerFactory' は、'Content' という名前のコントローラーのコントローラーを返しませんでした。

あはは。Web サーバーはこのリクエストを MVC にフィードしようとしますが、MVC はデフォルトのルーティング設定でコンテンツをコントローラーと見なし、失敗します。

Content/ および Scripts/ (特に) を非コントローラーとして扱い、静的コンテンツを通過させるにはどうすればよいですか? もちろん、これは私の開発者マシンの Cassini で動作しますが、展開するとすぐにこの問題が発生します。

IoC ツールが不足しているコントローラーをベース コントローラー ファクトリに渡す必要がある Ninject MVC 2 の最新バージョンを使用していますが、これは明らかに役に立ちませんでした。コンテンツなどの無視ルートも追加しようとしましたが、これも明らかに効果がありません。適切なレベルで問題に取り組んでいるかどうかさえわかりません。

このアプリを起動するためにどこを見ればよいか知っている人はいますか? 私は Web サーバーを完全に制御できるので、Web サーバーが機能し始める限り、多かれ少なかれ好きなことを行うことができます。

ありがとう!

4

2 に答える 2

3

StructureMap と favorite.ico で同様の問題が発生したため、最終的にそのパスを無視するルートを追加しました。

        routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
        routes.IgnoreRoute("favicon.ico");

私にはまったくわからないことに注意してください。ただし、別の変更点は、Default.aspx の必要性です。また、カスタム ページをマップする必要がある場合も同様です。ルーティングに関して私が抱えていた問題は 2 つだけです。

        routes.RouteExistingFiles = false;

編集:私は RouteExistingFiles が false でなければならないことを意味しました。それ以外の場合、MVC2 でその例外が発生します:)

于 2010-05-02T17:27:03.470 に答える
1

これは、いくつかのアカウント設定が原因であることが判明しました。Win2008 R2 サーバーの IIS によって IIS AppPool\sitename アカウントが自動的に作成されることを知りませんでした。「すべて」を試した後、私はこの情報に出会い、適切な権利を与え、魔法のように機能し始めました.

特にIISの経験が非常に限られている人(私)にとっては、デバッグがかなり難しいことです。

于 2010-05-08T17:00:18.447 に答える