- PR -

プロキシキャッシュを利用しない方法

1
投稿者投稿内容
やんたん
ベテラン
会議室デビュー日: 2003/08/18
投稿数: 63
投稿日時: 2003-12-31 17:22
現在、C#でC/Sのシステムを作成しております。
.NETで開発したアプリケーションの起動前に、サーバにファイルチェックに行き
新しいDLLがあればダウンロードしてアプリケーションに反映するという処理を
WebClient.DownloadFileを用いて実装しています。

ところが、ダウンロード先のサイトにアクセスに行く際、クライアント側でプロキシを設定しているとプロキシキャッシュにより、最新のモジュールがダウンロードできないという問題が発生しています。

プロキシの設定はクライアントにより、またプロキシを経由しないとサイトにアクセスできない場合もあるかと思いますので
「プロキシはクライアントで設定されていればそれを使用し、かつプロキシキャッシュは使用しない」
という実装がロジックレベルでできるのでしょうか。

このような問題は皆さんも経験される可能性があると思うのですが、どのように解決
されているのでしょうか。

ご存知の方はご教授いただけませんでしょうか。
よろしくお願いします。
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2004-01-02 22:48
 あまり詳しい話題ではないのですが。

 proxyサーバの設定を変更する必要があるのではないでしょうか。
 たとえば、ウェブブラウザにもキャッシュがありますが、そのキャッシュは、要求先のほうが新しければ破棄されるような設定があります。proxyの、キャッシュ更新タイミングが間違っているように思います。
やんたん
ベテラン
会議室デビュー日: 2003/08/18
投稿数: 63
投稿日時: 2004-01-03 00:50
Jittaさん、お返事ありがとうございます。

Proxyサーバの設定はおかしいとは思っているのですが、会社のプロキシサーバのため、
設定を変更するのは難しいんです。
なんとかロジックで解決できればと思い、いろいろ調べてみたのですが
ダウンロード先のURLの最後に「#」や「?」をつけることで
プロキシサーバのキャッシュを見に行かなくなるそうなので
その方法を使って 動作確認してみたいと思っております。

また、どうやらConfigファイルで設定するとプロキシを使用しないように設定できるそうなので、その方法ご存知の方がいらしたら教えていただけないでしょうか。
babo
会議室デビュー日: 2004/03/18
投稿数: 2
投稿日時: 2004-03-18 19:25
すみません。つまらない質問をさせて下さい。
プロキシ経由でWebClient.DownloadFileを使って
バイナリーファイルをダウンロードするには
どのようにすればよいでしょうか?

言語はVB.NET2003です。
よろしくご教授をお願いいたします。

[ メッセージ編集済み 編集者: babo 編集日時 2004-03-18 19:26 ]
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2004-03-19 08:43
引用:

やんたんさんの書き込み (2004-01-03 00:50) より:

また、どうやらConfigファイルで設定するとプロキシを使用しないように設定できるそうなので、その方法ご存知の方がいらしたら教えていただけないでしょうか。


 す〜〜〜っかり忘れていました。というか、年始でお休み中だったので、埋もれてしまっていました、というのが正解か。ごめんなさい。
 その後、解決されたでしょうか?

 私が理解しているプロキシサーバは、

対象サーバ − プロキシ − クライアント

と、対象への間にはいるので、対象サーバの方で「プロキシを見るな」という設定はできないような?クライアント自身も「キャッシュ」を持っているので、その「キャッシュ」に対して有効期間を設けることはできます。そうすると、「戻る」や「再読込」したときに、「有効期間が切れています。もう一度提出しますか」のようなメッセージが出ますが。
 ん?ならば、その「有効期間」を設定していれば、プロキシサーバのキャッシュも更新される?私が見つけることができたのは、IISの設定で、仮想ディレクトリのプロパティを開き、「HTTPヘッダー」タブの「コンテンツに有効期限を設定する」チェックボックスと、そのグループボックスです。


