美好的一天。
我有以下问题:
如何放置以下对象
[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 :(得分:2)
查看this article on MSDN有关向/从WCF服务传输大数据的信息。除了大数据之外,您需要使用Message Contract代替DataContract
,MessageContractAttribute代替DataMember
将数据合同更改为MessageHeaderAttribute字段,然后是字节数据上的MessageBodyMemberAttribute - 应该更改为Stream。
请注意,以这种方式接收的流往往会在CanSeek属性上返回false
,因此请务必小心从流中读取数据。
您可能还需要使用与described here
类似的内容调整客户端和服务器端配置上的邮件大小限额希望有所帮助
答案 1 :(得分:2)
也许你需要增加你的wcf消息大小(在web配置文件中)。
检查此链接, May this help
答案 2 :(得分:2)
您可以使用绑定定义的maxReceivedMessageSize
属性。它允许您发送更大的请求。
...
<wsHttpBinding>
<binding name="httpBinding"
maxBufferPoolSize="965536"
maxReceivedMessageSize="965536">
<readerQuotas maxStringContentLength="965536" />
</binding>
</wsHttpBinding>
...
答案 3 :(得分:1)
您可以采取一些措施来允许更大的阵列(更改序列化配额;使用MTOM等),但最终对您可以作为单个消息发送的内容进行限制。听起来你会碰到无论你做了什么,所以我建议你重新设计API以在单独的消息中获取数据的片段 ,并在服务器上重新组合。