- PR -

Webサービスをダイナミックで参照

投稿者投稿内容
Hoppy
常連さん
会議室デビュー日: 2005/05/30
投稿数: 29
投稿日時: 2005-06-10 17:37
いつもお世話になっております。

スマートクライアント環境でASP.NETで作成したWebサービスをVB.NETの
Windowsアプリで動的にWeb参照を行うため、参照したWebサービスの
「URLの動作」プロパティをダイナミックに設定しているのですが、
app.config(exe名.config)内のURLを参照せずにlocalhostを参照して
しまっているようで困っています。

WebサービスをスタティックでWebサーバのURLを指定するとWindowsアプリ
は正常に動作するのですが、
ダイナミックとした場合以下の状況となります。
app.config内のURLはlocalhostではなくWebサーバのURLを指定しています。

≪クライアントPCのIISを開始している場合≫
 Windowsアプリは正常に動作

≪クライアントPCのIISを停止している場合≫
 「基になる接続が閉じられました:リモートサーバーに接続できません。」
 のエラーが発生

このことからどうもapp.config内のURLは参照されずlocalhostを参照している
としか思えません。

解決方法をご存知の方がおりましたらご教授願います。
宜しくお願い致します。
壱丸3
常連さん
会議室デビュー日: 2004/09/13
投稿数: 34
投稿日時: 2005-06-10 18:48
ノータッチデプロイメントで配置されたexeは、クライアントで起動されたときに

C:\Document and Settings\ユーザー名\Local Settings\Application Data\assembly\dl2

のどこかにダウンロードされて格納されています。
たまに、プログラムを変更してもこの中のexeが入れ替わらない場合があります。
ですのでこの中から該当のexeを一度削除するとうまくいくかもしれません。

※以下、追記です。

もしくは、単純に構成ファイルが読めていない可能性もありますね。
構成ファイルに他の項目を追加してみて、その項目が正常に読み込めますか?

[ メッセージ編集済み 編集者: 壱丸3 編集日時 2005-06-10 19:00 ]
Hoppy
常連さん
会議室デビュー日: 2005/05/30
投稿数: 29
投稿日時: 2005-06-10 19:07
壱丸3様 返信ありがとうございます。

c:\Document and Settings\ユーザー名\Local Settings\Application ata\assembly\dl2
配下の該当exeが格納されているフォルダは削除しております。

先ほど一点分かった事がありますので報告させてもらいます。

デバッガで実行したところ、Webサービス側のクラス内のNewメソッドで
exe名.configより参照先のURLは取得しているようです。
しかし、取得したURLはexeファイルと一緒にWebサーバへ配布したexe名.config
に記述してある内容ではありませんでした。

 exe名.config内のURL:Webサーバ側のURL
 取得したURL:localhost

「Temporary Internet Files」内のキャッシュを削除しても同じでした。
実行後に「Temporary Internet Files」内のexe名.configのキャッシュを
確認したところ、exeファイルと一緒に配布したURLとなっているので
exe名.configファイルの配置場所に問題はなさそうです。

初めはexe名.configファイル内のURLをlocalhostで試していたこともあり、
その時点の内容が取得されているようです。

「Temporary Internet Files」や壱丸3様より指摘頂いたフォルダ以外に
exe名.configファイル等が格納されるところはあるのでしょうか?
壱丸3
常連さん
会議室デビュー日: 2004/09/13
投稿数: 34
投稿日時: 2005-06-10 20:00
拡張子がconfigのファイルはmachine.configの<httpHandlers>要素の
<add verb="*" path="*.config" type="System.Web.HttpForbiddenHandler"/>
の項目によりセキュリティ上、基本的にアクセスが禁止されているのですが
私の環境だと同<httpHandlers>要素に
<add verb="GET,HEAD" path="*.exe.config" type="System.Web.StaticFileHandler"/>
の記述があり、*.exe.configファイルは読み込めるようになっています。
これは自分で追加したわけではなく、デフォルトの設定のままです。
この項目がなければ、*.exe.configが読み込めていない可能性がありますので確認してみてください。
もし、なければmachine.config、
またはexe、exe.configと同じディレクトリにWeb.configを配置して
この設定を追加する必要があります。
Hoppy
常連さん
会議室デビュー日: 2005/05/30
投稿数: 29
投稿日時: 2005-06-13 09:37
返信が遅くなり申し訳ありませんでした。

引用:

