wcf - 如何将数组添加到 WCF 数据协定?
问题描述
我正在尝试在用 Visual Studio 2012 编写的 Windows Communication Foundation 项目中使用以下类:
[DataContract]
public class SimCoilData : SimInventoryItemData
{
[DataMember]
public UnitTemperature? RequiredCoolingHotspot { get; set; }
[DataMember]
public UnitTemperature? RequiredHeatingColdspot { get; set; }
[DataMember]
public UnitTemperature? HeatingHotspotLimit { get; set; }
[DataMember]
public TimeSpan? TimeToRequiredColdspot { get; set; }
[DataMember]
public TimeSpan? TimeToRequiredCoolingHotspot { get; set; }
[DataMember]
public TimeSpan? TimeToHeatingHotspotLimit { get; set; }
[DataMember]
public UnitLength Gauge { get; set; }
[DataMember]
public UnitLength Width { get; set; }
[DataMember]
public double[] Temperatures { get; set; }
public SimCoilData() : base()
{
}
}
在添加温度数组之前,服务器和客户端之间的数据交换良好。我添加了 Temperatures 数组,重建了服务器应用程序并运行了它。然后,在客户端项目中,我更新了服务引用并重建了项目。当我运行客户端时,我收到一条错误消息,指出收到了无意义的回复,这可能是由一些原因引起的,包括数据合同不匹配。我已验证该阵列正在服务器端填充。调整我的客户端应用程序以接受数组的正确程序是什么?
解决方案
问题似乎是我没有在客户端中为消息保留足够的空间。我发现每个对象可以处理 250 个双打,但每个对象不能处理 300 个双打。在 Google 搜索“WCF 最大消息大小”时,我找到了 maxBufferSize 和 maxReceivedMessageSize 参数。通过为我的客户端配置此配置,我能够在我的数组中获取所有 1800 个值:
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />
</startup>
<system.serviceModel>
<bindings>
<netTcpBinding>
<binding name="NetTcpBinding_ISimShopServiceLib"
openTimeout="00:01:00"
closeTimeout="00:00:05"
sendTimeout="00:01:00"
receiveTimeout="00:01:00"
maxBufferSize="5000000"
maxReceivedMessageSize="5000000">
</binding>
</netTcpBinding>
</bindings>
<client>
<endpoint address="net.tcp://localhost:1236/SimShopService" binding="netTcpBinding"
bindingConfiguration="NetTcpBinding_ISimShopServiceLib" contract="SimShopServiceReference.ISimShopServiceLib"
name="NetTcpBinding_ISimShopServiceLib">
<identity>
<dns value="localhost" />
</identity>
</endpoint>
</client>
</system.serviceModel>
</configuration>
推荐阅读
- jquery - 如何在运行时使用 jquery 更改样式属性值
- apache - Apache httpd:缓存未命中:缓存不愿意存储响应
- neo4j - Neo4j 密码查询的布尔值返回
- scala - 从Resultset scala中检索对象数组
- node.js - 如何使用无服务器框架将环境变量传递给 AWS Lambda 函数?
- android - 如果在应用程序被杀死后建立互联网连接,我如何发送通知?
- javascript - 异步/等待,XHR 请求后返回的变量未定义
- twilio - 通过 zapier 发送 vcard 时如何解决 Twilio SMS 发送错误
- sql-server - SQL Server:是否可以使用扩展事件记录语句或事务的错误?
- unity3d - 如何在鼠标位置进行光线投射,然后获取用于地形的坐标?