0

C# から JBoss ベースの専用アプリケーションから SOAP ベースの Web サービスを利用しようとしていますが (サービス参照を介して)、サーバーが SystemException を返し続けます。

フィドラーを使用して、ベンダーのフラッシュ フロント エンドと C# からの Web サービス呼び出しをキャプチャし、soapUI でそれらを比較/微調整して、違いを名前間隔の問題まで追跡しました。

基本的に、機能しないメッセージを取得して機能させるには、<addPackageItems xmlns="...">to<tns:addPackageItems xmlns:tns="...">および</addPackageItems>toに変更します</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 ..."、2 番目のノードでは空です。

正しい名前空間にノードを作成するように注意する必要があります。名前空間を指定する方法は、XML の作成方法によって異なります。

于 2013-04-22T16:18:25.870 に答える