2011-10-10 44 views
1

美好的一天。任何想法如何把這樣一個對象的WCF服務?

我有以下問題:

如何把下面的對象

[DataContract] 
public class TimeItem 
{ 
    [DataMember] 
    public DateTime LocalTime { get; set; } 
    [DataMember] 
    public double XPos { get; set; } 
    [DataMember] 
    public double YPos { get; set; } 
    [DataMember] 
    public byte[] ScreenImage { get; set; } //Could be very huge 
} 

到WCF服務? (我也寫WCF服務,所以如果需要我可以自定義它)。 它工作正常,但在大字節數組(ScreenImage)的情況下,我得到一個錯誤400(錯誤的服務請求)。

+0

請問您是否可以更新您的問題與響應正文?使用提琴手或類似的獲取它。假設我們會在那裏看到一個異常消息和堆棧跟蹤。 –

回答

1

有很多事情可以做,以允許更大的陣列(改變系列化配額;使用MTOM;等等),但最終是爲了什麼,你可以作爲單個消息發送的限制。這聽起來像你將要撞到極限無論你做什麼,所以我建議在尋找重新設計API採取片段在單獨的消息中的數據,並在服務器重新結合。

+0

你的意思是重新實現[streaming](http://msdn.microsoft.com/en-us/library/ms731913.aspx)? – CodeCaster

2

this article on MSDN採取有關大數據的傳輸到/來回WCF服務一起來看看。這將需要您將數據合同更改爲Message Contract,使用的MessageContractAttribute而不是DataContractMessageHeaderAttribute代替DataMember所有,但大數據字段,然後MessageBodyMemberAttribute的字節數據 - 應改爲Stream

請注意,以這種方式接收的流往往會在CanSeek屬性上返回false,因此請小心如何從流中讀取數據。

您可能還需要調整在客戶端和服務器端的配置你的郵件大小津貼,使用類似於described here

希望的東西,幫助

2

也許ü需要增加烏爾WCF消息大小的大小(在網絡配置文件)。

檢查這個環節, May this help

+0

已經做到了 – user306080

+0

@ user306080 - 你是否設置了MaxItemInObjectGraph? (鏈接:http://blog.hill-it.be/2007/08/22/maxitemsinobjectgraph-and-keeping-references-when-serializing-in-wcf-2/) – Boomer

+0

是的,我做到了,以及 – user306080

2

您可以使用綁定定義的maxReceivedMessageSize屬性。它可以讓你發送更大的請求。

... 
    <wsHttpBinding> 
    <binding name="httpBinding" 
    maxBufferPoolSize="965536" 
    maxReceivedMessageSize="965536"> 
     <readerQuotas maxStringContentLength="965536" /> 
    </binding> 
    </wsHttpBinding> 
... 
+0

我已經做到了 – user306080

相關問題