知道如何将这样的对象放入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服务吗?

看看这篇关于在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,以在单独的消息中获取片段的数据,并在服务器上重新组合。