【问题标题】:XML Serialization Errors in Windows Server 2012 R2 IIS, but not in Windows 10 IISWindows Server 2012 R2 IIS 中的 XML 序列化错误,但在 Windows 10 IIS 中没有
【发布时间】: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[] 类型,从错误来看,它看起来像是在ProductServiceCustomerService 之间混淆了。为了解决这个问题,我将服务中的所有 TLocalizedValue[] 字段显式键入到它们各自的 ServiceRefName.TLocalizedValue[] 中,但这也没用。

我不得不相信 Windows Server 上的 System.XML 库发生了一些奇怪的事情,但我不知道是什么。我认为我对它的理解还不够深入,无法深入研究并解决它。

非常感谢任何指导,肖恩。

编辑:

不确定它是否有帮助,但这是TLocalizedValueProductService 参考中的声明:

/// <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


【解决方案1】:

感谢这篇 SO 帖子,我找到了答案:Switching to Release Build causes runtime error in Web Reference

不知何故,我在所有配置中的“生成序列化程序集”选项,但“调试”设置为“自动”。设置为“关闭”已修复。我不敢相信我花了这么长时间才在构建配置中找到一个小下拉列表...

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多