这个问题一直困扰着我一段时间,我对解决它感到不知所措。Windows Server 2012 R2 IIS中的XML序列化错误,但在Windows 10中不存在IIS
我正在开发一个使用ASP MVC 5的应用程序,最近我已经开始研究生产环境。该程序使用IIS Express从Visual Studio在本地机器上构建并运行良好。
我已经在我的本地机器(Windows 10)上设置了IIS服务器,并发布到该工具,这也很好。
当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更新另一篇文章,所以我就又上一个新的虚拟机上安装新的Windows Server 2012 R2,并试图运行该网站之前做任何Windows更新但无济于事。我也慢慢地应用更新并重新尝试,直到所有更新完成并仍然遇到问题。
从错误消息中,您可以看到我正在使用SOAP Web服务,该服务在每个服务中都有其自己定义的类型。每种服务也有类型TLocalizedValue[]
,从错误它看起来像在ProductService
和CustomerService
之间的混合。为了解决这个问题,我去了并明确地输入了服务中的所有TLocalizedValue[]
字段到它们各自的ServiceRefName.TLocalizedValue[]
,但那也没用。
我仍然相信Windows Server上的System.XML
库会有一些奇怪的现象,但我对此感到茫然。我不认为我足够理解这个问题并深入解决问题。
任何指导都非常感谢,肖恩。
编辑:
不知道是否有帮助,但这里是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
,就像上面的错误一样。这个SO后的
您有一个数组的问题。阵列的默认序列化期望有两个级别的数组,如 ....... 。添加[XmlElement(“Name”)]声明可以消除标记。 –
jdweng
@jdweng我不确定我关注,你在哪里看到阵列问题? –
在例外情况下:无法分配EpagesSOAPClients.CustomerService4Ref.TLocalizedValue []类型的对象。没有看到xml和更多的代码就无法给出答案。 – jdweng