[英]Best way to mark Client Offline using Web-Service
目前,我正在使用Web服務,其中“客戶的持續”應該更新Data。 因此,Web服務具有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();
}
}
}
而不是WebService上的一個線程,該線程監視Client是否應從列表中刪除:
public void CheckClients()
{
while (true)
{
foreach (Client c in clients)
{
if (c.ShouldDispose)
{
clients.Remove(c);
}
}
Thread.Sleep(200);
}
}
因此,問題是,如何正確地在線程中使用此方法,應該在WebService Constructor上創建並啟動線程,還是有一種更好的方法。 我無法想象如何從List<Client> clients;
刪除特定客戶端的最佳方法List<Client> clients;
您可以使用System.Web.HttpRuntime.Cache
類,而不是實現自己的類。
您的代碼還有其他一些問題。 對Counter
和clients
訪問不受控制,這些訪問在線程之間共享。 您應該使用一些同步。 訪問這些對象時使用諸如lock
機制( 如果您已經將其聲明為ConcurrentDictionary
則可以忘記我對clients
評論 )
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.