2016-06-08 84 views
0

这个问题一直困扰着我一段时间,我对解决它感到不知所措。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[],从错误它看起来像在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,就像上面的错误一样。这个SO后的

+0

您有一个数组的问题。阵列的默认序列化期望有两个级别的数组,如 .......。添加[XmlElement(“Name”)]声明可以消除标记。 – jdweng

+0

@jdweng我不确定我关注,你在哪里看到阵列问题? –

+0

在例外情况下:无法分配EpagesSOAPClients.CustomerService4Ref.TLocalizedValue []类型的对象。没有看到xml和更多的代码就无法给出答案。 – jdweng

回答

0

礼貌,我发现我的答案是:Switching to Release Build causes runtime error in Web Reference

不知什么地方,在所有的configs我的“生成序列化大会”选项,但“调试”分别设置为“自动”。设置为“关”已经修复。我不能相信我花了这么长时间才发现在构建配置一个小小的下拉列表...

enter image description here

相关问题