知道如何将这样的对象放入WCF服务吗?
本文关键字:WCF 服务 对象 | 更新日期: 2023-09-27 18:10:54
大家好。
我有以下问题:
如何放置以下对象
[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(坏的服务请求)。
看看这篇关于在WCF服务之间传输大数据的MSDN文章。它将要求你改变你的数据契约为一个消息契约,使用MessageContractAttribute代替DataContract
, MessageHeaderAttribute代替DataMember
在所有大数据字段,然后MessageBodyMemberAttribute对字节数据-这应该改变为一个流。
请注意,以这种方式接收的流倾向于在CanSeek属性上返回false
,所以要小心如何从流中读取数据。
您可能还需要在客户端和服务器端配置上调整您的消息大小允许,使用类似于此处
所描述的内容。希望有帮助
也许你需要增加你的wcf消息大小(在web配置文件中)
检查此链接,
您可以使用绑定定义的maxReceivedMessageSize
属性。它将允许您发送更大的请求。
...
<wsHttpBinding>
<binding name="httpBinding"
maxBufferPoolSize="965536"
maxReceivedMessageSize="965536">
<readerQuotas maxStringContentLength="965536" />
</binding>
</wsHttpBinding>
...
您可以做一些事情来允许更大的数组(更改序列化配额;使用MTOM;等),但是最终作为单个消息可以发送的内容是有限的。听起来,无论做什么,你都要碰到限制,所以我建议重新设计API,以在单独的消息中获取片段的数据,并在服务器上重新组合。