如何使用重载方法访问Web服务

时间:2009-07-21 16:33:53

标签: c# web-services asmx

我正在尝试在Web服务中重载方法但是在Visual Studio 2005中尝试“添加Web引用”时遇到System.InvalidOperationException(这是相关的代码片段):

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,Byte [],System.String,System.String)和System.String UploadFile(System.String,Byte [],System.String,System.String)都使用该消息名称'UploadFileBasic'。使用WebMethod自定义属性的MessageName属性为方法指定唯一的消息名称。

Web服务编译正常;我看不出这里有什么问题。

4 个答案:

答案 0 :(得分:14)

我的建议是不要使用重载的方法名称。 WSDL中没有这样的概念,为什么要这么麻烦?

答案 1 :(得分:6)

您需要更改此部分:

[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]

到这一个:

[WebServiceBinding(ConformsTo = WsiProfiles.None)]

答案 2 :(得分:0)

我通常在Web服务接口后面有一个具有重载方法的类对象,然后在asmx.cs文件中使用不同的名称创建单独的方法。我知道你可以使用这些属性,但它只是制作更整洁的代码恕我直言。

答案 3 :(得分:0)

  

Web服务不允许操作重载。但您也可以按照以下步骤操作。

首先你需要改变

[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]

[WebServiceBinding(ConformsTo = WsiProfiles.None)]

其次,对于Overloaded方法,WebMethod的MessageName属性应该是不同的。

namespace foo
{
    /// <summary>
    /// Summary description for TestService
    /// </summary>
    [WebService(Namespace = "http://tempuri.org/")]
    [WebServiceBinding(ConformsTo = WsiProfiles.None)]
    [System.ComponentModel.ToolboxItem(false)]
    // To allow this Web Service to be called from script, using ASP.NET AJAX, uncomment the following line. 
    // [System.Web.Script.Services.ScriptService]
    public class TestService : System.Web.Services.WebService
    {

        [WebMethod(MessageName = "HelloWorld1")]
        public string HelloWorld()
        {
            return "Hello World";
        }

        [WebMethod(MessageName = "HelloWorld2")]
        public string HelloWorld(string Value = "default")
        {
            return "Hello World";
        }
    }
}

但是如果你要调用URL Like:

http://localhost:15558/TestService.asmx/HelloWorld2?Value=2

它会起作用。

但是如果你要调用URL Like:

http://localhost:15558/TestService.asmx/HelloWorld?Value=2

它会显示HTTP 500