Silverilght 客戶端不支持 FaultException. 只會顯示一個 404 錯誤。所以,服務端拋出的異常,在客戶端是無法直接通過序列化 /反序列化傳遞得到的。但是可以改用下列一些方法來幫助從客戶端得到錯誤信息:
1. 在 Service 端,將返回值對象重新設計,在其中添加錯誤信息的字段,傳遞回來。
2. 在 Service 端發生異常時,捕獲之,並使用 Session 存儲(同時可以做日志),然後結果裡 return false.
Silverlight裡判斷返回 false 則去調用另一個 Service: GetLastError() 從 Session 中取出剛才保存的異常信息。
3. 修改 Service 接口,在參數裡加一個 ref 參數用於返回錯誤信息,客戶端同時判斷 e.Error 和 e.Ref參數 的值。
因為項目還在開發中,目前我采用的是第三個方法,僅增加一個 ref string errorMessage 參數即可,比較簡單。
另外最近在考慮的一個問題是,如何大幅度減少 WCF Service 的數量,改為設計盡量通用的服務接口。哪怕犧牲了強類型也值得,只要設計出自己的序列化 /反序列化機制就行了。因為更新 WCF 引用實在是很麻煩,並且很容易出錯。如果是一個業務系統,數據表很多時,按傳統辦法會要求做更多的 Service 來做 CRUD 操作。在這方面如果哪位朋友有好的 idea, 也希望能分享一下