2017-05-25 9 views
-1

Windowsサービスでgeniuneチャンネルのサーバーを開発中ですが、コンソールアプリケーションほどシンプルではないようです。サーバーを作成するスレッドがジョブを終了すると、スレッドスコープで宣言されたすべての変数が破棄され、クライアントはそのサーバーにもう接続できなくなります。コンソールアプリケーションでは、console.readline()を使用して回避することができますが、Windowsサービスの場合と同じではありません。したがって、最初のコードブロックは、サーバーを作成するWindowsサービススレッドのためのもので、もう1つはコンソールアプリケーションのためのものです。WindowsサービスのGeniuneチャンネルサーバー?

public void startServer() 
{ 
System.Configuration.ConfigurationSettings.GetConfig("DNS"); 
GenuineGlobalEventProvider.GenuineChannelsGlobalEvent += new GenuineChannelsGlobalEventHandler(GenuineChannelsEventHandler); 
var Path = AppDomain.CurrentDomain.BaseDirectory; 
RemotingConfiguration.Configure(Path + "Server.exe.config"); 
RemotingServices.Marshal(new Agent(), "Server.rem"); 
} 


static void Main(string[] args) 
{ 
System.Configuration.ConfigurationSettings.GetConfig("DNS"); 
GenuineGlobalEventProvider.GenuineChannelsGlobalEvent += new GenuineChannelsGlobalEventHandler(GenuineChannelsEventHandler); 
var Path = AppDomain.CurrentDomain.BaseDirectory; 
RemotingConfiguration.Configure(Path + "Server.exe.config"); 
RemotingServices.Marshal(new Agent(), "Server.rem"); 
Console.ReadLine(); 
} 

私は何かを欠場しましたか?どのようにしてサーバーの可用性を達成できますか?

+0

ここの質問は...? –

+0

こんにちは、私は質問を編集:)! –

答えて

0

Startが呼び出されたときにサービスクラスにを格納して、Stopが呼び出されたときにサービスシャットダウンで処分してください。

これが問題なら、コンソールアプリケーションのどちらかがうまく動作する理由はありません。 C#はC++ではなく、スコープを離れるときに呼び出されるデストラクタはありません。また、なぜ何かの代わりにリモーティングがサポートされていますか?

+0

私は両方の側に2つのポートを開くことなくクライアントとサーバー間の双方向TCP通信を作成する必要があるので。 .Net Remotingはファイアウォールに適しています。 –

+0

Ha、それは面白いですが、私は、同じ理由で、リモーティングの使用をやめて、WCFに切り替えるべきだと人々が言うと聞きます。私たちが生きている生活 – dsolimano

関連する問題