我有支程式,client端是 windows form,想要上傳一個檔案到我自已寫的 webservice,經過一些處理後,產生檔案再下載到 client端。由於 webservice要做的動作很多,我希望能在client端顯示目前webservice執行的狀況。請問我應該用什麼技術比較好?
我開發的環境是 .net 2.0, visual studio 2005 c#, mssql 2008
我研究了2天, 有看到所謂 callback 的技術,也試過 XXXAsync/XXXCompleted 的寫法。還有所謂 soap extention ,真是愈看愈花。還請各位前輩指點一下方向,謝謝!
建議將 Web Services 分開成兩個部份
yohun提到:
webservice
SOA
主動服務 session 都已經隔離作業
服務完才丟比較有效率
如果每一動作都要丟回原呼叫的 session
如果 [伺服端] 要服務很久才丟回
可能 [要切割] 服務內容
有哪一種服務是要 [很久]
丟上來的選課資料 [每 3 分鐘] 一次湊合 ?
丟上來的選課資料 [每 3 小時] 一次湊合 ?
Client 往 Server 丟
Server 處理時,把處理狀態寫到資料庫或某檔案裡
Client在定時去掃該狀態
這種東西不能寫成非同步的樣式
寫成非同步你的連線會一直存在,浪費系統資源
由於你是Windows Form 程式
你可以開Port去等待通知
如果你是Web 或 手機程式就固定時間去掃吧
我的做法是換個角度
Client polling progress with session ID via ajax. Your web service process any thing you want and store progress with session ID for client take back.
BTW, when I can use AP to transfer file or process some task, I would like to create socket not web service. It will over packaging to effect performance.
M$ always support suits, expansive suits for M$ user so you can take a solution form M$DN, they will tell you what kind product you can pay for.
方法很多種,看一下你熟悉的技術:.net 2.0, visual studio 2005 c#, mssql 2008
最簡單的就是寫網頁,用HTTP送一個檔案到主機後,處理後把檔案內容回應回來,或者把URL回應回來。
其次,去抓各ftp daemon來改,client用ftp protocol上傳完一個檔案後,daemon馬上運算一個結果檔再旁邊,client在自己抓下來就ok。
最後,就是自己寫socket,不過要同時起兩個daemon,就先略過。
web service不熟,就留給其他大大說明。
我自己是用java寫的~給你參考一下
1.client 要求產生一個編號 ;server回應一個編號
2.client 發送一個非同步的工作啟動的要求(內有剛獲得的編號);server 開始啟動工作,同時產生工作狀態的物件(內有剛剛的編號),
3.server 在執行每一階段寫入工作狀態物件的訊息
4.client 可用獲得的編號去查詢工作狀態物件現在的狀態為何
在此工作狀態物件所帶有的資料要端看你的定義而定
例如:
1.我是用作業程序的編號去帶入,這樣可以滿足我系統可以離開畫面之後,又回來依然可以看到所以該作業現有的執行的工作狀態
2.如果是用開放的話,那麼就要考慮使用ip+瀏覽器相關資訊(cookies)等作為查詢該工作狀態的依據
因為我本身維護的系統是需要登入才可以的,加上是用作業別來需分,所以我都是用作業編號來作為查詢工作狀態物件的依據,但還是要以實際的需求加以變化,採用這個工作狀態物件的好處就是可以作為不同的作業共同的模組,這樣就別的作業要用的話,直接套進去就可以了