none
サーバサイド処理を即時開始したいけれど・・・。無理? RRS feed

  • 質問

  • サーバサイド処理を即時開始したいけれど・・・。無理?

    弱輩者@並平と申します。
    ASP.NET(C#) 2005/2008で開発前の事前調査中です。

    ASP.NET(C#)のサーバサイド処理にて、
    外部機器とTCP/IPソケット通信を
    行いたいと思っております。

    上記のソケットは、初回HTTPリクエストが
    発生する以前から接続しておく必要がある仕様です。
    つまりは、PC起動&IIS起動で即時ソケット通信を
    開始する必要があります。


    @上記は可能でしょうか?


    調べましたところ、
    Application_Start()は、初回HTTPリクエストで
    呼ばれるとのことで、挫折気味です。


    ご教授頂けますと大変助かります。

    2009年5月26日 10:12

回答

  • クライアント(ブラウザ)からの接続がこないことには、その処理をどの権限で動かせばいいのか確定しません。ですので、IIS内で実行することはできません。
    クライアントによらず接続したいのでしたら、別途サービスプロセスを立てることになるでしょう。
    • 回答としてマーク 並平 2009年5月27日 0:11
    2009年5月26日 10:57
  • ちなみに初回アクセスのApplication_Start()で
    スレッドを起動した場合、そのスレッドはその後、
    初回アクセス時のセッションがなくなった後も
    サーバサイドで常駐させることは可能と思っていますが、
    問題ございますでしょうか。

    もしかしたら問題があるかもしれません。

    IIS のバージョンと設定が不明なのと、「スレッド」が Web アプリケーション内なのか外部プロセスなのかが不明なので、明確には言えないのですが、
    例えば IIS 6.0 ですとワーカー プロセスはリサイクル設定に応じて自動で再起動されます。(リサイクル設定は無効にすべきでないと思います。)
    「スレッド」が Web アプリケーション内のスレッドを指す場合、リサイクル時に終了してしまうはずです。(試したわけではないですが。)
    • 回答としてマーク 並平 2009年5月27日 4:10
    2009年5月27日 2:39

すべての返信

  • クライアント(ブラウザ)からの接続がこないことには、その処理をどの権限で動かせばいいのか確定しません。ですので、IIS内で実行することはできません。
    クライアントによらず接続したいのでしたら、別途サービスプロセスを立てることになるでしょう。
    • 回答としてマーク 並平 2009年5月27日 0:11
    2009年5月26日 10:57
  • 佐祐理さま

    ご教示ありがとうございました。

    やはりそうですか。
    外部との通信部分は別アプリで
    設計することに致します。

    ちなみに初回アクセスのApplication_Start()で
    スレッドを起動した場合、そのスレッドはその後、
    初回アクセス時のセッションがなくなった後も
    サーバサイドで常駐させることは可能と思っていますが、
    問題ございますでしょうか。
    2009年5月27日 0:15
  • ちなみに初回アクセスのApplication_Start()で
    スレッドを起動した場合、そのスレッドはその後、
    初回アクセス時のセッションがなくなった後も
    サーバサイドで常駐させることは可能と思っていますが、
    問題ございますでしょうか。

    もしかしたら問題があるかもしれません。

    IIS のバージョンと設定が不明なのと、「スレッド」が Web アプリケーション内なのか外部プロセスなのかが不明なので、明確には言えないのですが、
    例えば IIS 6.0 ですとワーカー プロセスはリサイクル設定に応じて自動で再起動されます。(リサイクル設定は無効にすべきでないと思います。)
    「スレッド」が Web アプリケーション内のスレッドを指す場合、リサイクル時に終了してしまうはずです。(試したわけではないですが。)
    • 回答としてマーク 並平 2009年5月27日 4:10
    2009年5月27日 2:39
  • totojoさま

    ご教示ありがとうございました。

    IISは開発環境から実運用環境まで含めて
    Ver5.1(WinXP)、Ver6.0(Win2003Svr)、Ver7.0(Win2008Svr)
    で考えております。設定は未検討です。

    スレッドはWebアプリケーション内部で起動を考えておりましたが、
    皆様からご教示頂いた内容を含めて、以下の設計にしようと
    思っております。

    Client(ブラウザ)
     ↓[HTTP]
     ↓
    Webアプリ(ASP.NET/C#)
     ↓[TCP/IP]
     ↓セッション毎に通信スレッドを生成してJavaアプリと通信
     ↓
    Javaアプリ
     ↓[TCP/IP]
     ↓
    外部機器

    ※JavaアプリをC#アプリにして、Webアプリ(ASP.NET/C#)と
     .NET Rotingでプロセス間通信も良いですかね・・・。
    2009年5月27日 4:09