我对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
答案 0 :(得分:1)
首先,您使用的WSE已经过时了。除非你根本没有其他选择,否则不要这样做。
当我说“别无选择”时,我会说“不能退出工作”。
其次,这不是SOAP问题。这是基本的XML。您需要将元素放在特定的命名空间中。由于您似乎使用了正确的过时工具来生成客户端,因此您的元素可能已经在正确的命名空间中。
你可能看起来不对,因为你没有意识到,在XML中,命名空间前缀并不重要 - 只有前缀只是命名空间的别名,而且它是命名空间事项。特别是,以下三个例子是相同的:
<a:ElementName xmlns:a="urn:foo"/>
<b:ElementName xmlns:b="urn:foo"/>
<ElementName xmlns="urn:foo"/>
如果您的供应商实际上需要特定的前缀(而不是特定的名称空间),那么它们就会被严重破坏,违反国际标准,并且应该被公开嘲笑为不称职。如果每个供应商都实现了他们自己的XML标准版本,那么不久之后它就不再是标准了,我们将无法依赖它。由于XML的大部分功能来自于它是标准的事实,这将是不幸的。