我使用 DTO 对象从我的 WCF 服务传输数据。
这是 DTO 对象:
[DataContract]
public class MatrixDTO : BaseDTO<MatrixDTO, Matrix>
{
[DataMember]
public int MatrixID { get; set; }
[DataMember]
public int OriginStopID { get; set; }
[DataMember]
public string OriginStopCode { get; set; }
[DataMember]
public int DestinationStopID { get; set; }
[DataMember]
public string DestinationStopCode { get; set; }
[DataMember]
public int NumberOfDays { get; set; }
}
我知道我的服务返回了 2116 件物品。这是返回的典型信息:
如您所见,每个返回的项目中没有很多数据。但我不知道为什么我必须调整我的 web.config 绑定缓冲区以允许 750000 字节!
这是我的 web.config:
<binding name="WSHttpBinding_IRequestService" closeTimeout="00:01:00"
openTimeout="00:01:00" receiveTimeout="00:10:00" sendTimeout="00:01:00"
bypassProxyOnLocal="false" transactionFlow="false" hostNameComparisonMode="StrongWildcard"
maxBufferPoolSize="750000" maxReceivedMessageSize="750000" messageEncoding="Text"
textEncoding="utf-8" useDefaultWebProxy="true" allowCookies="false">
<readerQuotas maxDepth="32" maxStringContentLength="8192" maxArrayLength="16384"
maxBytesPerRead="4096" maxNameTableCharCount="16384" />
<reliableSession ordered="true" inactivityTimeout="00:10:00"
enabled="false" />
<security mode="Message">
<transport clientCredentialType="Windows" proxyCredentialType="None"
realm="" />
<message clientCredentialType="Windows" negotiateServiceCredential="true"
algorithmSuite="Default" />
</security>
</binding>
这是我的服务:
public List<MatrixDTO> GetMatrices()
{
using (var unitOfWork = UnitOfWorkFactory.Create())
{
var matrixRepository = unitOfWork.Create<Matrix>();
var matrices = matrixRepository.GetAll();
var dto = new List<MatrixDTO>();
AutoMapper.Mapper.Map(matrices, dto);
return dto;
}
}
有人可以解释我吗?如果我将缓冲区从 750000 减少到 400000,则会收到错误消息:已超出传入消息的最大消息大小配额 (400000)。要增加配额,请在适当的绑定元素上使用 MaxReceivedMessageSize 属性。
我跟踪 WCF 日志文件,发现从我的 WCF 传输的数据约为 721K。20 个字符以下的 2116 个项目怎么可能传输这么多数据?