0

私のWebサービスは錆びているので、明らかな何かが欠けているだけだといいのですが。

部分的に、受信した呼び出しをサードパーティの SOAP サービスに中継する WCF サービスがあります。サービスは、送信する必要がある SOAP メッセージの本文と一致するオブジェクトを受け取ります。

SOAP サービスの WSDL に基づくサービス参照をプロジェクトに追加し、サービス プロキシ クラスのインスタンスを作成しました。呼び出したいサービス メソッドには 30 以上のパラメーターがあります。

で呼び出すこともできますMyService.TheMethod(obj.value1, obj.value2, obj.value3...)が、元のオブジェクトをそのまま渡すか、XML シリアル化して XML を本体として渡すとよいでしょう。

より簡単なアプローチを可能にするものはありますか、それとも obj のプロパティを個別に SOAP メソッドに渡す必要がありますか?

アップデート

根本的な問題を明確にする。

私の.NETサービスは何か「グループ」を受け入れます

public class Person { string Name; int Age;}
public class Group { string Name; Person[] Individuals; }

次に、サード パーティの Web サービス (TPWS) を呼び出す必要があります。WSDL から生成されたプロキシ クラスは、次のようになります。

public class WSPerson { string Name; uint Age;}
public class WSGroup { string Name; WSPerson[] Individuals; }

私は以前にプロトタイプを作成し、SoapUI を介して TPWS を操作し、元の (.NET) クラスの名前に一致するタグを使用していました。

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ws="http://ws.myabc123.com" xmlns:ns="http://schemas.datacontract.org/2004/07/" xmlns:sys="http://schemas.datacontract.org/2004/07/System" xmlns:arr="http://schemas.microsoft.com/2003/10/Serialization/Arrays">
   <soapenv:Header>
      <ws:ServiceCredentials>
         <ws:SubscriberId>ABC</ws:SubscriberId>
         <ws:SubscriberUser>Joe</ws:SubscriberUser>
         <ws:SubscriberPassword>12345</ws:SubscriberPassword>
         <!--Optional:-->
         <ws:SubscriberIdentityStore></ws:SubscriberIdentityStore>
      </ws:ServiceCredentials>
   </soapenv:Header>
   <soapenv:Body>
    <Group>
      <Name>Cool People</Name>
      <Individuals>
        <Person>
          <Name>Tom</Name>
          <Age>25</Age>
        </Person>
        <Person>
          <Name>Jane</Name>
          <Age>27</Age>
        </Person>
      </Individuals>
    </Group>
   </soapenv:Body>
</soapenv:Envelope> 
4

2 に答える 2

2

やりたいことを実現する簡単な方法はありません。呼び出しているサービスに 30 個のパラメーターがある場合は、30 個のパラメーターで呼び出すだけで済みます。

于 2012-10-10T20:22:20.080 に答える
0

おそらくこれは他の人を助けるでしょう。HTTP POST を介して Web サービスを呼び出すというアイデアを追求しています。

その理由は、この一般的な問題が同様の方法で何度も繰り返されるためです。受信データ コントラクトと、サード パーティのマッピング ツールが最終的に期待する XML の形式を制御します。ただし、サービスの独自のコントラクトを生成します。XmlSerializer を介して生成できる未加工の XML を認識できる場合、サード パーティ ツールに独自のマッピング機能を実行させるためだけにクラスをマッピングする必要はありません。

于 2012-10-11T14:35:45.747 に答える