2009-07-21 2 views
14

Я пытаюсь перегружать методы в веб-службе, но я получаю исключение 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) используют t имя сообщения 'UploadFileBasic'. Используйте свойство MessageName для настраиваемого атрибута WebMethod для указания уникальных имен сообщений для этих методов.

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

ответ

13

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

+0

Я вижу ошибку моего пути в настоящее время. Мой веб-клиент может вызывать либо UploadFile, либо UploadFileBasic. Теперь мой web-сервис определяет как однозначно (без перегрузки). Более того, благодаря другому предложению в другом месте, код для UploadFileBasic теперь просто является вызовом UploadFile, который представляет пустой массив в качестве последнего параметра. Спасибо вам за вашу помощь, Джон. –

+0

Это сообщение на самом деле не отвечает на вопрос, так зачем беспокоиться? – Gnial0id

+0

@ Gnial0id: более 5 лет назад ОП считал, что это был ответ, и еще 12 человек проголосовали. Зачем беспокоиться об этом? Реальный ответ на вопрос «как бороться с перегруженными методами в веб-службе SOAP» - это «SOAP не имеет понятия перегруженных методов». –

0

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

7

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

[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)] 

к этому:

[WebServiceBinding(ConformsTo = WsiProfiles.None)] 
Смежные вопросы