知道如何将这样的对象放到WCF服务吗?

时间:2011-10-10 08:18:08

标签: c# 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(错误的服务请求)。

4 个答案:

答案 0 :(得分:2)

查看this article on MSDN有关向/从WCF服务传输大数据的信息。除了大数据之外,您需要使用Message Contract代替DataContractMessageContractAttribute代替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以在单独的消息中获取数据的片段 ,并在服务器上重新组合。