2

ServiceHostオブジェクトを開くWindowsNTサービスがあります。サービスホストコンテキストはセッションごとであるため、クライアントごとに新しいワーカースレッドが作成されます。私がやろうとしているのは、各ワーカースレッドにサービスホストを開始したスレッドを呼び出させることです。NTサービスは、VPN接続を開き、リモートネットワーク上のデバイスから情報をポーリングする必要があります。情報は、ワーカースレッドが読み取るためにSQLデータベースに保存されます。クライアントが接続されている場合にのみデバイスをポーリングしたいので、ネットワークトラフィックが減少します。ワーカースレッドがサービスホストスレッドに情報を要求していることを通知し、データベースのポーリングと更新を開始するようにしたいと思います。デバイスが常にポーリングされ、データベースが更新されている場合は、すべてが機能しています。

4

2 に答える 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 に答える