2009-07-21 9 views
14

J'essaie d'avoir des méthodes surchargées dans un service Web mais j'obtiens une exception System.InvalidOperationException lors de la tentative de "Ajouter une référence Web" dans Visual Studio 2005 (voici les extraits de code pertinents):Comment accéder à un service Web avec des méthodes surchargées

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 

Je pensais que fournir une autre propriété MessageName sur l'attribut WebMethod devrait corriger ce problème, mais voici l'intégralité du message d'erreur que je reçois:

deux System.String UploadFileBasic (System.String, Byte [ ], System.String, System.String) et System.String UploadFile (System.String, Byte [], System.String, System.String) utilisent t Le nom du message 'UploadFileBasic'. Utilisez la propriété MessageName de l'attribut personnalisé WebMethod pour spécifier des noms de message uniques pour les méthodes.

Le service Web compile OK; Je ne peux pas voir ce qui ne va pas ici.

Répondre

13

Ma suggestion est de ne pas utiliser de noms de méthodes surchargés. Il n'y a pas un tel concept dans WSDL, alors pourquoi s'embêter?

+0

Je vois l'erreur de mes moyens maintenant. Mon client peut appeler UploadFile ou UploadFileBasic. Mon webservice définit à la fois de manière unique (pas de surcharge). Plus important, grâce à une autre suggestion ailleurs, le code de UploadFileBasic est maintenant simplement l'invocation de UploadFile fournissant un tableau vide comme dernier paramètre. Merci pour votre aide, John. –

+0

Ce message ne répond pas vraiment à la question, alors pourquoi s'embêter? – Gnial0id

+0

@ Gnial0id: il y a plus de 5 ans, le PO pensait que c'était une réponse, et 12 autres personnes ont également voté. Pourquoi s'embêter à commenter? La vraie réponse à "comment traiter les méthodes surchargées dans un service web SOAP" est "SOAP n'a pas de concept de méthodes surchargées". –

0

J'ai généralement un objet de classe derrière l'interface de service Web qui a les méthodes surchargées, puis créer des méthodes individuelles dans votre fichier asmx.cs avec des noms différents. Je sais que vous pouvez utiliser les attributs, mais il fait juste plus de code à mon humble avis.

7

Vous devez modifier cette partie:

[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)] 

à celui-ci:

[WebServiceBinding(ConformsTo = WsiProfiles.None)] 
Questions connexes