私のWCFサービス開始直後に何かしたい。どのようにそれを行うことができますか?私のWCFサービス開始時に何かをする
実際、10分ごとにサービスの一部の変数を更新する必要があります。だから私はスレッドに私の更新コードを入れました。しかし、サービスが開始されたときにこのスレッドをどのように開始するのか分かりません(WCFサービスでForm_Loadイベントが好きですか?)
私のWCFサービス開始直後に何かしたい。どのようにそれを行うことができますか?私のWCFサービス開始時に何かをする
実際、10分ごとにサービスの一部の変数を更新する必要があります。だから私はスレッドに私の更新コードを入れました。しかし、サービスが開始されたときにこのスレッドをどのように開始するのか分かりません(WCFサービスでForm_Loadイベントが好きですか?)
サーバ上でスレッドを実行するのは難しいです。最後のセッションが終了すると、アプリケーションはシャットダウンします。一部のホスティングプロバイダは、スレッドを実行し続けるチャンスを奪うスケジュールでアプリケーションプールもリサイクルします。
これ以外にも、WCFサービスは実際には実行されません。リクエストによってトリガーされたWebページのように動作します。 initコードを追加するには、Application_Start
にGlobal.asax
が入ります。これは、アプリケーションが起動すると(最初の要求が行われたとき)一度呼び出されます。
サービスのリクエストごとに何かを行う場合は、Application_BeginRequest
イベントもGlobal.asax
に接続することができます。
'Global.asax'? ;) – Marc
@Marc:P - fixed – TheCodeKing
Windowsサービスまたは自己ホストアプリケーションでWCFをホストするとどうなりますか?そこにはglobal.asaxはなく、その意味ではWebアプリケーションとして動作しません。 Plus WCFはセッションをまったく使用しないことがあります。 – oleksii
WCFサービスには、通常、何かをする準備ができているメモリに「まっすぐ」ある部分はありません.... WCFはではありません ASP.NET!
IISでホストしているデフォルトの設定はこれです:
IISは、要求のための特定のポート/ URLでリッスン - メモリ内のどこにでもあなたのWCFサービスの単一のトレースがありません
最初の要求が到着すると、IISはServiceHost
- サービスを "ホスト"できるクラスをスピンアップします。
このサービスホストは、要求が来て、ターゲットURLによって異なりますどのサービスクラスがこの要求を処理するためにインスタンス化するか。サービスクラス(あなたのサービスの実装)が、その後に作成され、そのサービスクラスの適切なメソッドが呼び出されて実行され、そしてそれが終わると、サービスクラスは
だから基本的に、あなたの二点がある配置されています。あなたはそれはあなたがあなたのサービスクラスメトのそれぞれにいくつかの「初期化」のコードを追加することができます
ServiceHost
クラスを作成することができ
:にフックすることができます
ニーズを処理するためのdsがあなたのサービスの開始時にコンストラクタを呼び出すインスタンス化サービスを、作成することができます。このサービス上のGetData()を呼び出す
[ServiceContract]
[ServiceBehavior(InstanceContextMode = InstanceContextMode.Single)]
public class InstanceService
{
private int _intValue;
public InstanceService()
{
_intValue = 456;
}
[OperationContract]
public int GetData()
{
return _intValue;
}
}
はと整数を返します。 456の値。
このようなシングルトンサービスのインスタンスには、1)リクエストをシリアライズし、順番に処理することにより、潜在的に大きなボトルネックを引き起こすか、2)完全にマルチスレッド対応のプログラミングが必要です。エラーを起こしやすい。可能であればシングルトンを避けるようにしようと思います。 –
あなたは正しいです、これは非常に特定の状況においてのみ有用であると言及するのを忘れていました。 – CodeCaster
これは、これをホストする方法を制御できる場合に達成できます。できる場合は、WCFサービスをWindowsサービスまたはアドホック実行可能ファイルとしてホストします。そして、あなたが望むものを簡単に達成することができます。IISホスティングにバインドされている場合は、他の人が提案し、要求ごとに処理するようにする必要があります。
IISが必要ない場合は、自己ホスティングwcfを参照してください。
どのようにwcfサービスをホストしていますか? – Jan