最近在學習WCF,在這過程當中我遇到了很多的問題,簡單說說我遇到的問題已經可能有效的解決方案。
1.在C#中,同一個解決方案下無法引用別的項目,引用之后會有一個警告,查看屬性找不到引用的路徑,這種情況大部分都是由於兩個項目的版本不一致所導致的。
2.在C#中,重新引用服務或者是更新服務引用的時候,如果出現無法生成解決方案的情況,可以試試右擊你已經添加的服務引用文件,選擇"配置服務引用",在服務引用設置對話框中,將“重新使用引用的程序集中的類型”這個勾取消,這樣就能安全的重新引用服務了。
3.在C#中,如果客戶端需要使用服務端的實體,則可以在添加服務引用的時候設置"選擇重新使用所引用的指定程序集中的類型",添加對應的服務端的實體到客戶端,而且還可以設置客戶端得到的集合的類型,默認是數組,可以設置為List,成功更新服務引用之后web.config文件會生成一份多余的svc(mex)節點信息,刪除即可。
4.添加服務引用時提示"自定義工具錯誤: 無法生成服務引用“YearService”的代碼。請檢查其他錯誤和警告信息,了解詳細信息。",這種情況可能是由於添加服務引用時配置不符合,解決辦法,把添加服務引用的高級里面的"重新使用所引用的程序集中的類型(R)"復選框去掉即可。
5.調用了WCF的項目運行時如果報"由於目標計算機積極拒絕,無法連接.",這種情況是由於WCF程序本身沒有啟動,所以要先運行WCF程序.
6.WCF程序中需要添加的一些標識:
服務端接口加標識:[ServiceKnownType(typeof(Employee))] 指定序列化或反序列化時服務要使用的已知類型.
服務端實體加標識:[KnownType(typeof(Employee))] 指定System.Runtime.Serialization.DataContractSerializer 在序列化或反序列化給定類型時應識別的類型.
7.默認無法傳輸 List<T>、List<自定義類> 等類型的對象:
在WCF中,在 Server-side 和 Client-side 之間,傳遞默認無法傳輸的 List<T>、List<自定義類> 等類型的對象,而泛型的 Dictionary 對象卻可以,這是因為WCF以 WSDL 在網絡上傳輸時,會以「數組 (array)」的格式呈現。這是VS的默認設置,可以在客戶端"添加服務引用"時進行設置,選擇"高級"在彈出的對話框中選擇"集合類型"為"System.Collections.Generic.List"即可,下面的字典集合類型不用管,默認的就行,表示此 WCF Service 可在網絡上傳輸泛型的 Dictionary 類型對象。