у меня в контракте два метода. Первый принимает, а второй возвращает byte[]
[OperationContract(IsOneWay = false)]
void Set(byte[] array);
[OperationContract(IsOneWay = false)]
byte[] Get();
Привязка такая
WSHttpBinding binding = new WSHttpBinding(SecurityMode.None);
binding.Security.Message.ClientCredentialType = MessageCredentialType.None;
binding.ReaderQuotas.MaxArrayLength = 1048576000;
binding.MaxReceivedMessageSize = 1048576000;
binding.ReliableSession.Enabled = true;
binding.ReliableSession.InactivityTimeout = TimeSpan.MaxValue;
Ситуация следующая. массив размером 52553237 (52 МБ) передается и получается без проблем! а вот когда массив 150 МБ, то метод Set отрабатывает, а вот метод Get зависает.
Все эти манипуляции производятся в пределах одного компьютера.
Может где то стоят ограничение на прием данных?
Здравствуйте, Sharov, Вы писали:
S>Здравствуйте, SanyaVB, Вы писали:
S>Что wcf-ный лог говорит?
Говорит вот что:
Не удалось выделить буфер управляемой памяти размером 268435456 байт. Возможно, не хватает доступной памяти.
Пересобрал под x64 и заработало.
Здравствуйте, SanyaVB, Вы писали:
SVB>Говорит вот что: Не удалось выделить буфер управляемой памяти размером 268435456 байт. Возможно, не хватает доступной памяти.
SVB>Пересобрал под x64 и заработало.
Не самый правильный подход: у Вас вероятно "буферизируемый" ответ, поэтому сервис загоняет ответ целиком в память. Для больших данных имеет смысл "стримовать". Система должна корректно работать как на x86 так и на x64.