Это уже беспокоило меня какое-то время, и я не понимаю, как его решить.Ошибки сериализации XML в Windows Server 2012 R2 IIS, но не в Windows 10 IIS
Я разрабатываю приложение с использованием ASP MVC 5, и совсем недавно я начал работать над производственной средой. Программа строит и работает на моем локальном компьютере с Visual Studio с помощью IIS express.
Я также установил сервер IIS на свой локальный компьютер (Windows 10) и опубликовал его, что также отлично работает.
Проблема, похоже, возникает, когда Windows Server входит в уравнение.
Используя тот же опубликованный код и те же самые шаги IIS, я не могу заставить сайт работать на WinServer IIS. Есть какая-то проблема, которая кажется десериализацией XML. Я получаю ошибку следующим образом:
System.InvalidOperationException: There is an error in XML document (1, 999). ---> System.InvalidCastException: Cannot assign object of type EpagesSOAPClients.CustomerService4Ref.TLocalizedValue[] to an object of type EpagesSOAPClients.ProductService9Ref.TLocalizedValue[].
at Microsoft.Xml.Serialization.GeneratedAssembly.XmlSerializationReader1.Read14_TGetInfo_Return()
at System.Xml.Serialization.XmlSerializationReader.ReadReferencingElement(String name, String ns, Boolean elementCanBeType, String& fixupReference)
at System.Xml.Serialization.XmlSerializationReader.ReadArray(String typeName, String typeNs)
at System.Xml.Serialization.XmlSerializationReader.ReadReferencingElement(String name, String ns, Boolean elementCanBeType, String& fixupReference)
at Microsoft.Xml.Serialization.GeneratedAssembly.XmlSerializationReader1.Read100_getInfoResponse()
at Microsoft.Xml.Serialization.GeneratedAssembly.ArrayOfObjectSerializer21.Deserialize(XmlSerializationReader reader)
at System.Xml.Serialization.XmlSerializer.Deserialize(XmlReader xmlReader, String encodingStyle, XmlDeserializationEvents events)
--- End of inner exception stack trace ---
Я видел еще один пост на SO предположить, что, возможно, это было связано окна обновления, так что я дошел до установки свежей Windows Server 2012 R2 на новую виртуальную машину и пытается запустить на сайте перед выполнением любых обновлений Windows, но безрезультатно. Я также медленно применял обновления и повторил их до тех пор, пока все обновления не были выполнены, и все же я столкнулся с проблемой.
Из сообщения об ошибке видно, что я использую веб-службу SOAP, которая имеет свои определенные типы в каждой службе. Каждая услуга также имеет тип TLocalizedValue[]
, и из-за ошибки она выглядит смешанной между ошибками ProductService
и CustomerService
. В попытке исправить это я пошел и явным образом набрал все поля TLocalizedValue[]
в сервисах своим соответствующим ServiceRefName.TLocalizedValue[]
, но это тоже было бесполезно.
Мне осталось поверить, что на Windows Server есть что-то напуганное с библиотекой System.XML
, но я не понимаю, что. Я не думаю, что я понимаю это достаточно, чтобы развернуть проблему и исправить ее.
Любое руководство очень ценится, Шон.
EDIT:
Не уверен, если это поможет, но вот декларация TLocalizedValue
в ProductService
ссылке:
/// <remarks/>
[System.CodeDom.Compiler.GeneratedCodeAttribute("System.Xml", "4.6.1064.2")]
[System.SerializableAttribute()]
[System.Diagnostics.DebuggerStepThroughAttribute()]
[System.ComponentModel.DesignerCategoryAttribute("code")]
[System.Xml.Serialization.SoapTypeAttribute(Namespace="urn://epages.de/WebService/EpagesTypes/2005/01")]
public partial class TLocalizedValue {
private string languageCodeField;
private string valueField;
/// <remarks/>
public string LanguageCode {
get {
return this.languageCodeField;
}
set {
this.languageCodeField = value;
}
}
/// <remarks/>
public string Value {
get {
return this.valueField;
}
set {
this.valueField = value;
}
}
}
После некоторого дальнейшего тестирования, то получается, что CustomerService
работает, но никто других. Все они, похоже, путают свою декларацию TLocalizedValue
как принадлежащую CustomerServiceRef
, как и вышеприведенную ошибку.
У вас есть вопрос массива. Сериализация по умолчанию для массивов предполагает наличие двух уровней массива, таких как ....... .Добавление объявления [XmlElement ("Name")] исключает тег . –
jdweng
@jdweng Я не уверен, что я следую, где вы видите проблему с массивом? –
За исключением: Нельзя назначить объект типа EpagesSOAPClients.CustomerService4Ref.TLocalizedValue []. Не могу дать ответ, не видя xml и больше вашего кода. – jdweng