【发布时间】:2011-12-16 12:17:32
【问题描述】:
我正在开发一个 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();
}
在此服务器中是控制台应用程序,客户端是站点名称的窗口,这意味着提及数据库名称。 请给我一个解决方案来解决这个问题。
【问题讨论】:
-
很难找出你的问题。因为数据库相关的问题大多不仅仅是客户端的问题。
-
实际上是会话 id 的问题,仅根据会话 id 获取数据。
-
快速提示:检查空字符串时,例如使用您的
if-statement:if (Id!="");你真的应该使用string.IsNullOrEmpty(...)或string.IsNullOrWhitespace(...)。 -
这是多线程的吗?也许你有一个竞争条件。当您获得 client1 的 session_id 并尝试为他获取数据时,client2 加入并覆盖 session_id。
-
“SessionDatabase”存储在哪里?
标签: c#