2009-07-21 13 views
14

Estoy intentando tener métodos sobrecargados en un servicio web, pero estoy obteniendo una excepción System.InvalidOperationException al intentar "Agregar referencia web" en Visual Studio 2005 (aquí están los fragmentos de código relevantes)):Cómo acceder a un servicio web con métodos sobrecargados

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 

pensé suministrar una propiedad MessageName diferente en el atributo WebMethod sería solucionar este problema, pero aquí es todo el mensaje de error que consigo:

Tanto System.String UploadFileBasic (System.String, Byte [ ], System.String, System.String) y System.String UploadFile (System.String, Byte [], System.String, System.String) usan t El nombre del mensaje 'UploadFileBasic'. Use la propiedad MessageName del atributo personalizado WebMethod para especificar nombres de mensajes únicos para los métodos.

El servicio web compila OK; No puedo ver qué está mal aquí.

Respuesta

13

Mi sugerencia es no utilizar nombres de métodos sobrecargados. No existe tal concepto en WSDL, entonces ¿para qué molestarse?

+0

veo el error de mis maneras ahora. Mi webclient puede llamar a UploadFile o UploadFileBasic. Mi servicio web define ambos de forma única ahora (sin sobrecarga). Más significativamente, gracias a otra sugerencia en otro lugar, el código para UploadFileBasic ahora es simplemente la invocación de UploadFile que proporciona una matriz vacía como último parámetro. Gracias por toda tu ayuda, John. –

+0

Esta publicación en realidad no responde la pregunta, entonces ¿para qué molestarse? – Gnial0id

+0

@ Gnial0id: hace más de 5 años, el OP sintió que era una respuesta, y otras 12 personas también votaron. ¿Por qué molestarse en comentar al respecto? La respuesta real a "cómo tratar con métodos sobrecargados en un servicio web SOAP" es "SOAP no tiene ningún concepto de métodos sobrecargados". –

0

Por lo general, tengo un objeto de clase detrás de la interfaz del servicio web que tiene los métodos sobrecargados y luego creo métodos individuales en su archivo asmx.cs con diferentes nombres. Sé que puedes usar los atributos pero solo hace el código más ordenado en mi humilde opinión.

7

Es necesario cambiar esta parte:

[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)] 

a éste:

[WebServiceBinding(ConformsTo = WsiProfiles.None)] 
Cuestiones relacionadas