2011-10-10 48 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

相关问题