0

我试图从 C#(通过服务引用)的基于 JBoss 的专有应用程序中使用基于 SOAP 的 Web 服务,但服务器不断返回 SystemException。

我使用提琴手从供应商的闪存前端和 C# 捕获 Web 服务调用,并在soapUI 中比较/调整它们,直到我将差异追踪到名称间距问题。

基本上是为了接收一条无效的消息并使其工作,我修改<addPackageItems xmlns="..."><tns:addPackageItems xmlns:tns="..."></addPackageItems></tns:addPackageItems>

我的问题基本上是如何通过在客户端(我的 C# 代码)中进行修改来完成这项工作?我讨厌这么通用,但老实说,我不知道为什么需要命名空间来避免服务器上的错误,所以我不想问如何修改我的 C# 代码来为 xmlns 生成命名空间关于addPackageItems是否有其他更好的解决方案。

杂项。信息

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>

工作肥皂消息

<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>
4

1 回答 1

0

2 XML 文档几乎完全不同——因为另一个作品的结果没有。

  • <addPackageItems xmlns="http://www...意思是“这个和所有没有前缀的子节点都将有这个命名空间”
  • <tns:addPackageItems xmlns:tns="http://www...意思是“这个和节点所有带tns前缀的子节点都有这个命名空间,没有前缀的节点有以前的默认命名空间。

因此,在 2 个文档<processInstanceId>节点(和兄弟/子节点)中有不同的命名空间 - 第一个是“ http://www.docfinity.com/webs ...”,第二个是空的。

您需要小心在正确的命名空间中创建节点。指定名称空间的方式取决于您创建 XML 的方式。

于 2013-04-22T16:18:25.870 回答