1

次のような URL を指す既存のクライアントが多数あります。

http://sub1.site.com/images/image1.jpg

/images は、そのサーバー上の image1.jpg を実際に含むディレクトリを指す仮想ディレクトリです。

すべてのファイルをこのディレクトリから、この同じアプリケーションを実行しない別のサーバーに移動します。

ファイルは次の場所でのみ利用できるようになります。

http://sub2.site.com/image1.jpg

http://sub1.site.com/images/image1.jpgを要求するクライアントが現在http://sub2.site.com/image1.jpgに存在するコンテンツを取得できるようにする最善の方法は何 ですか?

いくつかの要件:

  • 302 レスポンスではなく、その URL を介して実際のコンテンツが返される必要があります。
  • IIS サーバー構成を変更することはできません。サイトの web.config のみです。
  • 繰り返しますが、asp.net 3.5 を実行しています。

ありがとう。

4

4 に答える 4

1

これが機能するかどうかは完全にはわかりませんが、古いサイトで URL ルーティングをセットアップして、すべてのリクエストがハンドラーに送信され、そのハンドラー内で Web リクエストを実行して新しい場所からファイルを取得できます。

プロセスのバリエーションを使用して、画像の URL をさまざまな場所にマップし、ハンドラーがデータベース クエリを実行して、マップされた関係を取得し、正しい画像を提供します。画像を取得するために Web リクエストを実行できる理由がわかりません。

于 2012-08-29T19:16:10.190 に答える
0

サイトにハンドラーを追加できる (サイトの /bin ディレクトリに DLL を追加するなど) と仮定し、パフォーマンスを向上させるために 302 応答を送信できないという制限がある場合、代わりに、すべてを取得するカスタム ハンドラーを作成できます。その URL パターンに一致するリクエストは、Web クライアント コードを介して元のサイトから sub2.site 画像の Web リクエストを実行し、元のサイト sub1.site.com からそれを返します。

カスタム ハンドラーの作成と設定の基本については、「Visual C# .NET を使用して ASP.NET HTTP ハンドラーを作成する方法」を参照してください。次に、HttpWebRequest を使用して sub2.site.com の要求を行います。これについては、ASP.NET ページでの HTTP 要求の実行に関する詳細な説明のガイドを参照してください。さらに、エラーやタイムアウトを処理したり、処理やメモリ使用量をできるだけ少なくして画像を渡したりするためのその他のコードも少しあります。

2 つのサーバー間の応答時間/遅延によっては、これは遅くなる可能性がありますが、すべての要件に適合します。しかし、イメージをサイト 2 に移動する目的がパフォーマンス (CPU またはメモリ) または帯域幅の制限である場合、このソリューションは利益を無効にし、実際には状況を悪化させます。ただし、他のビジネス上または技術上の理由で移動された場合でも、このソリューションは役立つ可能性があります。

于 2012-08-29T19:51:12.307 に答える
0

IIS7 を使用しているため、組み込みのURL 書き換えモジュールを使用できます。

\images\image1.jpg を \image1.jpg に変更するインバウンド ルールとアウトバウンド ルールが必要です。

かなり複雑になる可能性がありますが、これはかなり単純なはずです。

于 2012-08-29T19:41:05.670 に答える
0

サーバーまたはサーバーのアップストリームを他の方法で制御できる場合は、mod_proxy (または同様の Windows/IIS ツール) を使用してこれらの URL を傍受し、それらを別のサーバーに転送して、実際の要求で応答することができます。ネットワーク構成と利用可能なサーバーによっては、これが最もシンプルでパフォーマンスの高いソリューションになる可能性があります。

要求を別の Web サーバーに転送するように IIS を構成できますか? on serverfault には、IIS 7.5 ソリューションへの簡単なプロセスとリンクがあります。

于 2012-08-29T20:19:30.133 に答える