2009-07-21 16 views
14

Webサービスでオーバーロードされたメソッドを使用しようとしていますが、Visual Studio 2005で "Web参照の追加"を試みるとSystem.InvalidOperationExceptionが発生します。 ):オーバーロードされたメソッドを使用してWebサービスにアクセスする方法

public class FileService : System.Web.Services.WebService 
{ 
    private static readonly MetaData[] EmptyMetaData = new MetaData[0]; 
    public FileService() 
    { 
    // a few innocent lines of constructor code here... 
    } 
    [WebMethod(MessageName = "UploadFileBasic", 
     Description = "Upload a file with no metadata properties")] 
    public string UploadFile(string trimURL 
     , byte[] incomingArray 
     , string fileName 
     , string TrimRecordTypeName) 
    { 
     return UploadFile(trimURL 
       , incomingArray 
       , fileName 
       , TrimRecordTypeName 
       , EmptyMetaData); 
    } 
    [WebMethod(MessageName = "UploadFile", 
     Description = "Upload a file with an array of metadata properties (Name/Value pairs)")] 
    public string UploadFile(string trimURL 
     , byte[] incomingArray 
     , string FileName 
     , string TrimRecordTypeName 
     , MetaData[] metaDataArray) 
    { 
    // body of UploadFile function here 

私はWebMethod属性の異なるMessageNameにプロパティを供給すると、この問題を解決するが、ここで私が手全体のエラーメッセージであるだろうと思った:

どちらも可能System.String UploadFileBasic(可能System.String、バイト[ ]、System.String、System.String)とSystem.String UploadFile(System.String、Byte []、System.String、System.String)を使用します。彼はメッセージの名前 'UploadFileBasic'です。メソッドの一意のメッセージ名を指定するには、WebMethodカスタム属性のMessageNameプロパティを使用します。

Webサービスが正常にコンパイルされます。私はここで何が間違っているのか分かりません。

答えて

13

私の提案は、オーバーロードされたメソッド名を使用しないことです。 WSDLにそのような概念はないので、なぜ気になるのですか?

+0

は、私は今私の方法のエラーを参照してください。私のWebクライアントは、UploadFileまたはUploadFileBasicを呼び出すことができます。私のWebサービスでは、現在は一意に定義されています(オーバーロードはありません)。もっと重要なことに、別の提案のおかげで、UploadFileBasicのコードは、最後のパラメータとして空の配列を提供するUploadFileの呼び出しになりました。あなたの助けをありがとう、ジョン。 –

+0

この投稿は実際に質問に答えていないので、なぜ気になるのですか? – Gnial0id

+0

@ Gnial0id:5年以上前、OPはそれが答えであると感じ、12人の他の人も投票しました。なぜそれについてコメントするの? 「SOAP Webサービスでオーバーロードされたメソッドを処理する方法」に対する真の答えは、「SOAPにはオーバーロードされたメソッドの概念がありません」です。 –

0

私は一般に、オーバーロードされたメソッドを持つWebサービスインターフェイスの背後にあるクラスオブジェクトを持っていて、別の名前でasmx.csファイル内に個々のメソッドを作成します。私はあなたが属性を使用することができますが、それはちょっとしたコードをIMHOにすることを知っています。この1に

[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)] 

7

あなたはこの部分を変更する必要が

[WebServiceBinding(ConformsTo = WsiProfiles.None)] 
関連する問題