在我的Asp.Net Web服務中,我使用下面的2方法將現有客戶端的狀態更改爲名爲ClientStatus的全局列表oblocation。這個全局列表從多個客戶端修改,但以安全的方式(鎖定)。對象引用未設置爲ASP.Net中對象的實例webservice
private static List<ActiveClient> ClientStatus = new List<ActiveClient>();
public static void SetClinetStatus(string ClientID, int clinetstatus)
{
ActiveClient activeClient=null;
try
{
activeClient = GetClient(ClientID);
if (activeClient != null)
{
activeClient.statuschanged = true;
activeClient.status = clinetstatus;
}
}
catch (Exception ex)
{
WebserviceLog.Debug(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType + "::" + System.Reflection.MethodBase.GetCurrentMethod().ToString() + ":" + ex.Message);
}
}
public static ActiveClient GetClient(string clientID)
{
ActiveClient activeClient = null;
try
{
lock (ClientStatus)
{
activeClient = ClientStatus.Find(c => c.clinetID == clientID);
}
}
catch (Exception ex)
{
throw ex;
}
return activeClient;
}
我用下面的代碼的值傳遞給SetClinetStatus(字符串客戶端ID,INT clinetstatus)方法
string errorData = Encoding.Default.GetString(data);
string[] tokens = errorData.Split(new string[] { ":" }, StringSplitOptions.RemoveEmptyEntries);
if (tokens.Length == 2)
{
SessionVariables.SetClinetStatus(tokens[0],Convert.ToInt32(tokens[1]));
}
但有時(每次不)我得到
對象未設置爲對象實例的引用
形式
activeClient = GetClient(ClientID);
我不明白爲什麼它正在發生,並沒有看到任何問題都有。
有沒有人看到有任何問題負責這種異常。
編輯
在全局列表中,我只添加客戶通過以下方法,在這裏clientID的將來自直接web服務方法。並在另一端(從客戶端ID來的地方)我添加了一個檢查,以不清空或清空clientID。
public static void AddClient(string clientID)
{
try
{
lock (ClientStatus)
{
ClientStatus.Add(new ActiveClient { clinetID = clientID });
}
}
catch (Exception ex)
{
WebserviceLog.Debug(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType + "::" + System.Reflection.MethodBase.GetCurrentMethod().ToString() + ":" + ex.Message);
}
}
和ActiveClient
類結構是
public class ActiveClient
{
public ActiveClient()
{
clinetID = string.Empty;
status = 0;
statuschanged = false;
}
public string clinetID { get; set; }
public int status { get; set; }
public bool statuschanged { get; set; }
}
'罰球前;'是通常非常糟糕的做法,c改變爲'投擲;'。 – Andrei
ClientStatus在何處/何時初始化? – Riv
'ClientStatus'可能是這裏的問題,但是在你的代碼中沒有設置它的位置。 @Andrei只是補充一點,它也不是一個好主意,要麼趕上'Exception' ... – James