WebSurfer's Home

トップ > Blog 1   |   ログイン
APMLフィルター

WCF サービスで HTTP 404.17 エラー

by WebSurfer 2017年2月5日 17:25

先日買った Windows 10 Pro 64-bit のノート PC に旧マシンから開発環境を移しています。

WCF サービスをホストしている ASP.NET Web Forms アプリをソリューションごとコピーして .aspx ページは問題なく動くようになったのですが、何故か WCF サービスだけが動きません。(汗)

ブラウザから .svc ファイルを要求すると HTTP 404.17 エラーとなります。エラーメッセージは「要求されたコンテンツはスクリプトであり、静的ファイル ハンドラーで処理されない可能性があります。」でした。

IIS のハンドラマッピングをみると .svc 用のハンドラは 3 つ存在していたのですが、何故静的ファイルハンドラーにマップされたのでしょう?

3 時間ぐらいハマってしまったのですが、ググって調べて stackoverflow の記事 What causes WCF Error 404.17 to be shown? にたどり着きました。

その記事の質問欄に "I then finally fixed it by enabling "HTTP Activation" (as suggested here)" とあります。その here のリンク先が HTTP Error 404.17 - Not Found で、その記事の回答にある画像すなわち ASP.NET 4.5 の WCF サービスの HTTP アクティブ化が正解のようです。

自分の Windows 10 Pro で該当するのは、以下の画像の「Windows の機能の有効化または無効化」で [.NET Framemwork 4.6 Advanced Services] => [WCF サービス] => [HTTP アクティブ化] のようですので、それにチェックを入れて有効化してみました。

WCF サービスの HTTP アクティブ化

結果、ブラウザから .svc ファイルを要求すると応答が返ってくるようになり、アプリから WCF サービスのメソッドを呼んだ場合も正常に応答が返ってくるようになりました。やはりこれが正解だったようです。

IIS のハンドラマッピングをみると HTTP アクティブ化前には 3 つしかなかった .svc 用のハンドラが、以下の画像のように 6 つに増えています。

ハンドラマッピング

HTTP アクティブ化の前/後でどう変わったのかはっきりしませんが、3 つ増えたのは間違いなくて、たぶん 4.0 用が追加されたのだと思います。

また、上に紹介した stackoverflow の記事に、

"The Http Activation Module (System.ServiceModel.Activation.HttpModule) is registered in the machine.config file. .NET 2.0 and .NET 4.0 have separate machine.configs. The Http Activation feature also exists for both .NET versions separately."

・・・と書いてありましたが、HTTP アクティブ化によって、ハンドラの追加だけではなく、.NET 4 用の Http Activation Module の有効化も行われたのかもしれません。

(ググってヒットした記事の中には ServiceModel 登録ツールを使って解決したという話もありました。HTTP アクティブ化もこのツールを使っているのかもしれません。ただし、確認はできていません。ご参考まで)

Tags: ,

ASP.NET

About this blog

2010年5月にこのブログを立ち上げました。主に ASP.NET Web アプリ関係の記事です。

Calendar

<<  2017年2月  >>
2930311234
567891011
12131415161718
19202122232425
2627281234
567891011

View posts in large calendar