为了账号安全,请及时绑定邮箱和手机立即绑定

什么会导致已部署服务中的反序列化在本地成功时失败?

什么会导致已部署服务中的反序列化在本地成功时失败?

C#
红颜莎娜 2023-04-29 09:48:37
我向我的 WCF 服务添加了第二种方法。它本质上与另一个执行相同的工作,只是它接收一个 xml 文档,对其进行反序列化,然后调用另一个方法。它在本地完美运行,我的 XML 被反序列化并且调用成功。但是,现在我已经将它部署在我的本地服务器上,调用返回 500 错误,因为反序列化失败。我的 XML 文档具有与每个节点关联的名称空间,根元素和子根元素具有“ns1”等所有其他“ns2”前缀。为了进行反序列化,我(至少现在)对每个节点的命名空间进行了硬编码。截断后的 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>服务方法中的反序列化过程: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);}对应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贡献1786条经验 获得超11个赞

遇到的问题确实是反序列化问题。但是,这与我编写的代码无关,而是在收到字符串参数时。因为我的 xml 文档被包裹在另一个 xml 文档(请求)中,所以在处理过程中出现了问题。通过在我的逻辑应用程序中对我的 XML 进行 base64 编码,并在服务中对其进行解码,我能够解决反序列化问题。

TLDR:通过 String 参数发送 xml 时要小心。


查看完整回答
反对 回复 2023-04-29
  • 1 回答
  • 0 关注
  • 114 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信