在c中实现队列#

问题描述:

我正在开发一个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

不完全知道如何SessionDatabase的作用范围(从名字就似乎是一个会话变量),还是它的实现是做某种复杂的逻辑属性,我猜你有两个问题:

  • 将数值存储在多个访问它的客户端的错误范围内
  • 在您的代码中可互换地使用dbSessionDatabase

对于后者,我将在代码的顶部建议db = SessionDatabase一次(确保SessionDatabase是该客户端的正确的事,然后使用db该方法的其余部分。