3

IIS7.5、.net 4.0 を使用しています。私は地元で働いています。

リバース プロキシをセットアップするために、Application Request Routing、Web Farm Framework、WebDeploy、および UrlRewrite をインストールしました。これはほとんどの場合うまくいきます。

私は2つのウェブサイトを持っています:

  • DefaultWebSite (ポート 80、アプリケーション プール: デフォルト アプリケーション プール (.net 4)) および
  • ターゲット (ポート 8085、アプリ プール: TargetAppPool(my identity, .net 4))。

DefaultWebSite ( IIS.netの指示に従って作成)に、上記のリンクで説明されているように、すべての localhost (ポート 80) トラフィックをlocalhost:8085にリダイレクトする書き換えルールがあります。これは、ほとんどのドキュメント タイプ (.aspx、.xap、.htm、.ico) で正常に機能しますが、MyService.svc への要求は失敗します。404 を返します。

明確にするために:

localhost:8085/MyService.svcをブラウザーに貼り付けると、要求された WCF ページが表示されます。

localhost/MyService.svcをブラウザーに貼り付けると、404 が表示されます。

localhost:8085/MyIcon.icoをブラウザーに貼り付けると、要求されたリソースが取得されます。

localhost/MyIcon.icoをブラウザーに貼り付けると、要求されたリソースが取得されます。

.svc は、404 を返すことがわかっている唯一のドキュメント タイプです。

関連する可能性のある情報を 2 つ入手しました。

  1. アプリケーション プール。DefaultWebSite のアプリケーション プールを TargetAppPool に変更すると、404 が 500 になります (「パス '/' のマッピングに失敗しました」)。この変更が行われると、他のすべての要求は成功します。これが関連しているかどうかはわかりません。

  2. FREB (Failed Request Tracing) ログ。手順を詳しく説明しているページ ( http://blogs.msdn.com/b/asiatech/archive/2011/08/25/return-404-4-not-found-when-url-rewrite.aspx ) を見つけました。 URL の書き換えが私のものよりも成功した場合の FREB ログ (後で失敗します)。書き換えを成功させるための FREB ログを生成する方法を見つけることができなかったので (可能であれば)、私の FREB ログをそのブログのものと比較することしかできません。私の FREB ログにはステップ 21 (URL_CHANGED) が表示されていますが、22 (URL_REWRITE_END) は表示されていません。これらのログについて、それよりも重要なことに気付くほどの経験はありません (提案を歓迎します)。

私の主な質問は、.svc リソースを要求する URL だけが書き換えられない理由を知っている人はいますか?

二次的な質問は次のとおりです。リクエストが成功した場合に FREB ログを生成する方法を知っている人はいますか (可能であれば)。

ありがとう

アップデート:

アーキテクチャを変更して、より多くの情報を取得しようとしました。

着信トラフィックをキャプチャするために Microsoft Network Monitor をインストールした別の PC に Target Web サイトを移動しました。

この新しい Web サイトを指すように url-rewrite ルールを変更する前は、新しい PC で MyService.svc に要求を行ったときに正しい応答が得られました。罰金。

リクエストを新しいターゲット Web サイトにルーティングするように書き換えルールを変更するとすぐに、以前と同じように応答します (404)。POST リクエストと GET リクエストの両方を行いました。Network Monitor ログには、要求の痕跡はありません (他のすべての呼び出し (200、404、またはそれ以外) はこのログに表示されます)。

これにより、url-rewrites および *.svc リクエストと互換性のないものがあると思われます。MyService.asmx (このファイルを作成した) にリクエストを送信しようとしたところ、正しくページが返されたため、*.svc に制限されています。何か案は?

4

3 に答える 3

7

これに対する解決策は、Target Web サイトの構成ファイルにあります。

web.config (ターゲット アプリケーション内) には、次のセクションがあります。

<serviceHostingEnvironment aspNetCompatibilityEnabled="true"/>.

これを次のように変更しました。

<serviceHostingEnvironment aspNetCompatibilityEnabled="true" multipleSiteBindingsEnabled="true" />.

これについてはhttp://forums.iis.net/post/1956671.aspxにクレジットを記載する必要があります (変更が必要なのはプロキシの構成であると主張していますが、プロキシではなくターゲット アプリであることがわかりました)サーバ)。

于 2013-10-07T15:40:15.960 に答える
0

拡張子が.svcの場合を除いて、書き換えはすべてのリソースで機能しているように見えるので、これは集中すべき領域であると言えます。

書き換えルールは他のリソースと一致しているが、サービスとは一致していないと思います。これらは通常正規表現であるため(複雑であることが多い)、URL で見つかったルールをテストする価値があると思います。UrlRewrite の正規表現を見つける方法の詳細については、こちらを参照してください

また、同じ考え方を持つアウトバウンド ルールを確認することもおそらく価値があります。

于 2013-10-03T13:02:50.013 に答える