C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

ログ内検索
  • キーワードを複数指定する場合は 半角スペース で区切ってください。
  • 検索条件は、(AND)=[A かつ B] (OR)=[A または B] となっています。
  • [返信]をクリックすると返信ページへ移動します。
キーワード/ 検索条件 /
検索範囲/ 強調表示/ ON (自動リンクOFF)
結果表示件数/ 記事No検索/ ON
大文字と小文字を区別する

No.17274 の関連記事表示

<< 0 >>
■17274  Webサービスのコンパイルタイミング
□投稿者/ 烈海王 -(2008/04/21(Mon) 13:53:01)

    分類:[ASP.NET (C#)] 

    こんにちは。

    ASP.NETを用いてWebサービスを作成しております。
    環境としては仮想ディレクトリにasmxファイルとApp_Codeディレクトリ(ソースファイルが入ってる)
    といった構成です。

    Webサービスクラスが提供するWebメソッドが2つありまして、その2つのメソッドで
    静的なインスタンスを共有したいのですが、
    クライアントからWebメソッド1呼び出し⇒Webメソッド2呼び出しとすると
    静的なインスタンスが初期化されてしまいます。
    延々とWebメソッド1だけを呼び出す場合、静的なインスタンスは初期化されずに
    更新する値を保持します。

    ASP.NETの場合、WebMethod属性を付けた、同一のクラスメソッドであっても
    それぞれの呼び出し時にはコンパイルが走るのでしょうか?
    (コンパイル時インスタンスが破棄される)

    大変お手数ですが、どなたかご教授ください。よろしくお願い致します。

親記事 /過去ログ34より / 関連記事表示
削除チェック/

■17276  Re[1]: Webサービスのコンパイルタイミング
□投稿者/ はつね -(2008/04/21(Mon) 14:09:20)
>
    No17274 (烈海王 さん) に返信
    > ASP.NETを用いてWebサービスを作成しております。
    > 環境としては仮想ディレクトリにasmxファイルとApp_Codeディレクトリ(ソースファイルが入ってる)
    > といった構成です。

    1仮想ディレクトリに1asmxファイルがあって、2Webメソッドが実装されているってことですか?
    そうだとすれば、JITコンパイルは2Webメソッドまとめて行われますよ。
記事No.17274 のレス /過去ログ34より / 関連記事表示
削除チェック/

■17277  Re[2]: Webサービスのコンパイルタイミング
□投稿者/ 烈海王 -(2008/04/21(Mon) 15:19:26)
    No17276 (はつね さん) に返信
    > ■No17274 (烈海王 さん) に返信
    >>ASP.NETを用いてWebサービスを作成しております。
    >>環境としては仮想ディレクトリにasmxファイルとApp_Codeディレクトリ(ソースファイルが入ってる)
    >>といった構成です。
    >
    > 1仮想ディレクトリに1asmxファイルがあって、2Webメソッドが実装されているってことですか?
    > そうだとすれば、JITコンパイルは2Webメソッドまとめて行われますよ。
    >
    回答ありがとうございます。
    そうなのですか。ただ気になっているのは
    @Webメソッド1⇒Webメソッド1⇒Webメソッド1
    AWebメソッド1⇒Webメソッド2⇒Webメソッド1

    上記@の場合はサクサク動いてくれるのですが、
    Aの場合は呼び出すメソッドが変わるたびに
    5秒程の時間(@に比べるとかなり遅い)かかります。
    それもあり、これはコンパイルされているのかな??と
    思った次第です。


記事No.17274 のレス /過去ログ34より / 関連記事表示
削除チェック/

■17278  Re[3]: Webサービスのコンパイルタイミング
□投稿者/ はつね -(2008/04/21(Mon) 15:38:00)
>
    No17277 (烈海王 さん) に返信
    > そうなのですか。ただ気になっているのは
    > @Webメソッド1⇒Webメソッド1⇒Webメソッド1
    > AWebメソッド1⇒Webメソッド2⇒Webメソッド1
    >
    > 上記@の場合はサクサク動いてくれるのですが、
    > Aの場合は呼び出すメソッドが変わるたびに
    > 5秒程の時間(@に比べるとかなり遅い)かかります。

    メソッドが変わるたびに遅いのですか?
    それはWebメソッド側のJITコンパイルとかの話ではなく、Webサービスの接続とかの問題って事はないですか?
記事No.17274 のレス /過去ログ34より / 関連記事表示
削除チェック/

■17279  Re[4]: Webサービスのコンパイルタイミング
□投稿者/ 烈海王 -(2008/04/21(Mon) 15:49:07)
    No17278 (はつね さん) に返信
    > ■No17277 (烈海王 さん) に返信
    >>そうなのですか。ただ気になっているのは
    >>@Webメソッド1⇒Webメソッド1⇒Webメソッド1
    >>AWebメソッド1⇒Webメソッド2⇒Webメソッド1
    >>
    >>上記@の場合はサクサク動いてくれるのですが、
    >>Aの場合は呼び出すメソッドが変わるたびに
    >>5秒程の時間(@に比べるとかなり遅い)かかります。
    >
    > メソッドが変わるたびに遅いのですか?
    > それはWebメソッド側のJITコンパイルとかの話ではなく、Webサービスの接続とかの問題って事はないですか?

    その可能性もあるのでしょうか。@のパターンがある以上、接続の問題は関係ないと考えていました。
    それと今試して気付いたのですが、Webサービスクラスはクライアントから要求があるたびに生成されるのですね。
    Webサービスクラスのコンストラクタに静的インスタンスを初期化する処理を加えたら
    @のパターンでも常に初期値を返すようになりました。
    本件の問題(Webメソッド1とWebメソッド2で静的インスタンスを共有できていない)
    これは静的インスタンスのスコープの問題なのでしょうか。

記事No.17274 のレス /過去ログ34より / 関連記事表示
削除チェック/

■17280  Re[2]: Webサービスのコンパイルタイミング
□投稿者/ 渋木宏明(ひどり) -(2008/04/21(Mon) 16:33:25)
>
    > 1仮想ディレクトリに1asmxファイルがあって、2Webメソッドが実装されているってことですか?
    > そうだとすれば、JITコンパイルは2Webメソッドまとめて行われますよ。

    そうなんでしたっけ?

    少なくとも Windows Forms では JIT はメソッド単位で行われます。

    ASP.NET もこれの応用なら、.aspx や .asmx への初回アクセスで .dll 作成、呼び出されたメソッドが順次 JIT されつつ実行、なのかと思ってました。
記事No.17274 のレス /過去ログ34より / 関連記事表示
削除チェック/

■17283  Re[3]: Webサービスのコンパイルタイミング
□投稿者/ ネタ好き -(2008/04/21(Mon) 17:39:44)
    2008/04/21(Mon) 17:48:27 編集(投稿者)

    列海王さんへ
    もしかしたら、違うセッションと判断されているのかもしれませんね。
    だから、メソッド2を呼び出した時点でインスタンスが新たに作られるのかも。
    ためしにWebサービス内でアプリケーションの情報を出力しては如何でしょうか?
    コンパイルについては、メソッド単位だと思います。
記事No.17274 のレス /過去ログ34より / 関連記事表示
削除チェック/

■17284  Re[4]: Webサービスのコンパイルタイミング
□投稿者/ 烈海王 -(2008/04/21(Mon) 17:45:54)
    No17283 (ネタ好き さん) に返信
    > 2008/04/21(Mon) 17:40:08 編集(投稿者)
    >
    > 列海王さんへ
    > もしかしたら、違うコネクションと判断されているのかもしれませんね。
    > だから、メソッド2を呼び出した時点でインスタンスが新たに作られるのかも。
    > ためしにWebサービス内でアプリケーションの情報を出力しては如何でしょうか?
    > コンパイルについては、メソッド単位だと思います。
    >

    なるほど、新たにインスタンスが作られるのであればこの動作は
    納得ですね。
    (さらに、同一のメソッドを連続して呼び出す場合はコンパイルは
    発生しないということですか、、)
    大変恐縮ですが、アプリケーションの情報はどのようなものを
    出力すればメソッド間の差異を効率よく発見できるのでしょうか。
    お手数ですが、ご教授下さい。

記事No.17274 のレス /過去ログ34より / 関連記事表示
削除チェック/

■17285  Re[5]: Webサービスのコンパイルタイミング
□投稿者/ ネタ好き -(2008/04/21(Mon) 17:54:20)
    2008/04/21(Mon) 18:06:17 編集(投稿者)
    2008/04/21(Mon) 17:55:06 編集(投稿者)

    烈海王 さんに返信
    例えば、

    public class Foo {
    private static DateTime timeStamp;

    [WebMethod]
    public static void Foo1(-省略-) {
    timeStamp = DateTime.Now;
    -省略-
    }

    [WebMethod]
    public static void Foo2(-省略-) {
    Debug.Write(timeStamp.ToString())
    }

    }

    ってな感じでどうでしょうか?
記事No.17274 のレス /過去ログ34より / 関連記事表示
削除チェック/

■17295  Re[6]: Webサービスのコンパイルタイミング
□投稿者/ 烈海王 -(2008/04/21(Mon) 18:36:39)
    下記のWebサービスを作成し、試してみました。
    Set()とGet()で情報の共有が出来ていることを確認しました。
    もし、メソッドごとにコンパイルが発生する場合、
    Set()で設定した情報はリセットされるものと
    考えてましたが、、、いかがでしょう。
    さらに、現在の私の問題に近づけるため、
    _xと_yを保持した静的クラスを別途設け、Set()とGet()で
    参照するようにしたところ、これも同一のインスタンスを
    参照できていました。

    public class Service : System.Web.Services.WebService
    {

    public Service () { }

    static int _x;
    static int _y;

    [WebMethod]
    public void Set(int x, int y) {
    _x = x;
    _y = y;
    }

    [WebMethod]
    public int Get()
    {
    return _x + _y;
    }

    }
記事No.17274 のレス /過去ログ34より / 関連記事表示
削除チェック/

■17299  Re[7]: Webサービスのコンパイルタイミング
□投稿者/ 渋木宏明(ひどり) -(2008/04/21(Mon) 20:06:15)
>
    > もし、メソッドごとにコンパイルが発生する場合、
    > Set()で設定した情報はリセットされるものと
    > 考えてましたが、、、いかがでしょう。

    「コンパイル」つーのがどういう動作を指しているかによって異なります。

    「.aspx や .asmx から .dll を生成する」のと「実行対象となったメソッドが JIT される」のはまったく別の動作です。
記事No.17274 のレス /過去ログ34より / 関連記事表示
削除チェック/

■17301  Re[8]: Webサービスのコンパイルタイミング
□投稿者/ なちゃ -(2008/04/21(Mon) 20:29:03)
    小さなサイトで何秒もかかるのは、アプリが再起動してる場合が多いです。
    ※もちろん他の可能性もありますが

    で、例えばbinディレクトリに書き込みしてないかとか、
    そういうところの方が確認が要りそうです。
記事No.17274 のレス /過去ログ34より / 関連記事表示
削除チェック/

■17302  Re[9]: Webサービスのコンパイルタイミング
□投稿者/ 烈海王 -(2008/04/21(Mon) 21:05:51)
    No17301 (なちゃ さん) に返信
    > 小さなサイトで何秒もかかるのは、アプリが再起動してる場合が多いです。
    > ※もちろん他の可能性もありますが
    >
    > で、例えばbinディレクトリに書き込みしてないかとか、
    > そういうところの方が確認が要りそうです。
    >

      !!!

      今、衝撃が走りました。

      Webメソッド2ではbinディレクトリ配下を操作しています。
      まだ試していませんが、恐らくこれですね・・・。



記事No.17274 のレス /過去ログ34より / 関連記事表示
削除チェック/

■17304  Re[10]: Webサービスのコンパイルタイミング
□投稿者/ 烈海王 -(2008/04/21(Mon) 21:15:35)
    今、確認しました。

    なちゃ さんの忠告どおり、binディレクトリ内の情報更新によって
    リコンパイルされていたことが原因です。
    別のことに気を取られていました。
    とてもお恥ずかしいです・・・。

    皆様ご協力ありがとうございました。

記事No.17274 のレス / END /過去ログ34より / 関連記事表示
削除チェック/



<< 0 >>

パスワード/

- Child Tree -