壱丸3さんの書き込み (2005-06-10 20:00) より:
拡張子がconfigのファイルはmachine.configの<httpHandlers>要素の
<add verb="*" path="*.config" type="System.Web.HttpForbiddenHandler"/>
の項目によりセキュリティ上、基本的にアクセスが禁止されているのですが
私の環境だと同<httpHandlers>要素に
<add verb="GET,HEAD" path="*.exe.config" type="System.Web.StaticFileHandler"/>
の記述があり、*.exe.configファイルは読み込めるようになっています。
これは自分で追加したわけではなく、デフォルトの設定のままです。
この項目がなければ、*.exe.configが読み込めていない可能性がありますので確認してみてください。



壱丸3様よりご教授頂いた上記ファイルを確認しましたが、私のPCの
設定内容は壱丸3様と同じ内容が設定されていました。

その後こちらで調査した結果ですが、サーバ側に配置した*.exe.configを
ブラウザ(IE)で見てみると、実際に配置しているファイルの内容ではなく
以前の内容が表示されました。
そこでブラウザの更新ボタンでリロードしたところ表示された内容はサーバ側に
配置したファイルの内容で表示され、その後exeを実行すると*.exe.config内の
URLが取得され、正しく動作させることが出来ました。

しかし、「Temporary Internet Files」フォルダ内のキャッシュを削除後に
exeを実行しても*.exe.configファイルからは古い内容のURLを取得していたのに、
一度ブラウザ上でリロードさせてからexeを実行させると最新の内容が取得
されることが疑問でなりません。
ブラウザの更新ボタンでリロードすることは「Temporary Internet Files」
フォルダ内のキャッシュを削除して再表示と思っていたのですが、実際は
そうではないのでしょうか?

また、IEの設定でインターネット一時ファイルを「ページを表示する毎に確認」に
設定しておくとブラウザでリロードさせなくても*.exe.configファイルより
正しい内容を取得できることも確認できました。
出来ればこのアプリケーションを利用するユーザ毎に、このようなIEの設定を
させるのは避けたいとは思っているのですが、これしか方法はないのでしょうか?

返信の度に質問ばかりで申し訳ありませんがよろしくお願いします。
todo
ぬし
会議室デビュー日: 2003/07/23
投稿数: 682
投稿日時: 2005-06-13 10:31
引用:

また、IEの設定でインターネット一時ファイルを「ページを表示する毎に確認」に
設定しておくとブラウザでリロードさせなくても*.exe.configファイルより
正しい内容を取得できることも確認できました。
出来ればこのアプリケーションを利用するユーザ毎に、このようなIEの設定を
させるのは避けたいとは思っているのですが、これしか方法はないのでしょうか?



Webサーバ側で設定できると思います。

IISマネージャ
→hoge.exe.configのプロパティ
→HTTPヘッダ
→コンテンツは直ちに有効期限を切る

[ メッセージ編集済み 編集者: todo 編集日時 2005-06-13 10:45 ]
Hoppy
常連さん
会議室デビュー日: 2005/05/30
投稿数: 29
投稿日時: 2005-06-13 11:28
todo様返信ありがとうございます。

引用:

IISマネージャ
→hoge.exe.configのプロパティ
→HTTPヘッダ
→コンテンツは直ちに有効期限を切る



ご指摘頂いた設定を対象の*.exe.configファイルへ行いましたが、
結果は変わりませんでした。
また、対象の*.exe.configファイルのプロパティにおいて
カスタムHTTPヘッダーへ
 ヘッダー名:Cache-Control
 カスタムヘッダー値:no-cache
の設定を行っても同じでした。

先ほど気が付いたのですが、どうもクライアントPCのキャッシュを参照している
のではなく、プロキシサーバーのキャッシュを参照しているようです。
(ネットワーク内にプロキシサーバーが存在していることを忘れていました)

でも、todo様に教えていただいた設定ってプロキシサーバーを経由しても
しなくても関係ないように思えるのですが、何かこちらの設定に問題がある
のでしょうか?
壱丸3
常連さん
会議室デビュー日: 2004/09/13
投稿数: 34
投稿日時: 2005-06-13 13:13
どうもStaticFileHandlerがキャッシュの有効期間に関して影響を与えているような気がします。
私の環境ではexe.configファイルのカスタムHTTPヘッダーに
Expires: -1
を設定することで解決できました。

追記

すいません。確認したのはIEでの読込のみです。
クライアントexeでの確認はしていません。

[ メッセージ編集済み 編集者: 壱丸3 編集日時 2005-06-13 13:17 ]

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