[問題] client傳送同一參數至server互蓋問題

看板C_Sharp (C#)作者 (Nanaon)時間12年前 (2013/05/01 14:57), 編輯推噓2(204)
留言6則, 3人參與, 最新討論串1/1
抱歉因為才殊學淺 不太懂這是哪個範疇的問題 若以下太多贅述請見諒 我們打算用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
我不知道你資料結構是什麼,我也是用static的DataTable記,沒
05/01 20:18, 1F

05/01 20:18, , 2F
此問題
05/01 20:18, 2F

05/02 16:11, , 3F
在查詢資料的func需要再比對當前的clientinfo是誰。
05/02 16:11, 3F

05/11 14:36, , 4F
client還好,但你不該在Server用static存放資料,除非你確
05/11 14:36, 4F

05/11 14:36, , 5F
定是要共用的。
05/11 14:36, 5F

05/11 14:38, , 6F
另外修改Server端的運算給Instance應該沒關係吧...
05/11 14:38, 6F
文章代碼(AID): #1HWBp6u0 (C_Sharp)
文章代碼(AID): #1HWBp6u0 (C_Sharp)