[問題] client傳送同一參數至server互蓋問題
抱歉因為才殊學淺 不太懂這是哪個範疇的問題 若以下太多贅述請見諒
我們打算用winform在一個開發已久的舊系統上 加上一個記錄client端行為的功能
類似於clinet端至server查詢資料一次
我們就要在server上記錄每個client的使用者名稱 以及他們查了什麼資料
用的是三層式的網路架構
也就是clinet端安裝我們的應用程式 透過dll連到server端去執行功能
目前連線程式是共用的 所有class及method及變數等等都宣告為static
(所以要新加任何東西都只能用static)
先假定Client呼叫的方式為ServerClass.QueryData(Sql, Connection , ClientInfo)
為了不修改到前端程式 我們也不能增減QueryData的參數
而我們取得client端資訊的方式主要是透過ClientInfo這個參數
這個變數在進到QueryData後 會被存在一個全域的static變數中 供其他function使用
(真正記錄查詢資料的是另一個function, 且這個function不能直接被QueryData呼叫)
ClientInfo的class內容大約可以簡略如下:
class ClientInfo
{
public string UserID
{ get { return GetUserID(); } set { SetUserID(value); } }
public string UserName
{ get { return GetUserName(); } set { SetUserName(value); } }
..... // 還有一堆其他client相關資訊
}
我們的想法是 因為目前client程式端呼叫前會先把UserID和UserName這些變數指定好
我們只要在共用的ServerClass.QueryData把這個資訊取出來存就好了
但因為server是同一台的關係
若兩個以上clint同時在server執行QueryData
ClientInfo裡面的資料會有互相覆蓋的情況!!
就像是假設UserID_A查詢了A資料 然後UserID_B查詢了B資料
分開執行時會正常紀錄為:
UserID_A DataA
UserID_B DataB
但若同時執行,有可能變成:
UserID_A DataA
UserID_A DataB
或
UserID_B DataA
UserID_B DataB
也就是沒辦法正確的記錄UserA和UserB存取了什麼資料
我們有想過會不會是變數都是static 會一直被蓋掉
但我們的function又只能宣告static
不知道是否有人有其他解法 來防止互蓋的情況呢
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 140.128.153.200
※ 編輯: nanaon 來自: 140.128.153.200 (05/01 15:01)
※ 編輯: nanaon 來自: 140.128.153.200 (05/01 15:12)
→
05/01 20:18, , 1F
05/01 20:18, 1F
→
05/01 20:18, , 2F
05/01 20:18, 2F
推
05/02 16:11, , 3F
05/02 16:11, 3F
推
05/11 14:36, , 4F
05/11 14:36, 4F
→
05/11 14:36, , 5F
05/11 14:36, 5F
→
05/11 14:38, , 6F
05/11 14:38, 6F
C_Sharp 近期熱門文章
PTT數位生活區 即時熱門文章