2009-07-21 12 views
14

Próbuję mieć przeciążone metody w usłudze sieciowej, ale dostaję wyjątek System.InvalidOperationException przy próbie "Dodaj odniesienie do sieci" w Visual Studio 2005 (tutaj są odpowiednie fragmenty kodu):Jak uzyskać dostęp do usługi sieciowej z przeciążonymi metodami

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 

Myślałem, dostarczając na inną nieruchomość MessageName atrybutu WebMethod by rozwiązać ten problem, ale tutaj jest cały komunikat o błędzie pojawia się:

Zarówno system.string UploadFileBasic (system.string, Byte [ ], System.String, System.String) i System.String UploadFile (System.String, Byte [], System.String, System.String) użyj t nazwa wiadomości "UploadFileBasic". Użyj właściwości MessageName niestandardowego atrybutu WebMethod, aby określić unikalne nazwy komunikatów dla metod.

Usługa internetowa kompiluje OK; Nie widzę, co tu jest nie tak.

Odpowiedz

13

Moja sugestia to nie używać przeciążonych nazw metod. W WSDL nie ma takiej koncepcji, więc po co zawracać sobie głowę?

+0

widzę błąd moich sposobów teraz. Mój klient WWW może wywołać funkcję UploadFile lub UploadFileBasic. Moja usługa sieciowa definiuje je teraz jednoznacznie (bez przeciążania). Co ważniejsze, dzięki kolejnej sugestii w innym miejscu kod dla UploadFileBasic jest teraz po prostu wywołaniem funkcji UploadFile dostarczającej pustą tablicę jako ostatni parametr. Dziękuję za twoją pomoc, John. –

+0

Ten wpis nie odpowiada na pytanie, więc po co zawracać sobie głowę? – Gnial0id

+0

@ Gnial0id: ponad 5 lat temu PO czuł, że jest to odpowiedź, a 12 innych osób również głosowało. Po co zawracać sobie głowę komentowaniem? Prawdziwą odpowiedzią na pytanie "jak radzić sobie z przeciążonymi metodami w usłudze sieciowej SOAP" jest "SOAP nie ma koncepcji przeciążonych metod". –

0

Generalnie powinienem mieć obiekt klasy za interfejsem usługi WWW, który ma przeciążone metody, a następnie utworzyć indywidualne metody w pliku asmx.cs o różnych nazwach. Wiem, że możesz korzystać z atrybutów, ale po prostu tworzy on dokładniejszy kod IMHO.

7

trzeba zmienić tę część:

[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)] 

do tego:

[WebServiceBinding(ConformsTo = WsiProfiles.None)] 
Powiązane problemy