>baboさん
 上に書いたように、クライアントが「このプロキシを経由してインターネットに接続する」と定義されているので、プロキシ上にファイルがあれば、それをダウンロードすると思います。


#####
ところで、「プロクシ」?「プロキシ」?「串」というから、「プロクシ」と思っていたのだが???
ATOK17の和英辞書は、どちらもproxyに変換してくれました。
やんたん
ベテラン
会議室デビュー日: 2003/08/18
投稿数: 63
投稿日時: 2004-03-19 09:14
私もバタバタしており書き込めておりませんでした。
もうしわけございません<(_ _)>

上記質問、解決いたしました。

アプリケーション構成ファイルに下記のように記述すると
プロキシを経由しないでアクセスが可能です。

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<system.net>
<defaultProxy>
<bypasslist>
<add address="〜〜" />
</bypasslist>
</defaultProxy>
</system.net>
</configuration>

bypasslistについての解説は下記にあります
ms-help://MS.VSCC.2003/MS.MSDNQTR.2003FEB.1041/cpgenref/html/gngrfbypasslistelement.htm

#####
「プロクシ」か「プロキシ」か・・・
たぶん「X」を「エックス」と読むか、年配の方がよく使う「エッキス」と読むかの違いですかね
babo
会議室デビュー日: 2004/03/18
投稿数: 2
投稿日時: 2004-03-19 10:37
Jittaさん、お返事ありがとうございます。

私の質問の仕方が悪かったです。ごめんなさい。
私がご教授頂きたいのはコード的な質問でした

WebRequestクラスでは
 Dim myWebRequest As WebRequest = WebRequest.Create("URL")
 Dim myProxy As New WebProxy("URL:Port")
 myWebRequest.Proxy = myProxy
 Dim myWebResponse As WebResponse = myWebRequest.GetResponse()
としてプロキシを設定する様に
WebClientではプロキシをどのように設定すれば良いか?というものでした。

WebClient.DownloadFile("URL", "Path")を実行すると例外エラーが発生します。
"基になる接続が閉じられました : リモート サーバーに接続できません。"
これはプロキシを経由していないためと考えていました。
開発環境ではプロキシを経由しないと外部へ接続できないようになっています。
また、プロキシ経由は開発要件でもあります。

WebResponseクラスでバイナリーファイルを取得する方法があるのでしょうか?


#####
個人的にですが発音は「プロクシ」、表記は「プロキシ」で使ってます。
「プロクシ」の方が馴染みがあるのですが
「プロキシ」の方が一般的と認識しています^^
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2004-03-19 11:03
引用:

baboさんの書き込み (2004-03-19 10:37) より:


 MSDNには、
引用:

プラグ可能なプロトコルの概要より:
WebClient クラスは、WebRequest クラスに依存してインターネット リソースへのアクセスを可能にするため、登録されているプラグ可能な任意のプロトコルを使用できます。


引用:

WebClient クラスより:
WebClient クラスは、 WebRequest クラスを使用して、インターネット リソースへアクセスします。 WebClient インスタンスは、 WebRequest.RegisterPrefix メソッドで登録した任意の WebRequest の子孫を使用してデータにアクセスできます。


とありますので、WebClientを使用するためには、WebRequestのインスタンスが必要なのではないでしょうか?

 一通り、WebClientのメンバを眺めてみましたが、WebRequestを設定するようなものはありませんね。または、WebClientでは、内部でWebRequestを作ってアクセスしている、という意味でしょうか。

 「データの要求」というトピックに、
引用:

単純な要求/応答トランザクションの場合は、WebClient クラスによって、インターネット サーバーにデータをアップロードしたり、インターネット サーバーからデータをダウンロードしたりするための最も簡単なメソッドを提供できます。
(略)
複雑なトランザクションを作成するクライアント アプリケーションでは、WebRequest クラスとその派生クラスを使用してサーバーからデータを要求します。


とあります。プロクシ経由は「複雑なトランザクション」の部類にはいるのかもしれません。
1

スキルアップ/キャリアアップ(JOB@IT)