2016-09-16 4 views
1

Ich bin völlig grün und es macht mich verrückt - es funktioniert für einige Datensätze, aber nicht für andere.XML-Fehler: Wert war entweder zu groß oder zu klein für ein Byte ohne Vorzeichen

EDIT: Es sieht aus wie es mit der Anzahl der Datensätze zusammen ist - irgendwie, wenn die Anzahl der Datensätze eine bestimmte Menge erreicht - vielleicht so etwas wie 250 - das ist, wenn es das XML abstürzt. Irgendwie scheint der automatisch inkrementierende ID-Primärschlüssel involviert zu sein, weil ich sehen kann, dass wenn ich sogar 3 Datensätze hinzufüge, wenn die ID-Spalte in die 400er gegangen ist, aber alle Datensätze gelöscht werden, immer noch denselben Fehler erzeugt, aber wenn ich die ID zurücksetze auf Null - dieselben 3 Datensätze können hinzugefügt und im XML-Body korrekt formatiert werden.

Mapping-Typen: Int32 -> Byte System.Int32 -> System.Byte Zielpfad: FixtureDto.ExchangeType.ExchangeType.Id.Id Quellwert: 268

Wert war zu groß oder zu klein für eine nicht signierte Byte.

Der Typ 'ObjectContent`1 konnte den Antworttext für den Inhaltstyp' application/xml; charset = utf-8 '.

enter image description here

<Error> 
 
<Message>An error has occurred.</Message> 
 
<ExceptionMessage> 
 
The 'ObjectContent`1' type failed to serialize the response body for content type 'application/xml; charset=utf-8'. 
 
</ExceptionMessage> 
 
<ExceptionType>System.InvalidOperationException</ExceptionType> 
 
<StackTrace/> 
 
<InnerException> 
 
<Message>An error has occurred.</Message> 
 
<ExceptionMessage> 
 
Mapping types: Int32 -> Byte System.Int32 -> System.Byte Destination path: FixtureDto.ExchangeType.ExchangeType.Id.Id Source value: 268 
 
</ExceptionMessage> 
 
<ExceptionType>AutoMapper.AutoMapperMappingException</ExceptionType> 
 
<StackTrace> 
 
at System.Linq.Enumerable.WhereSelectListIterator`2.MoveNext() at WriteArrayOfFixtureDtoToXml(XmlWriterDelegator , Object , XmlObjectSerializerWriteContext , CollectionDataContract) at System.Runtime.Serialization.CollectionDataContract.WriteXmlValue(XmlWriterDelegator xmlWriter, Object obj, XmlObjectSerializerWriteContext context) at System.Runtime.Serialization.XmlObjectSerializerWriteContext.WriteDataContractValue(DataContract dataContract, XmlWriterDelegator xmlWriter, Object obj, RuntimeTypeHandle declaredTypeHandle) at System.Runtime.Serialization.XmlObjectSerializerWriteContext.SerializeAndVerifyType(DataContract dataContract, XmlWriterDelegator xmlWriter, Object obj, Boolean verifyKnownType, RuntimeTypeHandle declaredTypeHandle, Type declaredType) at System.Runtime.Serialization.XmlObjectSerializerWriteContext.SerializeWithXsiTypeAtTopLevel(DataContract dataContract, XmlWriterDelegator xmlWriter, Object obj, RuntimeTypeHandle originalDeclaredTypeHandle, Type graphType) at System.Runtime.Serialization.DataContractSerializer.InternalWriteObjectContent(XmlWriterDelegator writer, Object graph, DataContractResolver dataContractResolver) at System.Runtime.Serialization.DataContractSerializer.InternalWriteObject(XmlWriterDelegator writer, Object graph, DataContractResolver dataContractResolver) at System.Runtime.Serialization.XmlObjectSerializer.WriteObjectHandleExceptions(XmlWriterDelegator writer, Object graph, DataContractResolver dataContractResolver) at System.Runtime.Serialization.DataContractSerializer.WriteObject(XmlWriter writer, Object graph) at System.Net.Http.Formatting.XmlMediaTypeFormatter.WriteToStream(Type type, Object value, Stream writeStream, HttpContent content) at System.Net.Http.Formatting.XmlMediaTypeFormatter.WriteToStreamAsync(Type type, Object value, Stream writeStream, HttpContent content, TransportContext transportContext, CancellationToken cancellationToken) --- End of stack trace from previous location where exception was thrown --- at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task) at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) at System.Web.Http.WebHost.HttpControllerHandler.<WriteBufferedResponseContentAsync>d__1b.MoveNext() 
 
</StackTrace> 
 
<InnerException> 
 
<Message>An error has occurred.</Message> 
 
<ExceptionMessage> 
 
Value was either too large or too small for an unsigned byte. 
 
</ExceptionMessage> 
 
<ExceptionType>System.OverflowException</ExceptionType> 
 
<StackTrace> 
 
at System.Convert.ToByte(Int32 value) at System.Int32.System.IConvertible.ToByte(IFormatProvider provider) at System.Convert.ChangeType(Object value, Type conversionType, IFormatProvider provider) at System.ComponentModel.BaseNumberConverter.ConvertTo(ITypeDescriptorContext context, CultureInfo culture, Object value, Type destinationType) at AutoMapper.Mappers.TypeConverterMapper.<>c__DisplayClass1_0.<GetConverter>b__0() at AutoMapper.Mappers.TypeConverterMapper.Map(ResolutionContext context, IMappingEngineRunner mapper) at AutoMapper.MappingEngine.AutoMapper.IMappingEngineRunner.Map(ResolutionContext context) 
 
</StackTrace> 
 
</InnerException> 
 
</InnerException> 
 
</Error>

+0

Ich denke, ich habe es gelöst. Hatte Int für ID-Feld aber hatte es als Byte in Dto gemappt Feld. – user6063812

+0

OK good.hope entweder können Sie es als "Antwort" oder "löschen" diesen Beitrag. – Sampath

+0

Während ich hoffnungsvoll bleibe, dass dies tatsächlich das Problem ein für allemal gelöst hat - dies ist das dritte Mal, dass ich eine Lösung für dieses Problem in der einen oder anderen Form gepostet habe, so dass Sie mir vergeben werden, wenn ich ein wenig nehme während vorher rushing, um Erfolg zu schließen, bevor es richtig über eine befriedigende Zeitspanne – user6063812

Antwort

3

gelöst!

Ich hatte den Datentyp in meiner Datenbank-Klassendefinition von Byte nach int geändert, aber übersehen Spiegelung der gleichen Änderung in meinem äquivalenten Datentransfer-Mapping-Objekt.

Dies ist seit einiger Zeit ein Dorn im Auge und der dritte Versuch, auf den Grund davon zu kommen, der vorherige Versuch here und here.

Schließlich habe ich durch sorgfältige Wiederholungstests festgestellt, dass es nichts mit dem Hinzufügen von Indizes zu Tabellen oder schlechten Daten zu tun hat, oder das ID-Autoinkrement erneut zu sedimentieren, sondern durch die Anzahl der Datensätze in der Datenbank eingeschränkt wird durch den Datenübertragungs-Mapping-Fehler - dh Byte definierte ID-Spalte, die die Nummer begrenzt.

Ich habe die dto-Definition in int geändert, um die Datenbank zu vergleichen, und es funktioniert jetzt wunderbar, skalieren auf mehr als 255 Datensätze gleichzeitig so wie es tun sollte.
enter image description here

Verwandte Themen