在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();
}
在此服务器是控制台应用程序和客户端窗口其中站点名称,意味着数据库名称被提及。 请给我一个解决方案来解决这个问题。
答
不完全知道如何SessionDatabase
的作用范围(从名字就似乎是一个会话变量),还是它的实现是做某种复杂的逻辑属性,我猜你有两个问题:
- 将数值存储在多个访问它的客户端的错误范围内
- 在您的代码中可互换地使用
db
和SessionDatabase
。
对于后者,我将在代码的顶部建议db = SessionDatabase
一次(确保SessionDatabase
是该客户端的正确的事,然后使用db
该方法的其余部分。
难找出你的问题,因为数据库相关的问题大多不是客户端的问题 – Youngjae 2011-12-16 12:22:22