2017-05-25 36 views
-1

我正在開發一個windows服務中的geniune頻道的服務器,它似乎並不像控制檯應用程序那麼簡單。當創建服務器的線程完成其作業時,線程作用域中聲明的所有變量都將被銷燬,因此客戶端無法再連接到該服務器。使用控制檯應用程序,我們可以通過console.readline()來避免這種情況,但對於Windows服務來說情況並非如此。因此,第一個代碼塊用於創建服務器的Windows服務線程,第二個代碼塊用於控制檯應用程序。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

嘗試將Agent存儲在您的服務類時Start被調用,並在服務關閉的要求進行處置時Stop被調用。

請注意,如果這是問題,那麼控制檯應用程序也沒有什麼好的理由。 C#不是C++,在離開作用域時不會調用析構函數。另外,爲什麼遠程處理而不是更多的支持?

+0

因爲我需要在客戶端和服務器之間創建雙向TCP通信而無需在兩端打開兩個端口。 .Net Remoting是防火牆友好的。 –

+0

哈,這很有趣,通常我聽到有人說我們應該停止使用遠程處理,並出於同樣的原因切換到WCF。我們生活的是多麼的生活。 – dsolimano