2013-05-10 155 views
0

問候!多客戶端連接時C#服務器程序掛起

我有一個C#控制檯應用程序,它是作爲Windows服務在現場機器安裝的。此應用程序充當服務器並使用http和https服務。與客戶端URLS的Tiny HTTP服務器開放源碼通信使用。有90個客戶端使用使用flex開發的客戶端程序訪問服務器中的數據。這個Flex應用程序連接到服務器,如下,

登錄網址

try 
{ 
    if(!Request.Uri.AbsoluteUri.Contains("https")) 
     System.Threading.Monitor.Enter(Lock); 
    if (Request.Method == Method.Post) 
    { 
     SiteSession siteSession = _login(Request.Form["SiteName"].Value.Trim(), 
             Request.Form["UserName"].Value.Trim(), 
             Request.Form["Password"].Value.Trim()); 
     if (siteSession != null) 
     { 
      if (siteSession.authenticated) 
      { 
       User currentUser = siteSession.thingzDatabase.currentUser; 
       _database = siteSession.thingzDatabase; 

          -------- 

項目/詳細網址,如http:\域名:端口\項目\詳細\ temid 一個客戶端調用近70的URL,並從數據服務器數據庫。總共90多個客戶端

當項目/列表被稱爲下面的代碼執行。

if (Id == "") 
{ 
    //System.Threading.Monitor.Enter(_locker); 
    System.Threading.Monitor.Enter(Lock); 
    try 
    { 
    if (Request.AcceptTypes == null) 
    { 

     TypeController.session_id = Request.QueryString["sessionid"].Value; 

     //queue. 
     Enqueue(Request.QueryString["sessionid"].Value); 

     //string que = ""; 

     ////do 
     ////{ 
     //que = queue.Dequeue(); 
     //TypeController.session_id = que; 

     langStr = SessionDatabase.Language; 
     filter = new AllThingzFilter(SessionDatabase, parameters, langStr); 

     TypeController.session_id = null; 

     filter.Execute(); 
           -------- 

有一位管理員使用具有不同端口號的安全https服務將數據更新/寫入服務器數據庫。 相同的登錄網址調用和其他post和get方法將在管理員登錄中調用。

服務器中使用的數據庫是sqlite。現在讓我解釋我的問題, 我收到客戶的投訴,稱服務器被吊死,管理員無法登錄。或者,如果登錄無法儘快上傳任何圖像,則任何數據庫更新都會執行,服務器將掛起。所以需要重新啓動Windows服務。

當管理員對服務器數據庫執行CRUD操作時。與此同時,客戶端應用程序(flex)應用程序也嘗試從服務器獲取數據。該URL每5分鐘從客戶端應用程序調用一次。

可能是什麼問題,我該如何解決這個服務器的問題。這是一個讀取或寫入問題的SQLite數據庫。 請幫助我提出寶貴的建議。

問候 桑傑塔

+0

您可能需要添加一些跟蹤和/或記錄到服務器應用程序。這應該會提供更多關於錯誤發生的信息。 – 2013-05-10 16:13:10

+1

問題幾乎肯定與您的鎖定代碼有關;如果您不小心將鎖定區域最小化並正確釋放它們,則很容易導致服務器死鎖。 – EricLaw 2013-05-10 16:38:30

+0

@Sangeetha。當你說服務器掛起時,你的意思是說windows服務已經停止,或者它仍在運行但是沒有響應? – 2013-05-11 21:08:15

回答

0

的解決方案是從DB CRUD操作分開ASP.NET Web角色/隸屬函數:後者要麼實現自己的自主安全模式,或使用從角色/成員輸入類。

+0

該項目沒有包含asp.net應用程序。後端是用於處理http請求和數據庫的c#。前端是flex應用程序。 – Sangeetha 2013-05-10 16:03:10

+0

好的,C#代碼所在的位置在哪裏? – 2013-05-10 16:05:00

+0

c#控制檯應用程序,並作爲Windows服務安裝在生產機器中。 – Sangeetha 2013-05-10 16:30:42