2017-02-06 6 views
0

У меня есть метод Wcf, который возвращает набор данных, содержащий около 100000 записей. Размер сообщения тела составляет около 30 Мб без сжатия. Иногда это работает отлично, но я много раз получать следующее исключение XML во время операции десериализации:Wcf: исключение во время операции десериализации

Ошибка при десериализации объекта System.Data.DataSet. Неожиданно произошел конец файла. Следующие элементы не закрыты: NumEffetto, Scadenze, NewDataSet, diffgram, GetChangesResult, GetChangesResponse, Body, Envelope. '

Стек трассировки:

в System.ServiceModel.Dispatcher.DataContractSerializerOperationFormatter.DeserializeParameterPart (XmlDictionaryReader читателя, PartInfo часть, булева isRequest) в System.ServiceModel.Dispatcher.DataContractSerializerOperationFormatter.DeserializeParameter (XmlDictionaryReader читатель, часть PartInfo, Boolean isRequest) в System.ServiceModel.Dispatcher.DataContractSerializerOperationFormatter.DeserializeBody (XmlDictionaryReader rea дер, MessageVersion версия, String действие, MessageDescription messageDescription, Object [] параметры, Boolean isRequest) в System.ServiceModel.Dispatcher.OperationFormatter.DeserializeBodyContents (Message сообщение, Object [] параметры, логическое isRequest) в System.ServiceModel. Dispatcher.OperationFormatter.DeserializeReply (сообщение сообщение, Object []) параметры в System.ServiceModel.Dispatcher.ProxyOperationRuntime.AfterReply (ProxyRpc & Rpc) в System.ServiceModel.Channels.ServiceChannel.HandleReply (ProxyOperationRuntime операции, ProxyRpc & rpc) в System.ServiceModel.Channels.ServiceChannel.Call (String act ион, Логическое OneWay, операция ProxyOperationRuntime, Object [] модули, Object [] выходы, TimeSpan тайм-аут) в System.ServiceModel.Channels.ServiceChannelProxy.InvokeService (IMethodCallMessage methodCall, операция ProxyOperationRuntime) в System.ServiceModel.Channels. ServiceChannelProxy.Invoke (Шеззаде сообщение) в System.Runtime.Remoting.Proxies.RealProxy.PrivateInvoke (MessageData & msgData, тип Int32) в Kronos.WCFSync.ISyncService.GetChanges (Int64 clientCTVersion, Int64 verPubblicazione, SyncParam [] параметры) в Kronos.WCFSync.SyncServiceClient.GetChanges (Int64 clientCTVersion, Int64 verPub, SyncParam [] parame Ослабляет) в Kronos.SyncManager.Sync()

ответ

0

Исправлено! Проблема была по умолчанию sendTimeout, она слишком низка в моем случае (1 минута). Я добавил в web.config следующие элементы в теге Binding, и теперь он отлично работает:

<binding name="customBinding" 
    closeTimeout="00:01:00" openTimeout="00:01:00" 
    receiveTimeout="00:10:00" sendTimeout="00:10:00"> 
</binding> 
-1

проверка ли читатель квоты есть в вашем web.config также изменить ResponseFormat в JSON

+0

Как вы знаете, что это служба webHttpBinding? Если нет, то json не является вариантом. Кроме того, нарушение читателяQuotas очень хорошо видно как таковое при любой ошибке. Это явно не вызвано этим /. –