- PR -

DLL配信

投稿者投稿内容
ヨコヤマダ
会議室デビュー日: 2003/10/14
投稿数: 8
投稿日時: 2004-09-01 20:21
ヨコヤマダといいます。
よろしくお願いいたします。

「ASP.NETはシャドウコピーを作りそれを使用するため、Webサービスとして公開されているDLLの本体は、いつでも上書き可能だ」ということをASP.NETのHPで読みました。
じゃあ、公開されているDLLが更にローカルで呼び出しているDLLはどうなのでしょう?これも使用中でも上書き可能なのでしょうか?
また、上書きして、その効果が現れるのはいつなのでしょうか?
(ちなみに私がやってみたところ、いつまでたっても効果は現れませんでした。)

単純にDLLの配信をしたいだけなのです。
ぬしの皆様、jitta様、どうか助けてください…

開発環境 :Win2003、VS.NET2003、IIS6.0
なちゃ
ぬし
会議室デビュー日: 2003/06/11
投稿数: 872
投稿日時: 2004-09-01 22:01
引用:

ヨコヤマダさんの書き込み (2004-09-01 20:21) より:
「ASP.NETはシャドウコピーを作りそれを使用するため、Webサービスとして公開されているDLLの本体は、いつでも上書き可能だ」ということをASP.NETのHPで読みました。
じゃあ、公開されているDLLが更にローカルで呼び出しているDLLはどうなのでしょう?これも使用中でも上書き可能なのでしょうか?
また、上書きして、その効果が現れるのはいつなのでしょうか?


公開されているDLLってどういう意味ですか?
ASP.NET上で作成したWebサービスが(内部的に)使用しているDLLと言う意味でいいんですかね?
基本的にbinフォルダは常に変更を監視されているはずですから、更新した瞬間にリスタートがかかると思いますが。
ヨコヤマダ
会議室デビュー日: 2003/10/14
投稿数: 8
投稿日時: 2004-09-01 22:48
なちゃさん、お返事ありがとうございます!

私が書きました「公開されているDLL」とは、IISのWeb仮想ディレクトリを通じて外から使えるようなメソッドを実装しているDLLのことです。
公開されているDLLが参照しているだけで外からは使っていないようなDLLは「ローカルで呼び出しているDLL」と呼んでいます。
2つとも同じディレクトリに置いて使っています。

ところで、何が「リスタートがかかる」のでしょうか?IISですか?
また、そのリスタートがかかる為に必要な設定などありますか?

[ メッセージ編集済み 編集者: ヨコヤマダ 編集日時 2004-09-01 22:53 ]
なちゃ
ぬし
会議室デビュー日: 2003/06/11
投稿数: 872
投稿日時: 2004-09-01 23:05
引用:

ヨコヤマダさんの書き込み (2004-09-01 22:48) より:
私が書きました「公開されているDLL」とは、IISのWeb仮想ディレクトリを通じて外から使えるようなメソッドを実装しているDLLのことです。
公開されているDLLが参照しているだけで外からは使っていないようなDLLは「ローカルで呼び出しているDLL」と呼んでいます。
2つとも同じディレクトリに置いて使っています。


公開されているDLLはWebMethodの入っているDLLで、その他内部で利用している独自のライブラリ関連が、ローカルで呼び出しているDLLってことですかね?
これらはIISの仮想ディレクトリ直下のbinフォルダに置いているということですよね?

引用:

ところで、何が「リスタートがかかる」のでしょうか?IISですか?
また、そのリスタートがかかる為に必要な設定などありますか?


リスタート(厳密にはちょっと違うかも)されるのは、IISではなくてASP.NETの本体といえる部分です。ASP.NETのワーカープロセス内で起動されている、各Webアプリケーション用のアプリケーションドメインと言う事になりますかね。
※ややこしいですが、基本的にはASP.NET環境が再起動されるという感覚でいいと思います。

リスタートがかかるのはASP.NETにおける基本の動作なので、特にデフォルトから設定などは不要です(設定によっては無効にもできたかもしれませんが)。
binフォルダ内に対して更新をかければ、自動的に再起動されるはずです。
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2004-09-02 06:34
引用:

なちゃさんの書き込み (2004-09-01 23:05) より:

リスタート(厳密にはちょっと違うかも)されるのは、IISではなくてASP.NETの本体といえる部分です。ASP.NETのワーカープロセス内で起動されている、各Webアプリケーション用のアプリケーションドメインと言う事になりますかね。


 IIS6ということですが、6も、ワーカプロセス全体がリスタートするんでしたっけ?6は全くさわったことないですけど。。。
なちゃ
ぬし
会議室デビュー日: 2003/06/11
投稿数: 872
投稿日時: 2004-09-02 09:38
引用:

Jittaさんの書き込み (2004-09-02 06:34) より:
 IIS6ということですが、6も、ワーカプロセス全体がリスタートするんでしたっけ?6は全くさわったことないですけど。。。


うーん読み直してみると私の書き方が変ですね。
言いたかったのは、対象Webアプリケーションのアプリケーションドメインがリスタートするって事です。
# 条件によってはいろいろあったんだっけかな?ちょっと思い出せない。

IIS5でもIIS6でも、ワーカープロセス自体が再起動するわけじゃなかったと思いますです(自信なし…)。
ヨコヤマダ
会議室デビュー日: 2003/10/14
投稿数: 8
投稿日時: 2004-09-02 11:54
なちゃさん、Jittaさんありがとうございます。
引用:

なちゃさんの書き込み (2004-09-01 23:05) より:
公開されているDLLはWebMethodの入っているDLLで、その他内部で利用している独自のライブラリ関連が、ローカルで呼び出しているDLLってことですかね?
これらはIISの仮想ディレクトリ直下のbinフォルダに置いているということですよね?


はい。その通りです。

実験してみたところ偶然以下のような発見がありました。
・定数しか用意していない(メソッドが一切ない)「独自ライブラリ」を用意し「公開DLL」からその定数を使用している場合、「独自ライブラリ」の変更が反映されません。
・Staticのメソッドをひとつ書き込み、そのメソッドを「公開DLL」で使用してみると、「独自ライブラリ」の変更が反映されるようになりました。
どちらも「独自ライブラリ」はnewせずに使用しています。

アプリケーションドメインがリスタートされない条件として、前者のような条件があるということなのでしょうか??
todo
ぬし
会議室デビュー日: 2003/07/23
投稿数: 682
投稿日時: 2004-09-02 12:54
binフォルダ内のアセンブリを更新されれば、アプリケーションドメインがリスタートするはずです。
http://www.atmarkit.co.jp/fdotnet/dotnettips/183aspsesout/aspsesout.html

Application_Start, Application_Endでログを残して確認して下さい。

# アプリケーションドメインがリスタートしても、「独自ライブラリ」はキャッシュされて再読み込み
されない場合があるのかな??

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