如何将数组添加到 WCF 数据协定

  • 本文关键字: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() 
    {
    }
}

添加温度数组之前,数据在服务器和客户端之间交换得很好。 我添加了温度数组,重建了服务器应用程序,并运行了它。 然后,在客户端项目中,我更新了服务引用并重新生成了该项目。 当我运行客户端时,我收到一条错误消息,指出收到了无意义的回复,这可能是由一些原因引起的,包括数据协定不匹配。 我已经验证了阵列是否正在服务器端填充。 调整客户端应用程序以接受阵列的正确过程是什么?

问题似乎是我没有在客户端中为消息保留足够的空间。 我发现我可以处理每个对象 250 个双精度,但不能处理每个对象 300 个双精度。 谷歌搜索"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>

最新更新