Open NicholasNoise opened 5 years ago
На стенде EmberFlexdberry на локальном бэкенде ошибка не повторяется.
Логирование чуть-чуть детализирует ситуацию: 'EdmEntityObject' (IEdmModel type='DataObjectEdmModel') cannot be serialized using the 'CustomODataSerializerProvider' Но понятнее не становится.
Описание ошибки
В тестовой и продуктивной средах встречается масса ошибок SerializationException (в среднем 4 для тестовой среды и 20 для продуктива). У нас их ловит на бэкенде свой GlobalExceptionHandler.
Текст ошибки
System.Runtime.Serialization.SerializationException: 'EdmEntityObject' cannot be serialized using the ODataMediaTypeFormatter. at System.Web.OData.Formatter.ODataMediaTypeFormatter.GetSerializer (System.Type type, System.Object value, Microsoft.OData.Edm.IEdmModel model, System.Web.OData.Formatter.Serialization.ODataSerializerProvider serializerProvider) [0x000ef] in <2e50d258365747bf8e23647205ede093>:0 at System.Web.OData.Formatter.ODataMediaTypeFormatter.WriteToStream (System.Type type, System.Object value, System.IO.Stream writeStream, System.Net.Http.HttpContent content, System.Net.Http.Headers.HttpContentHeaders contentHeaders) [0x00025] in <2e50d258365747bf8e23647205ede093>:0 at System.Web.OData.Formatter.ODataMediaTypeFormatter.WriteToStreamAsync (System.Type type, System.Object value, System.IO.Stream writeStream, System.Net.Http.HttpContent content, System.Net.TransportContext transportContext, System.Threading.CancellationToken cancellationToken) [0x00059] in <2e50d258365747bf8e23647205ede093>:0 --- End of stack trace from previous location where exception was thrown ---
at System.Web.Http.WebHost.HttpControllerHandler.WriteBufferedResponseContentAsync (System.Web.HttpContextBase httpContextBase, System.Net.Http.HttpRequestMessage request, System.Net.Http.HttpResponseMessage response, System.Web.Http.ExceptionHandling.IExceptionLogger exceptionLogger, System.Web.Http.ExceptionHandling.IExceptionHandler exceptionHandler, System.Threading.CancellationToken cancellationToken) [0x000ae] in:0
Шаги воспроизведения
Абсолютно непонятно, как повторить и кто создаёт некорректный payload для сериализации.
Конфигурация
Локально: Windows, .net 461, IIS 10 Express Удалённо: Linux, mono 5.18.0, docker (flexberry/alt.p8-apache2-mono:5.18.0)
Пути решения
Требуется расширенный дебаг.
Исходный код
Исключение прилетает из этого метода: https://github.com/OData/WebApi/blob/v5.7.0/OData/src/System.Web.OData/OData/Formatter/ODataMediaTypeFormatter.cs#L622 Предлагаю добавить дополнительное логирование в: https://github.com/Flexberry/NewPlatform.Flexberry.ORM.ODataService/blob/develop/NewPlatform.Flexberry.ORM.ODataService/Formatter/CustomODataSerializerProvider.cs