2

嗨,我使用 Zeroc Ice 通信库(v3.4.2)编写了一个 C# 客户端/服务器应用程序。

我正在从服务器传输一系列对象,然后以表格格式在客户端显示它们。很简单。

我定义了以下切片类型

enum DrawType { All, Instant, Raffle };

struct TicketSoldSummary {
  int scheduleId;
  DrawType dType;
  string drawName;
  long startDate;
  long endDate;
  string winningNumbers;
  int numTicket;
  string status;
};
sequence<TicketSoldSummary> TicketSoldSummaryList;

interface IReportManager {
  [..]
  TicketSoldSummaryList getTicketSoldSummary(long startTime, long endTime);
};

当我调用此方法时,它通常可以正常工作,但偶尔(大约 25% 的时间)调用者会收到 Ice::MemoryLimitException。我们通常一次运行 2-3 个客户端。

我在互联网上搜索了答案,并被告知要增加 Ice.MessageSizeMax,我这样做了。我已将 MessageSizeMax 增加到 2,000,000 Kb,但这并没有什么区别,我只是用 31,000 条记录(大约 1.8 Megs 的数据)进行了测试,仍然得到 Ice.MemoryLimitException。1.8兆不是很大!

我做错了什么还是 Zeroc Ice 有错误?

非常感谢任何可以提供帮助的人。

4

2 回答 2

0

在服务器端打开 Ice.Warn.Connections 并查看日志。还要确保正确应用客户端最大消息大小。我在客户端上设置 Ice.MessageSizeMax 如下,

Ice.Properties properties = Ice.Util.createProperties();
properties.setProperty("Ice.MessageSizeMax", "2097152");//2gb in kb
Ice.InitializationData initData = new Ice.InitializationData();
initData.properties = properties;
Ice.Communicator communicator = Ice.Util.initialize(initData);
于 2013-06-12T14:35:48.013 回答
0

我相信 MessageSizeMax 需要在客户端和服务器端进行配置。还启用了最大值(3)的跟踪并检查消息的大小(在线上)

于 2013-01-22T06:07:53.537 回答