2013-07-18 49 views
0

我有一個名爲ExceptionsJSONService的WCF服務。與我的解決方案中定義的所有其他服務不同,它由於某些原因無法在JavaScript中實例化客戶端。實體框架序列化錯誤阻止wcf服務工作

這種失敗:

var service = new ExceptionsJSONService(); 

預計對象。我一直試圖弄清楚爲什麼會發生這種情況,並且在整個項目中檢查了我的所有定義,並且一切看起來都很好,並且與我定義的所有其他服務(所有工作)都一致。

然後我檢查了svclog文件,發現一個錯誤。異常類型是:

System.Runtime.Serialization.InvalidDataContractException, System.Runtime.Serialization,版本= 4.0.0.0,文化=中性 公鑰= b77a5c561934e089

異常消息爲:

類型 'System.Data.Entity.DbSet`1 [CCMModel.AttachmentDoc]' 不能是 串行化。考慮使用DataContractAttribute 屬性標記它,並使用DataMemberAttribute屬性標記您想要序列化的所有成員。如果類型是集合,請考慮使用CollectionDataContractAttribute將其標記爲 。有關其他支持的類型,請參閱 Microsoft .NET Framework文檔。

CCMModel是命名空間,AttachmentDoc是我的一個實體。但問題不在於AttachmentDoc。這只是按字母順序通過實體列表。我將一個實體從附件重命名爲RAttachments,然後它只是繼續向AttachmentDoc拋出一個異常。

事情是,我的代碼中沒有任何地方嘗試序列化任何EF實體。所有我序列化的類都有DataContracts。我相信這兩者相關的原因是在Open ServiceHost'ExceptionsJSONService'出現在svclog中之後發生異常。

有人遇到過這個嗎?

回答

0

該問題是由ExceptionsJSONService類中定義的公共函數引起的。該功能應該是公開的,但它也被標記爲操作合同。

函數的參數列表是我們的EF DB上下文對象。由於它位於操作合同的參數列表中,因此它使服務爲與數據庫上下文關聯的所有實體搜索數據合同。這導致只會出現在服務跟蹤日誌中的異常被拋出。異常阻止了服務加載正確,所以當我嘗試在JavaScript中實例化服務客戶端時,它會失敗。

從函數中刪除操作合同屬性解決了問題。