WCF Host通過編譯但是無法使用的解決之一

WCF的host編譯運行後, 無法通過SvcUtil和添加服務引用,可能出現的提示包括
“元數據包含無法解析的引用”
“套接字鏈接已中止,這可能是有餘處理消息時出錯或者遠程主機超過接收超時或者潛在的網絡資源問題導致的。”
等等

非常容易被忽略的其中2個原因是:
1. 存在被接口引用(包括參數和返回值)的自定義類/結構沒有添加到數據契約[DataContract]
2. 一些語句寫法編譯器可以通過,但是WCF無法引用,例如常見的對於屬性 Public A{get{//some ops}}. 在WCF中需要同時指定get和set。

針對原因一的解決方法:
1. 找到Host指定的Interface
2. 檢查引用的自定義類/結構是否加上了數據契約(DataContract)
3. 對類/結構添加[DataContract],對成員適當使用[DataMember]
4. 完成

此外提供一個適用的WCF debug技巧:
1. 對於Host指定的Interface,註釋掉大部分OperationContract方法,只留下小部分,依次通過添加服務引用看是否能正常檢測到服務;之後再逐步刪除註釋,找出出問題的Method
2. 找到問題Method後,觀察它引用的自定義類,對比其它已通過第一步的Method,找到有問題的類
3. 如果是一個大類,可以暫時註釋掉出問題的Interface裏的Method,轉而返回出問題的大類所引用的類型。一步步縮小類的目標範圍。注:對於一些問題用vs自帶的debug更能提示錯誤。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章