Web API を含む ASP.NET MVC 4 Web サイトがあります。このサイトは、Windows 8 上の Visual Studio 2012 および .NET 4.5 を使用して開発およびテストされ、Web サーバーとして IIS Express が使用されています。この開発環境では、すべてが機能します。
現在、IIS 7.5 を搭載した Windows 2008 R2 (SP1) サーバーに展開されています。.NET 4.0 および 4.5 がインストールされています。アプリケーション プールは、統合パイプライン モードの .NET 4.0 で実行されています。
この運用環境では、MVC Web サイトは機能しますが、Web API は機能しません。すべてのリクエストで、GET か POST かに関係なく、404 エラーが発生します。GET 要求を実行するためにブラウザー (サーバー上でローカルに開いた IE 9) に Web API URL を入力すると、404 ページが表示されます。Web API クライアント アプリケーションから POST 要求を発行すると、404 と次のメッセージが表示されます。
リクエスト URI に一致する HTTP リソースが見つかりませんでした
MVC 4 と Web API を使用してテスト Web サイトも作成し、同じサーバーにデプロイしましたが、Web API は機能します。Web API および MVC アセンブリは、両方のプロジェクトで同じバージョン番号を持っています。
さらに、Web API Route Debuggerをアプリケーションに追加しました。次のような有効なルートを使用するhttp://myserver/api/order/12
と、次の結果が得られます。
私にとって、これは正しいルート テンプレートApi/{Controller}/{Id}
が見つかり、正しくコントローラーOrder
とに解析されたことを意味しますId=12
。コントローラ ( から派生ApiController
) は、すべての MVC コントローラもある Web アセンブリに存在します。
ただし、ステータスが何を意味するのか、および「ルートの選択」セクションが表示されない理由はわかりません000
(これは通常、アセンブリに 1 つも含まれていない場合でもApiController
当てはまります。上記のリンク先ページのスクリーンショットを参照してください)。ApiController
どういうわけか、何も見つからないか、検索されていないように見えるか、検索がサイレントに失敗します。
IIS ログ ファイルには、有用なものは何も表示されません。さまざまなアプリケーション プールの設定を変更し、テストと実際のアプリケーションに同じアプリケーション プールを使用しても役に立ちませんでした。
私は現在、「機能」、構成設定、サードパーティのアセンブリなどをアプリケーションから削除して、最終的にテストアプリケーションのサイズを小さくし、ある時点で機能し始めることを望んでいます.
誰かが問題が何であるかの手がかりを持っていますか? また、理由を見つけるためのデバッグやログのアイデアも大歓迎です。
編集
以下のコメントにある Darrel Miller のヒントのおかげで、Tracing for ASP.NET Web Apiを統合しました。
(GET) リクエスト URLの場合http://myserver/api/order/12
、次のようになります。
- 開発環境では、成功しました(略して):
メッセージ:
http://localhost:50020/api/order/12
; カテゴリ: System.Web.Http.Requestコントローラーの選択とインスタンス化...
オペレーター: DefaultHttpControllerSelector; 操作: SelectController; メッセージ: Route="controller:order,id:12"; カテゴリ: System.Web.Http.Controllers
オペレーター: DefaultHttpControllerSelector; 操作: SelectController; メッセージ: 注文; カテゴリ: System.Web.Http.Controllers
オペレーター: HttpControllerDescriptor; 操作: CreateController; メッセージ: ; カテゴリ: System.Web.Http.Controllers
オペレーター: DefaultHttpControllerActivator; 操作: 作成; メッセージ: ; カテゴリ: System.Web.Http.Controllers
オペレーター: DefaultHttpControllerActivator; 操作: 作成; メッセージ: MyApplication.ApiControllers.OrderController; カテゴリ: System.Web.Http.Controllers
アクションの選択、パラメーターのバインド、およびアクションの呼び出しが続きます...
結果のコンテンツ ネゴシエーションとフォーマット...
オペレーター: DefaultContentNegotiator; 操作: 交渉します。メッセージ: Typ = "文字列" ... 続き を読む
コントローラを廃棄しています...
オペレーター: OrderController; 操作: 廃棄; メッセージ: ; カテゴリ: System.Web.Http.Controllers
- 実稼働環境では、成功していません(短い形式で):
メッセージ:
http://myserver/api/order/12
; カテゴリ: System.Web.Http.Requestオペレーター: DefaultHttpControllerSelector; 操作: SelectController; メッセージ: Route="controller:order,id:12"; カテゴリ: System.Web.Http.Controllers
コントローラーのアクティブ化、アクションの選択、パラメーターのバインド、アクションの呼び出しのすべての部分が欠落しており、コンテンツ ネゴシエーションとエラー メッセージのフォーマットに従います。
オペレーター: DefaultContentNegotiator; 操作: 交渉します。メッセージ: Type = "HttpError" ... 続きを読む