我有許多C#軟件應用程序,它們是具有.net API的軟件的加載項。幫助爲我的應用程序創建/調試C#許可證服務器
用於軟件許可目的我需要許可證服務器。我這有,此刻,這是它做什麼:
- 運行的工具時,它接觸與它的計算機名和用戶名
- 服務器臨危此請求的許可證服務器,登錄請求,看到和檢查是否從該machien和或用戶請求的數量已經超過了預先配置的最大(2種不同的許可類型)
- 爲此,它使用一個加密文件,它列出了時間,計算機名,用戶名等
- 如果它確定,它將返回OKAY對計算機的響應,然後該工具運行
- 如果它不返回任何東西,或者如果它返回一個不正常響應該工具將無法運行(該軟件只運行的時間很短,但regulary跑,而不是開很長一段時間)
這工程很好,除了我有一個問題,服務器隨機崩潰,用戶無法進入它。
這是我所做的第一個客戶端服務器應用程序,我有點在黑暗中(感覺我正在重新發明常用的東西),有沒有什麼好的指南來創建一些東西像那樣?我的應用程序非常簡單,我在服務器上運行一個服務,在TCP端口上循環監聽,等待要發送的內容。
public void StartListening()
{
Listening = true;
// Set the TcpListener on port 41616.
Int32 port = 41616;
IPAddress localAddr = IPAddress.Any;
// TcpListener server = new TcpListener(port);
server = new TcpListener(localAddr, port);
// Start listening for client requests.
server.Start();
Listen();
}
public void Listen()
{
try
{
// Buffer for reading data
Byte[] bytes = new Byte[256];
String data = null;
// Enter the listening loop.
while (Listening)
{
TcpClient client = server.AcceptTcpClient();
// Get a stream object for reading and writing
NetworkStream stream = client.GetStream();
int i;
// Loop to receive all the data sent by the client.
while ((i = stream.Read(bytes, 0, bytes.Length)) != 0)
{
// Translate data bytes to a ASCII string.
data = System.Text.Encoding.ASCII.GetString(bytes, 0, i);
Console.WriteLine("Received: {0}", data);
string returnData;
// Process the data sent by the client.
data = data.ToUpper();
byte[] msg = null;// DO STUFF BASED ON DATA
// set returnData to be the response (ie OKAY)
msg = System.Text.Encoding.ASCII.GetBytes(returnData);
// Send back a response.
stream.Write(msg, 0, msg.Length);
Console.WriteLine("Sent: {0}", returnData);
// Shutdown and end connection
client.Close();
}
}
catch (Exception ex)
{
//LOG ERROR
}
finally
{
Listening = false;
server.Stop();
}
}
我有一種感覺,服務器的某處掛在許可證日誌的加密/解密,因爲服務器運行正常了一陣然後就停止了,如果我再重新創建許可證記錄它的工作原理。但是,那不是這篇文章的點(雖然爲什麼我得到這個錯誤任何提示:
Error occured: Unable to read data from the transport connection: An existing connection was forcibly closed by the remote host. at System.Net.Sockets.NetworkStream.Read(Byte[] buffer, Int32 offset, Int32 size) at BWSSLicenseServer.LicenseServer.Listen()
woudl是巨大的)
我的問題是 - 如何在.NET調試這容易嗎?有沒有什麼好的指導來幫助我?或者有沒有免費的框架?我應該以一種完全不同的方式來執行這個代碼(WCF,Web服務或類似的東西嗎?)
這是強制許可條款相當惡劣的方式提出。您的用戶會討厭它,如果它不是101%可靠,就會給您無盡的痛苦。不要建立它,購買它。 – 2010-01-07 02:34:33
它停止接受請求我相信,該服務仍在運行,它會記錄錯誤,但需要重新啓動才能使其正常工作。有什麼地方可以閱讀關於附加調試器和調試Windows服務的信息嗎?我在黑暗中對他們沒有做太多的事情。 @nobugz:是啊這是我的問題告訴我在哪裏買它來做我想做的事情。這是一個相當簡單的服務器,應該可以正常工作,並且直到最近我們開始出現問題時都能正常工作。我還有一個完美的備份許可證文件系統。 – RodH257 2010-01-07 02:51:32
感謝隊友多數民衆贊成什麼我後,第三方軟件或地方的建議我可以去學習 – RodH257 2010-01-07 07:03:27