【发布时间】:2016-06-08 07:24:11
【问题描述】:
这个问题已经困扰我一段时间了,我不知道如何解决它。
我正在使用 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 更新有关,因此我在新 VM 上安装新的 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,就像上面的错误一样。
【问题讨论】:
-
您遇到了阵列问题。数组的默认序列化需要两个级别的数组,如
。添加 [XmlElement("Name")] 声明会消除....... 标记。 -
@jdweng 我不确定我是否关注,您在哪里看到阵列问题?
-
在异常中:无法分配 EpagesSOAPClients.CustomerService4Ref.TLocalizedValue[] 类型的对象。没有看到 xml 和更多代码就无法给出答案。
-
很公平,我很乐意发布更多代码,但我认为我会过度填写帖子。我会看看我是否可以获取 XML 并查看它
标签: c# asp.net xml iis visual-studio-2012