2010-01-07 45 views
2

我有許多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服務或類似的東西嗎?)

+2

這是強制許可條款相當惡劣的方式提出。您的用戶會討厭它,如果它不是101%可靠,就會給您無盡的痛苦。不要建立它,購買它。 – 2010-01-07 02:34:33

+0

它停止接受請求我相信,該服務仍在運行,它會記錄錯誤,但需要重新啓動才能使其正常工作。有什麼地方可以閱讀關於附加調試器和調試Windows服務的信息嗎?我在黑暗中對他們沒有做太多的事情。 @nobugz:是啊這是我的問題告訴我在哪裏買它來做我想做的事情。這是一個相當簡單的服務器,應該可以正常工作,並且直到最近我們開始出現問題時都能正常工作。我還有一個完美的備份許可證文件系統。 – RodH257 2010-01-07 02:51:32

+0

感謝隊友多數民衆贊成什麼我後,第三方軟件或地方的建議我可以去學習 – RodH257 2010-01-07 07:03:27

回答

1

結束了使用CryptoLicensing作爲評論

+0

爲什麼downvote呢?我該怎麼辦? – RodH257 2010-06-10 07:21:03

0

它可能與對象到期有關。嘗試添加這對您的服務器類:

public override object InitializeLifetimeService() 
    { 
     return null; 
    } 
相關問題