ServiceHostオブジェクトを開くWindowsNTサービスがあります。サービスホストコンテキストはセッションごとであるため、クライアントごとに新しいワーカースレッドが作成されます。私がやろうとしているのは、各ワーカースレッドにサービスホストを開始したスレッドを呼び出させることです。NTサービスは、VPN接続を開き、リモートネットワーク上のデバイスから情報をポーリングする必要があります。情報は、ワーカースレッドが読み取るためにSQLデータベースに保存されます。クライアントが接続されている場合にのみデバイスをポーリングしたいので、ネットワークトラフィックが減少します。ワーカースレッドがサービスホストスレッドに情報を要求していることを通知し、データベースのポーリングと更新を開始するようにしたいと思います。デバイスが常にポーリングされ、データベースが更新されている場合は、すべてが機能しています。
1087 次
2 に答える
1
シングルトンを実装し、サービスの作成後にこのプロパティを初期化してみませんか。その後はいつでも参照できます。
private static MyService m_ServiceInstance;
public static MyService ServiceInstance
{
get { return m_ServiceInstance; }
}
于 2011-05-16T01:43:52.333 に答える
0
VPN 接続を開いて情報をポーリングするコードを独自のシングルトン サービスに変換し、同じ (または異なる) Windows NT サービスでホストすることをお勧めします。クライアント向けサービスは、WCF を使用して VPN サービスを呼び出します。VPN サービスは、クライアント向けサービスが「リッスン」している場合にのみポーリングします。
これにはいくつかの利点があります。
- WCF は、サービス インスタンスの作成とスレッドの管理の複雑さを処理します。(シングルトン内では、おそらくロックを実装する必要がありますが、それだけです。)
- VPN ポーリング サービスは、クライアント向けサービスと密接に結合されなくなりました。これにより、展開の柔軟性と、将来の新しいユース ケースをサポートする機能が提供されます。
于 2011-05-17T05:41:18.307 に答える