2011-12-16 143 views
0

我正在開發一個c#應用程序,其中服務器一次從多個客戶端獲取請求。每個客戶也從不同的數據庫獲取他們的數據。在這種情況下,有時會發生數據泄露,意味着客戶端從不正確的數據庫獲取數據。比如說client1應該從db1獲取數據,而client2從db2獲取數據。相反,他們從對面的數據庫獲取數據client1從db2獲取,client2從db1獲取。 我在下面添加收集數據的代碼。在c中實現隊列#

public string List() 
{ 
    Response.ContentType = ContentType.Xml; 

    try 
    { 
     ThingzFilter filter = null; 
     Dictionary<string, string> parameters = new Dictionary<string, string>(); 

     if (Id!="") 
     { 
      // get parameters from http request 
      foreach (HttpInputItem param in Request.Param) 
       parameters.Add(param.Name, param.Value); 

      setServerURLs(); 
      //Request.Clear(); 

      if (Request.QueryString["lang"].Value != null) 
      { 
       ThingzDB.TzThing.get_language = Request.QueryString["lang"].Value.ToString(); 
      } 
      else 
      { 
       ThingzDB.TzThing.get_language = SessionDatabase.DefaultLanguage; 
      } 
     } 

     ThingzDatabase db = SessionDatabase; 

     langStr = db.Language; 

     // this is run if there was no ID supplied 
     // which means we want all items of all types 
     if (Id == "") 
     { 
      if (Request.AcceptTypes == null) 
      { 
       //TypeController.session_id = Request.QueryString["sessionid"].Value; 

       jobs.Add(Request.QueryString["sessionid"].Value); 
       if (nextJobPos > jobs.Count - 1) 
        return ""; 
       else 
       { 
        TypeController.session_id = jobs[nextJobPos]; 
        nextJobPos++; 
        langStr = SessionDatabase.Language; 
       } 

       filter = new AllThingzFilter(SessionDatabase, parameters, langStr); 
       TypeController.session_id = ""; 
       filter.Execute(); 
      } 

在此服務器是控制檯應用程序和客戶端窗口其中站點名稱,意味着數據庫名稱被提及。 請給我一個解決方案來解決這個問題。

+0

難找出你的問題,因爲數據庫相關的問題大多不是客戶端的問題 – Youngjae 2011-12-16 12:22:22

回答

0

不完全知道如何SessionDatabase的作用範圍(從名字就似乎是一個會話變量),還是它的實現是做某種複雜的邏輯屬性,我猜你有兩個問題:

  • 將數值存儲在多個訪問它的客戶端的錯誤範圍內
  • 在您的代碼中可互換地使用dbSessionDatabase

對於後者,我將在代碼的頂部建議db = SessionDatabase一次(確保SessionDatabase是該客戶端的正確的事,然後使用db該方法的其餘部分。