Итак, у нас есть консольная служба WCF и ASP.NET WEB-служба (на IIS).
После некоторых сложных операций служба WCF должна вернуть некоторые (большие) данные в веб-службу ASP.NET для последующей обработки. Я проверил на небольших результатах, и все в порядке.
Но после тестирования реальных данных, представляющих собой сериализованный объект результата размером около 4,5 МБ, происходит ошибка в веб-службе ASP.NET, которая является клиентом в связи wcf-клиент-сервер.
Это ошибка, которую я получил:
Соединение с сокетом было прервано. Это может быть вызвано ошибкой
обработка вашего сообщения или превышение времени ожидания
удаленный хост или проблема с сетевым ресурсом. Локальный сокет
тайм-аут был '04: 00: 00'. Внутреннее исключение: SocketException: «Существующий
соединение было принудительно закрыто удаленным хостом "ErrorCode = 10054
Размер сообщений настраивается следующей привязкой (на сервере и клиенте):
NetTcpBinding netTcpBinding = new NetTcpBinding();
netTcpBinding.TransactionFlow = true;
netTcpBinding.SendTimeout = new TimeSpan(0, 4,0, 0);
netTcpBinding.Security.Mode = SecurityMode.None;
netTcpBinding.Security.Message.ClientCredentialType = MessageCredentialType.None;
netTcpBinding.Security.Transport.ClientCredentialType = TcpClientCredentialType.None;
netTcpBinding.Security.Transport.ProtectionLevel = ProtectionLevel.None;
netTcpBinding.MaxReceivedMessageSize = 2147483647;
netTcpBinding.MaxBufferSize = 2147483647;
netTcpBinding.MaxBufferPoolSize = 0;
netTcpBinding.ReaderQuotas.MaxStringContentLength = int.MaxValue;
netTcpBinding.ReaderQuotas.MaxArrayLength = int.MaxValue;
netTcpBinding.ReaderQuotas.MaxBytesPerRead = int.MaxValue;
netTcpBinding.ReaderQuotas.MaxDepth = 32;
netTcpBinding.ReaderQuotas.MaxNameTableCharCount = 16384;
MaxObjectsInGraph
свойство сконфигурировано в файле конфигурации.
Что вы можете мне посоветовать? А также мне нужен пример того, как программно установить свойство MaxObjectsInGraph
на клиенте и сервере.
Спасибо за ответы.