SOAP,使用标记<xx:tag> </xx:tag>中的前缀

时间:2010-06-19 07:23:55

标签: .net soap namespaces

我对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

1 个答案:

答案 0 :(得分:1)

首先,您使用的WSE已经过时了。除非你根本没有其他选择,否则不要这样做。

当我说“别无选择”时,我会说“不能退出工作”。

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

你可能看起来不对,因为你没有意识到,在XML中,命名空间前缀并不重要 - 只有前缀只是命名空间的别名,而且它是命名空间事项。特别是,以下三个例子是相同的:

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

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

<ElementName xmlns="urn:foo"/>

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