c# Webservice客户端:如何避免导致服务抛出SystemException(似乎是一个xml命名空间问题)
本文关键字:似乎是 一个 问题 命名空间 xml SystemException 客户端 Webservice 何避免 服务 | 更新日期: 2023-09-27 18:10:17
我试图从c#中使用一个专有的、基于JBoss的应用程序(通过服务引用)中使用基于SOAP的web服务,但是服务器一直返回SystemException。
我使用fiddler捕获来自供应商的flash前端和c#的webservice调用,并在soapUI中比较/调整它们,直到我将差异追踪到名称间距问题。
基本上采取非工作消息并使其工作,我将<addPackageItems xmlns="...">
修改为<tns:addPackageItems xmlns:tns="...">
, </addPackageItems>
修改为</tns:addPackageItems>
我的问题基本上是我如何通过在客户端(我的c#代码)进行修改来完成这项工作?我讨厌如此通用,但说实话,我不知道为什么需要命名空间来避免服务器上的错误,所以我不想问如何修改我的c#代码来生成addPackageItems
上的xmlns的名称空间,如果有一个替代的,更好的解决方案。
混杂。
c#代码使用了在Visual Studio 2012下添加服务引用生成的代码。我可以提供电话号码;如果没有可用的WSDL,我不相信它真的有用,而且我不确定我是否被允许在我们的协议下提供它们(我从未见过它)。
不工作的SOAP消息
<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<s:Body>
<addPackageItems xmlns="http://www.docfinity.com/webservices/BpmClientWebServices/">
<processInstanceId>87499</processInstanceId>
<packageItemDto>
<packageItemName>document</packageItemName>
<properties>
<name>documentId</name>
<stringValue>0c7eb1cb3a94986f013ae5c4d8777fde</stringValue>
</properties>
<type>DocFinityDocument</type>
</packageItemDto>
</addPackageItems>
</s:Body>
</s:Envelope>
工作soap消息
<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<s:Body>
<tns:addPackageItems xmlns:tns="http://www.docfinity.com/webservices/BpmClientWebServices/">
<processInstanceId>87499</processInstanceId>
<packageItemDto>
<packageItemName>document</packageItemName>
<properties>
<name>documentId</name>
<stringValue>0c7eb1cb3a94986f013ae5c4d8777fde</stringValue>
</properties>
<type>DocFinityDocument</type>
</packageItemDto>
</tns:addPackageItems>
</s:Body>
</s:Envelope>
两个XML文档几乎是完全不同的——结果一个工作另一个没有。
-
<addPackageItems xmlns="http://www...
表示"这个和所有没有前缀的子节点都有这个命名空间" -
<tns:addPackageItems xmlns:tns="http://www...
表示"此和节点所有带有tns
前缀的子节点都具有此命名空间,没有前缀的节点具有先前的默认命名空间。
所以在2个文档<processInstanceId>
节点(和兄弟/子节点)有不同的命名空间- "http://www.docfinity.com/webs…"在第一个,在第二个空。
您需要小心地在正确的名称空间中创建节点。指定名称空间的方式取决于您创建XML的方式。