2012-07-09 47 views
0

我與WCF工作,並試圖返回對象列表(或數組)回到我的客戶。 它對於標準類型似乎工作正常,我可以返回自定義對象,但不包含自定義對象列表(即使列表中只有一個項目)。WCF - 返回一個自定義列表

我讀過關於這一主題的相當數量,但似乎無法得到它的任何地方。 它編譯好的,但在客戶端上,當我到我的功能,客戶端拋出一個異常,同時接收HTTP響應

「時發生錯誤。這可能是由於 的服務端點綁定不使用HTTP協議。這 也可能是由於由 服務器(可能是由於服務關停)被中止的HTTP請求上下文。參見服務器日誌 更多的細節。」

我已經嘗試了一些想法,目前我的目標是這樣的:

[DataContract] 
    public class FilePacket : IDisposable 
    { 
     //[MessageHeader(MustUnderstand = true)] 
     [DataMember] 
     public string fileName; 

     //[MessageHeader(MustUnderstand = true)] 
     [DataMember] 
     public long fileSize; 

     //[MessageBodyMember(Order = 1)] 
     [DataMember] 
     public System.IO.Stream fileByteStream; 

     public void Dispose() 
     { 
      if (fileByteStream != null) 
      { 
       fileByteStream.Close(); 
       fileByteStream = null; 
      } 
     } 
    } 
+0

您的運營合約是什麼樣的? – 2012-07-09 14:50:30

+0

我試過[OperationContract] FilePacket syncStuff(); [OperationContract] FilePacket [] syncStuff(); [OperationContract] List syncStuff(); etc – HaemEternal 2012-07-09 14:52:05

+0

[OperationContract] FilePacket [] syncStuff();似乎是正確的,應該工作。 – 2012-07-09 14:58:09

回答

0

現在我已經得到了這個工作(感謝幫助鄉親)。 似乎有各種各樣的事情可能會出錯並導致問題。 首先,我從Stream更改爲MemoryStream;並確保它始終如此使用(我在嘗試幾個選項時注意到可以將DataContract設置爲使用Stream,實際上使用的是FileStream;這造成了嚴重破壞,並花了幾分鐘時間才注意到) 。

我從DataContract變爲MessageContract(確保設置的MemoryStream爲[MessageBodyMember(訂單= 1)])。

在應用程序配置,設置我的transferMode爲「流」,確保了MAXBUFFERSIZE被設置爲一個巨大的價值。

1

你必須做的第一件事是檢查你是否在使用結合作爲transferModeStreamed

<system.serviceModel> 
    … 
    <bindings> 
     <basicHttpBinding> 
     <binding name="ExampleBinding" transferMode="Streamed"/> 
     </basicHttpBinding> 
    </bindings> 
    … 
<system.serviceModel> 

第二件事你應該使用MessageContract

[MessageContract] 
public class FilePacket 
{ 
    [MessageHeader] 
    public string fileName; 

    [MessageBodyMember] 
    public System.IO.Stream fileByteStream; 

    ... 
} 

除了fileByteStream剩餘財產,你應該MessageHeader屬性裝飾。

的最後一件事就是確保你已經爲maxReceivedMessageSize財產克服尺寸限制設置正確的值。

看到這些引用

http://msdn.microsoft.com/en-us/library/ms733742.aspx

http://msdn.microsoft.com/en-us/library/ms789010.aspx

+0

嗨馬克,謝謝你的迴應。 我已經給你的建議一個嘗試,不幸的是,行爲仍然是一樣的。一個空fileByteStream會通過罰款,但否則我會得到一個異常。 – HaemEternal 2012-07-10 07:17:25