Почему я получаю Ice :: MemoryLimitException, даже с Ice.MessageSizeMax = 2000000 - PullRequest
2 голосов
/ 08 декабря 2011

Привет! Я написал клиент-серверное приложение C # с использованием коммуникационной библиотеки Zeroc Ice (v3.4.2).

Я передаю последовательность объектов с сервера, которые затем отображаются на клиенте втабличный формат.Достаточно просто.

Я определил следующие типы срезов

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 Кб, но это не имело никакого значения, я только что провел тест с 31 000 записей (примерно 1,8 мегабайта данных) и все еще получаю Ice.MemoryLimitException.1.8 Мег не очень большой!

Я делаю что-то не так или есть ошибка в Zeroc Ice?

Большое спасибо всем, кто может предложить некоторую помощь.

Ответы [ 2 ]

0 голосов
/ 12 июня 2013

Включите 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);
0 голосов
/ 22 января 2013

Я считаю, что MessageSizeMax должен быть настроен как на стороне клиента, так и на стороне сервера. Также включите трассировку с максимальным значением (3) и проверьте размер сообщений (в сети)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...