1

配列を入力として受け取る .NET の Web サービスがあります。サービスのリクエストは次のように見られます

<soap:Body>
<DisplayNames xmlns="http://tempuri.org/">
  <Names>
    <Name>
      <FirstName>string</FirstName>
      <LastName>string</LastName>
    </Name>
    <Name>
      <FirstName>string</FirstName>
      <LastName>string</LastName>
    </Name>
  </Names>
</DisplayNames>

親タグ(NAMES)を外して、以下のようにリクエストすることは可能でしょうか?

<soap:Body>
<DisplayNames xmlns="http://tempuri.org/">
    <Name>
      <FirstName>string</FirstName>
      <LastName>string</LastName>
    </Name>
    <Name>
      <FirstName>string</FirstName>
      <LastName>string</LastName>
    </Name>
</DisplayNames>

4

2 に答える 2

1

メソッドを変更しました

から

[WebMethod] public string DisplayNames(Name [] NameCollection){

[WebMethod] public string DisplayNames([XmlElement( "Names")] Name [] NameCollection){

于 2012-05-24T10:52:09.680 に答える
1

既存のツールを使用せずに、クライアントがそのように送信する必要がないように、Web サービスの動作方法を変更することを意味する場合。これは、XML がコード関数にマップされる方法に関係しています。

あなたの関数がコード ビハインドでどのように見えるか正確にはわかりませんが、XML から、次のように見えると推測できます (戻り値を推測します)。

[WebMethod]
private bool DisplayNames(Name[] Names)
{
   ...
}

この特定のサービスは、名前の配列だけを取ります。<Names>タグは、その 1 つの入力パラメーターを指定しました。ランタイムはこれを予期される名前パラメーターとして認識し、解析することができます。あなたが考えていることは、すべての Web サービスが 1 つの配列パラメーターのみを受け取る場合に機能する可能性があります。

それが理にかなっているのかどうかはわかりませんが、例として、この Web サービスも「IgnoreErrors」という名前のブール値を取るとします。

[WebMethod]
private bool DisplayNames(Name[] Names, bool IgnoreErrors)
{
   ...
}

XML は次のようになります。

<soap:Body>
<DisplayNames xmlns="http://tempuri.org/">
  <Names>
    <Name>
      <FirstName>string</FirstName>
      <LastName>string</LastName>
    </Name>
    <Name>
      <FirstName>string</FirstName>
      <LastName>string</LastName>
    </Name>
  </Names>
  <ShowErrors>
    <value>false</value>
  </ShowErrors>
</DisplayNames>

求めていることを実行する場合、タグを削除すると、次のようになります。

<soap:Body>
<DisplayNames xmlns="http://tempuri.org/">
  <Name>
      <FirstName>string</FirstName>
      <LastName>string</LastName>
  </Name>
  <Name>
      <FirstName>string</FirstName>
      <LastName>string</LastName>
  </Name>
  </Names>
  <ShowErrors>
    <value>false</value>
  </ShowErrors>
</soap:Body>

それを見て、コード ビハインドで Function シグネチャがどのように見えるかを想像してみてください。1 つの配列と 1 つのブール値の代わりに、これは 2 つの辞書と 1 つのブール値のように見えます。

繰り返しますが、<Name>タグはコード ビハインド関数の Name パラメーターを識別します。

于 2012-05-17T13:59:33.473 に答える