2013-03-27 66 views
-1

在我的下面的應用程序中,我生成類'JobManager'的列表。WCF異常,而返回列表<T>

List<JobManager> 

訪問數據庫和填寫我的清單工作完美。看起來將這樣的列表返回給我的客戶是有問題的。

詳細,我的代碼看起來像這樣

IService Class 

OperationContract(Name = "ReadJobQueue")] 
    [FaultContract(typeof(FaultException))] 
    List<JobManager> AccessManager(List<string> status,string process, string dtFrom, string dtTo); 


Service : IService 

public List<JobManager> AccessManager(List<string> status, string process, string dtFrom, string dtTo) 
    { 
     //return 'new List<JobManager>()' does work, without any data being filled. 
     return new JobBuilder(status, process, dtFrom, dtTo); 
    } 



[DataContract] 
public class JobManager 
{ 
    List<JobManager> _jobManagerchildren = new List<JobManager>(); 

    [DataMember(IsRequired = true, Order = 0)] 
    public string Description { get; set; } 

    [DataMember] 
    public List<JobManager> JobManagerChildren 
    { 
     get { return _jobManagerchildren; } 
     internal set { _jobManagerchildren = value; } 
    } 
} 

internal class JobBuilder : List<JobManager> 
{ 
    public JobBuilder(List<string> status, string process, string dtFrom, string dtTo) 
     : base() 
    { 
     DataTable dt = new Database().AccessJobQueue(status, process, dtFrom, dtTo); 

     foreach (DataRow row in dt.Rows) 
     { 
      Add(new JobManager { Description = row[1].ToString(), JobManagerChildren = JobDetail(row[0].ToString()) }); 
     } 
    } 

... 
} 

我錯過了什麼我JobManager類?

編輯錯誤碼/異常

System.Net.Sockets.SocketException: 一個現有的連接被遠程主機 貝System.Net.Sockets.Socket.Receive(字節[]緩衝液封閉, INT32偏移,INT32大小 ,的SocketFlags的SocketFlags) 貝System.ServiceModel.Channels.SocketConnection.ReadCore(字節[]緩衝液,詮釋 32偏移,INT32大小,時間跨度超時,布爾閉合) ---恩德DER internenAusnahmestapelüberwachung - - bei System.ServiceModel.Channels.SocketConnection.ReadCore (Byte [] buffer,Int 32 offset,int32 size,TimeSpan timeout,布爾關閉) bei System.ServiceModel.Channels.SocketConnection.Read(Byte [] buffer,Int32 ffset,Int32 size,TimeSpan timeout) bei System.ServiceModel.Channels.DelegatingConnection.Read(Byte [] buffer,Int 32 offset,Int32 size,TimeSpan timeout) bei System.ServiceModel.Channels.ConnectionStream.Read(Byte [] buffer,Int32 o ffset,Int32 count ) 貝System.Net.FixedSizeReader.ReadPacket(字節[]緩衝液,的Int32偏移的Int32 計數) 貝System.Net.Security.NegotiateStream.StartFrameHeader(字節[]緩衝液,的Int32 偏移的Int32計數,AsyncProtocolRequest asyncRequest) bei System.Net.Security.NegotiateStream.ProcessRead(Byte [] buffer,Int32 offs et,Int32 count,AsyncProtocolRequest asyncRequest) --- Ende der internenAusnahmestapelüberwachung--- bei System.Net.Security.NegotiateStream.ProcessRead (Byte [] buffer,Int32 offs et,Int32 count,AsyncProtocolRequest asyncRequest) bei System.Net.Security.NegotiateStream.Read(Byte [] buffer,Int32 offset,Int 32 count) bei System.ServiceModel.Channels。 StreamConnection.Read(字節[]緩衝液,的Int32ö ffset,的Int32大小,時間跨度超時) ---恩德DER internenAusnahmestapelüberwachung---

服務器ST ACK跡: 貝System.ServiceModel.Channels.StreamConnection.Read(字節[]緩衝液,的Int32ö ffset,的Int32大小,時間跨度超時) 貝System.ServiceModel.Channels.SessionConnectionReader.Receive(時間跨度添 EOUT) 貝System.ServiceModel.Channels.SynchronizedMessageSource.Receive(時間跨度噸 imeout) 貝System.ServiceModel.Channels.FramingDuplexSessionChannel.Receive(時間跨度 超時) 貝System.ServiceModel.Channels.FramingDuplexSessionChannel.TryReceive(倍 鍋超時,消息&消息) bei System.ServiceModel.Dispatcher.DuplexChannelBinder。請求(消息messag 即,時間跨度超時) 貝System.ServiceModel.Channels.ServiceChannel.Call(字符串動作,布爾ö 紐威,ProxyOperationRuntime操作,對象[]項,對象[]奏,時間跨度TI meout) 貝System.ServiceModel.Channels.ServiceChannelProxy.InvokeService(IMethodCal lMessage包括methodCall,ProxyOperationRuntime操作) 貝System.ServiceModel.Channels.ServiceChannelProxy.Invoke(即時聊天消息)[0]時

異常重新拋出: 貝System.Runtime。 Remoting.Proxies.RealProxy.HandleReturnMessage(IMessage re qMsg,IMessage retMsg) bei System .Runtime.Remoting.Proxies.RealProxy.PrivateInvoke(MessageData & msgD ATA,的Int32類型) 貝WcfSys.Shared.IService.AccessManager(List`1狀態,字符串處理,S 特林dtFrom,字符串dtTo) 貝WcfSys。 Server.Program.Main()in WcfSys.Ser ver \ Program.cs:Zeile 66.

+1

這裏我們再說一遍:*什麼是錯誤信息?* – 2013-03-27 10:41:02

+0

好吧,我在幾秒鐘內編輯主帖。 – Insight 2013-03-27 10:53:40

回答

0

實際上,您發送回客戶端的是List<JobManager>,但實際上它是派生類。因此,有固定的這兩種方法:從JobBuilder

  1. 複製所有條目到一個新的List<JobManager>並返回新的列表
  2. JobBuilder一個DataContract,太。

方式 - 通過OOP原則 - 它知道你回來的對象是JobBuilder,運行時嘗試序列的JobBuilder實例。但是,這不是WCF通信的知道類型。