看板 C_Sharp 關於我們 聯絡資訊
抱歉因為才殊學淺 不太懂這是哪個範疇的問題 若以下太多贅述請見諒 我們打算用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)
Abbee:我不知道你資料結構是什麼,我也是用static的DataTable記,沒 05/01 20:18
Abbee:此問題 05/01 20:18
shawnlian:在查詢資料的func需要再比對當前的clientinfo是誰。 05/02 16:11
Litfal:client還好,但你不該在Server用static存放資料,除非你確 05/11 14:36
Litfal:定是要共用的。 05/11 14:36
Litfal:另外修改Server端的運算給Instance應該沒關係吧... 05/11 14:38