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

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

C# と VB.NET の入門サイト

Re[4]: ASPにてバックグラウンドプログラム


(過去ログ 47 を表示中)

[トピック内 5 記事 (1 - 5 表示)]  << 0 >>

■25629 / inTopicNo.1)  ASPにてバックグラウンドプログラム
  
□投稿者/ 麦 (1回)-(2008/09/24(Wed) 11:20:51)

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

はじめまして

ASP + C#2005にて開発を行っています。
通常ASPはアクセスがあったときのみプログラムが実行されると認識していますが、
アクセスが無い場合でもバックグラウンドで実行するプログラムは作れないものでしょうか。

具体的には以下のようなものをASPのみで出来ないか考えています。
 1.TCPパケットの受信プログラムをバックグラウンドで走らせておき、
  受信したデータをDB登録する。
 2.WEBにアクセスがあったときにASPにてDB情報をWEBに表示する。

現在は「1.」をWindowsアプリにてバックグラウンドプログラムを作成していますが、
これを無くしたいと考えています。
引用返信 編集キー/
■25719 / inTopicNo.2)  Re[1]: ASPにてバックグラウンドプログラム
□投稿者/ Jitta (512回)-(2008/09/24(Wed) 21:27:24)
Jitta さんの Web サイト
No25629 (麦 さん) に返信
> ASP + C#2005にて開発を行っています。
 C# ということなので、ASP は、あり得ないと思います。
(ASP.NET の前身として、ASP があります。)

>  1.TCPパケットの受信プログラムをバックグラウンドで走らせておき、
>   受信したデータをDB登録する。
>  2.WEBにアクセスがあったときにASPにてDB情報をWEBに表示する。
 データベースへ格納する部分と、ASP.NET は完全に分離できると思います。そのため、ASP.NET 上に実装する必要はないと思います。しかし、Windows アプリケーションにすることは、問題です。
 まず、ASP.NET ですが、「最初のアクセスがあるまでは、プログラムは起動しません」。したがって、サーバーが起動してから、誰かがアクセスをするまでの間に発生した通信内容は失われます。
 同じように、ASP.NET のワーカー プロセスが再起動すると、通信スレッドも停止します。
 これらのことは、望ましい動作ではないと思います。

 Windows アプリケーションですが、「サーバー上でログオンしたアカウントがないと動作しません」。したがって、サーバーがリブートなどで全プロセスを止めた後、誰かがログオンして動かさなければならず、ログオフすることができません。
 もっとも、タスクマネージャに登録して、起動と同時に特定のユーザーで動作させることはできます。

 それよりもおすすめなのは、Windows サービスとして実装することです。どうせ UI は必要ないのですよね?そうであれば、Windows サービスを勧めます。


 あるいは、「通信の必要があるのは、アクセスしてきたユーザが、システムにアクセスしている間だけ」というのであれば、多重アクセスの時に通信ポートが使用中になるという問題が発生すると思います。

引用返信 編集キー/
■25768 / inTopicNo.3)  Re[2]: ASPにてバックグラウンドプログラム
□投稿者/ 麦 (2回)-(2008/09/25(Thu) 17:03:07)
返信有難うございます。

>  データベースへ格納する部分と、ASP.NET は完全に分離できると思います。そのため、ASP.NET 上に実装する必要はないと思います。しかし、Windows アプリケーションにすることは、問題です。
>  まず、ASP.NET ですが、「最初のアクセスがあるまでは、プログラムは起動しません」。したがって、サーバーが起動してから、誰かがアクセスをするまでの間に発生した通信内容は失われます。
>  同じように、ASP.NET のワーカー プロセスが再起動すると、通信スレッドも停止します。
>  これらのことは、望ましい動作ではないと思います。
>
>  Windows アプリケーションですが、「サーバー上でログオンしたアカウントがないと動作しません」。したがって、サーバーがリブートなどで全プロセスを止めた後、誰かがログオンして動かさなければならず、ログオフすることができません。
>  もっとも、タスクマネージャに登録して、起動と同時に特定のユーザーで動作させることはできます。
>
>  それよりもおすすめなのは、Windows サービスとして実装することです。どうせ UI は必要ないのですよね?そうであれば、Windows サービスを勧めます。

お恥ずかしい話ですがWindowsサービスという存在を始めて知った次第です。
仰るとおり、UIは必要ありませんのでWindowsサービスとしての実装を以下のように行おうと思います。

 1.WindowsサービスでTCPパケットの受信機能
   受信時⇒DB登録
 2.WEBにアクセスがあったときにASP.NetにてDB情報をWEBに表示する。


>  あるいは、「通信の必要があるのは、アクセスしてきたユーザが、システムにアクセスしている間だけ」というのであれば、多重アクセスの時に通信ポートが使用中になるという問題が発生すると思います。

今後、
 3.WEB上のボタンイベントをトリガーとしてTCPパケットを送信する
という機能も加えていきたいのですが、
リソースの一元管理や排他制御を考え、TCPパケット送信機能もWindowsサービスとして登録しておいたほうがよろしいでしょうか?
また、この場合の「ASP.Net⇒Windowsサービス」間のデータ転送方法としてはプロセス間通信で行うのが一般的でしょうか?
(この質問は新トピックにしたほうがよろしいですか?)
引用返信 編集キー/
■25778 / inTopicNo.4)  Re[3]: ASPにてバックグラウンドプログラム
□投稿者/ 片桐 (115回)-(2008/09/25(Thu) 19:19:15)
ASP.NETとWindowsサービスとのやりとりなら、プロセス間通信で十分ですよ。

ただ、Windowsサービスを開発される場合には、アクセス権限やスレッド起動監視時間とか、独特のルールというかクセがあるので、MSDNの一読をお勧めします。あと、動作がマルチスレッド処理になるので、それについても少々理解が必要です。
リモーティングプログラムなら、そのスレッドをWindowsサービスから起動しておけばいつでもプロセス間通信できちゃうので送受信用のポートも一個ですむんじゃないかしら。
引用返信 編集キー/
■25831 / inTopicNo.5)  Re[4]: ASPにてバックグラウンドプログラム
□投稿者/ 麦 (3回)-(2008/09/26(Fri) 11:34:06)
返信有難うございます。

> ただ、Windowsサービスを開発される場合には、アクセス権限やスレッド起動監視時間とか、独特のルールというかクセがあるので、MSDNの一読をお勧めします。あと、動作がマルチスレッド処理になるので、それについても少々理解が必要です。

注意点のご指摘有難うございます。
Windowsサービスの注意点を勉強してから取り掛かろうと思います。
マルチスレッド処理については多少経験があります。


> リモーティングプログラムなら、そのスレッドをWindowsサービスから起動しておけばいつでもプロセス間通信できちゃうので送受信用のポートも一個ですむんじゃないかしら。

私の考え違いであったなら申し訳ないのですが、以下の理解で相違があればご指摘願います。

・Windowsサービス機能
  TCP受信スレッド(DBへ登録)
  TCP送信スレッド
  プロセス間通信受信スレッド(TCP送信スレッドへ送信)

・ASP.NET機能
  DB情報表示
  プロセス間通信送信

片桐さんが仰っている「送受信用のポートも一個で…」とは、
上記のようにするとTCPのポートが"送信受信で同じポートが使える"という意味でしょうか?
逆にポートが一個ですまない場合というのはどんな場合でしょうか?
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -