2016-06-08 88 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

相關問題