使用web服务标记客户端脱机的最佳方法
本文关键字:脱机 最佳 方法 客户端 web 服务 使用 | 更新日期: 2023-09-27 18:14:04
目前我正在与客户端不断更新数据的web服务合作。因此,WebService有一个List<Client> clients;
,它存储连接的客户端:
[WebMethod]
public string Connect(Size desktopsize)
{
Client clienti = new Client();
clienti.ID = "Client_" + Counter.ToString();
clienti.Desktopsize = desktopsize;
clienti.Lastupdate = DateTime.Now;
Counter++;
clients.Add(clienti);
return clienti.ID;
}
所以每个客户端都有一个ID,并继续更新它的数据。我需要标记一个客户端离线,而不是当一个特定的客户端的最后更新是1分钟前。(我也更新UpdateTime每次当一个值被改变例如:
public bool SingleClick
{
get
{
bool tmpBolean = singleclick;
singleclick = false;
return tmpBolean;
}
set
{
this.lastupdate = DateTime.Now;
singleclick = value;
}
}
首先我在客户端创建了一个线程
private void CheckOnlinestate()
{
while (isRunning)
{
TimeSpan ts = DateTime.Now - lastupdate;
if (ts.TotalMinutes >= 1)
{
isRunning = false;
this.Dispose();
}
}
}
>
public void CheckClients()
{
while (true)
{
foreach (Client c in clients)
{
if (c.ShouldDispose)
{
clients.Remove(c);
}
}
Thread.Sleep(200);
}
}
所以问题是,如何使用这个方法到一个线程正确,我应该创建和启动线程在WebService构造器,或者有一个更好的方法来做到这一点。我无法想象从List<Client> clients;
中删除特定客户端的最佳方式
您可以使用System.Web.HttpRuntime.Cache
类而不是自己实现。
你的代码还有其他一些问题。对Counter
和clients
的访问是不受控制的,它们在线程之间共享。你应该使用一些同步。机制,如lock
,而访问这些对象(你可以忘记我对clients
的评论,如果你已经声明为ConcurrentDictionary
)