我向我的 WCF 服務(wù)添加了第二種方法。它本質(zhì)上與另一個執(zhí)行相同的工作,只是它接收一個 xml 文檔,對其進(jìn)行反序列化,然后調(diào)用另一個方法。它在本地完美運(yùn)行,我的 XML 被反序列化并且調(diào)用成功。但是,現(xiàn)在我已經(jīng)將它部署在我的本地服務(wù)器上,調(diào)用返回 500 錯誤,因?yàn)榉葱蛄谢?。我?XML 文檔具有與每個節(jié)點(diǎn)關(guān)聯(lián)的名稱空間,根元素和子根元素具有“ns1”等所有其他“ns2”前綴。為了進(jìn)行反序列化,我(至少現(xiàn)在)對每個節(jié)點(diǎn)的命名空間進(jìn)行了硬編碼。截斷后的 xml 文檔:<ns1:ValiderEtEnrichirGlobalEchangePartage xmlns:ns1="API:WebApi" xmlns:ns0="http://www.ra.fr/API/Transport/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <ns1:messageGlobal> <ns0:AuteurEchange>...</ns0:AuteurEchange> <ns0:Documents> <ns0:DocumentEchangePartage>...</ns0:DocumentEchangePartage> </ns0:Documents> <ns0:ExpediteurEchange>...</ns0:ExpediteurEchange> </ns1:messageGlobal>服務(wù)方法中的反序列化過程:public GlobalEchangePartageValide ValiderEtEnrichirGlobalEchangePartageXML(string xmlMessageGlobal){ XmlRootAttribute xroot = new XmlRootAttribute(); xroot.ElementName="ValiderEtEnrichirGlobalEchangePartage"; xroot.Namespace="API:WebApi"; XmlSerializer serializer = new XmlSerializer(typeof(ValiderEtEnrichirGlobalEchangePartage),xroot ); StringReader stringReader = new StringReader(xmlMessageGlobal); ValiderEtEnrichirGlobalEchangePartage messageGlobal = (ValiderEtEnrichirGlobalEchangePartage)serializer.Deserialize(stringReader); return ValiderEtEnrichirGlobalEchangePartage(messageGlobal.GlobalEchangePartage);}對應(yīng)xml根元素的類:[XmlRootAttribute("ValiderEtEnrichirGlobalEchangePartage")]public class ValiderEtEnrichirGlobalEchangePartage{ [XmlElement(ElementName=("messageGlobal"))] public GlobalEchangePartage GlobalEchangePartage { get; set; }}xml子根元素的類:[DataContract(Namespace = NamespacesConstantes.NAMESPACE_TRANSPORT)]public class GlobalEchangePartage{ [DataMember] [XmlElement(ElementName = ("AuteurEchange"), Namespace = "http://www.ra.fr/API/Transport/")] public Auteur AuteurEchange { get; set; }}請注意它是如何表示 XML 文檔中期望“xmlMessageGlobal”的,而它是變量的名稱......
1 回答

Qyouu
TA貢獻(xiàn)1786條經(jīng)驗(yàn) 獲得超11個贊
遇到的問題確實(shí)是反序列化問題。但是,這與我編寫的代碼無關(guān),而是在收到字符串參數(shù)時。因?yàn)槲业?xml 文檔被包裹在另一個 xml 文檔(請求)中,所以在處理過程中出現(xiàn)了問題。通過在我的邏輯應(yīng)用程序中對我的 XML 進(jìn)行 base64 編碼,并在服務(wù)中對其進(jìn)行解碼,我能夠解決反序列化問題。
TLDR:通過 String 參數(shù)發(fā)送 xml 時要小心。
- 1 回答
- 0 關(guān)注
- 160 瀏覽
添加回答
舉報
0/150
提交
取消