在c#中实现队列

时间:2011-12-16 12:17:33

标签: c#

我正在开发一个c#应用程序,其中服务器一次从许多客户端获取请求。每个客户端也从不同的数据库中获取数据。在这种情况下,有时会发生数据泄漏,这意味着客户端从不正确的数据库中获取数据。比方说,client1应该从db1获取数据,client2从db2获取数据。相反,他们从相反的数据库获取数据client1从db2获取,client2从db1获取。 我在下面添加了收集数据的代码。

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();
            }

在此服务器中是控制台应用程序,客户端是站点名称的窗口,表示提到数据库名称。 请给我一个解决方案来解决这个问题。

1 个答案:

答案 0 :(得分:0)

如果没有准确地知道SessionDatabase是如何定义的(从名称看来它似乎是一个会话变量),或者它的实现是否是一个执行某种复杂逻辑的属性,我猜你有两个问题:< / p>

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

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