【问题标题】:SOAP, using prefixes in tags <xx:tag>SOAP,在标签 <xx:tag> 中使用前缀
【发布时间】:2023-03-25 02:31:01
【问题描述】:

我不喜欢 SOAP。第三方 SOAP 服务给了我用于他们 api 的示例代码。他们提供的代码(我完全复制到我的解决方案中)没有在所有标签之前吐出所需的前缀。

现在,他们给我的代码导致我发出没有所有标签前缀的请求/响应...

<tagName />

。如何使所有标签看起来像...

<com:tagName />

这是我的 WebServicesClient 的属性

[System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.42")]
[System.Diagnostics.DebuggerStepThroughAttribute()]
[System.ComponentModel.DesignerCategoryAttribute("code")]
[System.Web.Services.WebServiceBindingAttribute(Name = "catalogHttpBinding", Namespace = "http://com.etilize.spexlive")]
[System.Xml.Serialization.XmlIncludeAttribute(typeof(CategoryCollection))]
public partial class catalog : Microsoft.Web.Services3.WebServicesClientProtocol

【问题讨论】:

    标签: .net soap namespaces


    【解决方案1】:

    首先,您使用的是已过时的 WSE。除非您别无选择,否则不要这样做。

    当我说“没有其他选择”时,我包括“不能辞职”。

    其次,这不是 SOAP 问题。它是基本的 XML。您需要您的元素位于特定的命名空间中。由于看起来您使用了正确的过时工具来生成客户端,因此您的元素很可能已经在正确的命名空间中。

    这可能对您来说是错误的,因为您没有意识到,在 XML 中,名称空间 前缀 无关紧要 - 只有前缀只是名称空间的别名,它是名称空间很重要。特别是以下三个例子是相同的:

    <a:ElementName xmlns:a="urn:foo"/>
    
    <b:ElementName xmlns:b="urn:foo"/>
    
    <ElementName xmlns="urn:foo"/>
    

    如果您的供应商实际上需要一个特定的前缀(而不是特定的命名空间),那么它们就被严重破坏,违反了国际标准,并且应该被公开嘲笑为无能。如果每个供应商都实现他们自己版本的 XML 标准,那么用不了多久它就不再是标准了,我们将无法依赖它。由于 XML 的大部分功能都来自于它是一个标准这一事实,这将是不幸的。

    【讨论】:

    • 不幸的是,这个供应商的 api 有很多问题。我不能简单地“添加服务引用”,因为我遇到了很多错误,例如无法将“类型”转换为“类型 []”。示例代码尽可能接近以他们理解的方式与他们的垃圾进行通信.这很有趣,因为我现在必须找到一种方法来做到这一点,因为他们的 api 的一部分需要 com 前缀。
    • 另外,我对这个供应商很生气,我会提到他们的名字。它是一家相当有信誉的公司。是Etilizeetilize.com
    猜你喜欢
    • 2019-04-17
    • 1970-01-01
    • 1970-01-01
    • 2011-02-12
    • 1970-01-01
    • 2021-08-16
    • 1970-01-01
    • 1970-01-01
    • 2019-01-08
    相关资源
    最近更新 更多