我嘗試使用這個職位代碼WCF移動到NetDataContractSerializer在客戶端異常: http://lunaverse.wordpress.com/2007/05/09/remoting-using-wcf-and-nhibernate使用NetDataContractSerializer拋出
,並在客戶端上添加以下代碼:
foreach (OperationDescription desc in factory.Endpoint.Contract.Operations)
{
DataContractSerializerOperationBehavior dcsOperationBehavior = desc.Behaviors.Find<DataContractSerializerOperationBehavior>();
if (dcsOperationBehavior != null)
{
int idx = desc.Behaviors.IndexOf(dcsOperationBehavior);
desc.Behaviors.Remove(dcsOperationBehavior);
desc.Behaviors.Insert(idx, new NetDataContractOperationBehavior(desc));
//return true;
}
}
但Eevry time Ivoke我的列表調用,我得到這個異常:
格式化程序嘗試反序列化消息時拋出一個異常:嘗試反序列化參數http://tempuri.org/:ListResult時出錯。 InnerException消息是'The deserializer can not load type to deserialize because type'System.Collections.Generic.List`1 [[MYPROJ.Framework.Entities.EntityBase,MYPROJ.Framework.Entities,Version = 1.0.0.0,Culture = neutral ,PublicKeyToken = null]]'無法在程序集'mscorlib,Version = 2.0.0.0,Culture = neutral,PublicKeyToken = b77a5c561934e089'中找到。檢查被序列化的類型與被反序列化的類型具有相同的契約,並使用相同的程序集。'。有關更多詳細信息,請參閱InnerException。
的InnerExcption:
解串器無法加載型反序列化,因爲類型「System.Collections.Generic.List`1 [[MYPROJ.Framework.Entities.EntityBase,MYPROJ.Framework.Entities,版本= 1.0 .0.0,Culture = neutral,PublicKeyToken = null]]'無法在程序集'mscorlib,Version = 2.0.0.0,Culture = neutral,PublicKeyToken = b77a5c561934e089'中找到。檢查被序列化的類型是否與被反序列化的類型具有相同的合約,並使用相同的程序集。
代理服務器使用svcutils與此標誌生成:/ct:System.Collections.Generic.List`1 所以在另一端的列表將不會變成數組。
deseriliezer尋找的類型在服務器中定義。所有實體都是從這個類型派生的,但這不是駐留在客戶端的代理的名稱空間。
使用WCF常規默認序列化程序工作正常(還有其他問題涉及處理循環引用,導致我嘗試不同的序列化程序)。 任何想法?
感謝, 達尼
讓我感到困惑的是爲什麼它在mscorlib程序集中查找我的類型,而不是我的類型之一?我認爲這是什麼原因造成的問題... – Dani 2009-10-14 11:16:09
好吧...我找到了一個MSFT文章,認爲你不能使用svcutils這個序列化程序,只與共享的DLL! – Dani 2009-10-16 14:38:07