這個問題一直困擾着我一段時間,我對解決它感到不知所措。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