2

C#関数に渡されるオプションのデータをサポートする最良の方法は何ですか?

.Netに5つの引数を定義するWebサービス関数があります。

[WebMethod]
    public string UploadFile( string wsURL
        , byte[] incomingArray
        , string FileName
        , string RecordTypeName
        , MetaData[] metaDataArray)

この関数のコードは長すぎず(ただし、些細なことでもありません)、処理するMetaData []がある場合、このテストを実行する関数内の場所は1つだけです。

        if (metaDataArray.Length > 0)
        {
            Update update = BuildMetaData(metaDataArray);
            treq2.Items = new Operation[] { sru, cin, update, fetch};
        }
        else
        {
            treq2.Items = new Operation[] { sru, cin, fetch};
        }

上記の迅速で汚いバージョンが必要でしたが、これは4つの引数しか取りません(つまり、最後の引数として「Metadata」配列はありません)。そのため、関数全体のクローンを作成し、メタデータを参照するIF-ELSEブロックを削除しました。醜い私は知っています。

[WebMethod]
    public string UploadFileBasic( string wsURL
        , byte[] incomingArray
        , string FileName
        , string RecordTypeName)

今、私は物事をより良くしたいと思っており、これをサポートするための最良の方法についてのアドバイスを探しています。5番目のパラメーターとして空の配列を作成することでクライアントプログラムに負担をかけたくありません...このオプションのデータを処理するのに十分スマートなWebサービス関数が必要です。ありがとう。

4

4 に答える 4

7

5つの引数を取るメソッドのチェックをに変更します(とにかく値がnullかどうかをチェックする必要があることに注意してください)。

    if (metaDataArray != null && metaDataArray.Length > 0)
    {
        Update update = BuildMetaData(metaDataArray);
        treq2.Items = new Operation[] { sru, cin, update, fetch };
    }
    else
    {
        treq2.Items = new Operation[] { sru, cin, fetch};
    }

次に、4つの引数のバージョンで、metaDataArray引数をnullにして内部的に5つの引数のバージョンを呼び出すようにします。

[WebMethod]
public string UploadFileBasic( string wsURL,
                               byte[] incomingArray,
                               string FileName,
                               string RecordTypeName)
{
    return UploadFile( wsUrl, incomingArray, fileName, RecordTypeName, null );
}
于 2009-07-20T20:43:06.990 に答える
3
private static readonly MetaData[] EmptyMetaData = new MetaData[0];

[WebMethod]
public string UploadFile(string wsURL
    , byte[] incomingArray
    , string fileName
    , string recordTypeName)
{
    return UploadFile(wsURL, incomingArray, fileName, recordTypeName, EmptyMetaData)
}
于 2009-07-20T20:39:30.647 に答える
2

MetaData配列を含むすべての引数を単一のクラスに入れて、それをWebサービスの引数として使用するのはどうですか。

public class UploadFileAgrument 
{
  public string wsURL;
  public byte[] incomingArray;
  public string FileName;
  public string RecordTypeName;
  public MetaData[] metaDataArray;
}

[WebMethod]
public string UploadFile(UploadFileAgrument fileToUpload)
{
  if(fileToUpload.metaDataArray!=null && metaDataArray.Length > 0)
  {
  }
  else
  {
  }  
}
于 2009-07-20T20:49:09.613 に答える
0
[WebMethod]
    public string UploadFileBasic( string wsURL
        , byte[] incomingArray
        , string FileName
        , string RecordTypeName)
{
    return UploadFile(wsURL, incomingArray, FileName, RecordTypeName, new MetaData[0]);
}

次に、UploadFileメソッドがすべてを処理しますが、コンシューマーが何を望んでいるかに応じて、2つのインターフェースを公開できます。

于 2009-07-20T20:41:00.113 に答える