2009-10-14 48 views
1

我嘗試使用這個職位代碼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常規默認序列化程序工作正常(還有其他問題涉及處理循環引用,導致我嘗試不同的序列化程序)。 任何想法?

感謝, 達尼

+0

讓我感到困惑的是爲什麼它在mscorlib程序集中查找我的類型,而不是我的類型之一?我認爲這是什麼原因造成的問題... – Dani 2009-10-14 11:16:09

+0

好吧...我找到了一個MSFT文章,認爲你不能使用svcutils這個序列化程序,只與共享的DLL! – Dani 2009-10-16 14:38:07

回答

相關問題