Подтвердить что ты не робот

Как получить доступ к веб-сервису с помощью перегруженных методов

Я пытаюсь перегружать методы в веб-службе, но я получаю исключение System.InvalidOperationException при попытке "Добавить веб-ссылку" в Visual Studio 2005 (здесь соответствующие фрагменты кода):

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 

Я думал, что предоставление другого свойства MessageName в атрибуте WebMethod устранит эту проблему, но вот полное сообщение об ошибке, которое я получаю:

Оба System.String UploadFileBasic (System.String, Byte [], System.String, System.String) и System.String UploadFile (System.String, Byte [], System.String, System.String) используют сообщение имя 'UploadFileBasic'. Используйте свойство MessageName для настраиваемого атрибута WebMethod для указания уникальных имен сообщений для этих методов.

Веб-сервис компилируется ОК; Я не вижу, что здесь не так.

4b9b3361

Ответ 1

Мое предложение состоит в том, чтобы не использовать перегруженные имена методов. В WSDL такой концепции нет, так зачем беспокоиться?

Ответ 2

Вам нужно изменить эту часть:

[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]

к этому:

[WebServiceBinding(ConformsTo = WsiProfiles.None)]

Ответ 3

Обычно у меня есть объект класса за интерфейсом веб-службы, который имеет перегруженные методы, а затем создает отдельные методы в вашем файле asmx.cs с разными именами. Я знаю, что вы можете использовать атрибуты, но он просто делает более аккуратный код IMHO.