Pregunta

Tenía un método web funcionando que devolvía una matriz de bytes a la persona que llamaba:

public byte[] DownloadPDF(string URI)

Tuve que cambiar esto para devolver otra salida (una cadena). Entonces, decidí cambiar el método por completo ahora devolviendo void y teniendo 3 parámetros como este:

public void DownloadFile(string URI, out byte[] docContents, out string returnFiletype)

Mi servicio web se compila correctamente, pero sospecho que algo está mal con el segundo parámetro (es decir, la matriz de bytes) porque cuando " Agregar referencia web " y construyo mi clase proxy, el método tiene solo 2 parámetros, no 3):

[System.Web.Services.Protocols.SoapDocumentMethodAttribute("http://tempuri.org/DownloadFile", RequestNamespace="http://tempuri.org/", ResponseNamespace="http://tempuri.org/", Use=System.Web.Services.Description.SoapBindingUse.Literal, ParameterStyle=System.Web.Services.Protocols.SoapParameterStyle.Wrapped)]
    [return: System.Xml.Serialization.XmlElementAttribute("docContents", DataType="base64Binary")]
    public byte[] DownloadFile(string URI, out string returnFiletype) {
        object[] results = this.Invoke("DownloadFile", new object[] {
                    URI});
        returnFiletype = ((string)(results[1]));
        return ((byte[])(results[0]));
    }

No veo por qué mi segundo parámetro, la matriz de bytes, se ignora, pero parece ser la fuente del problema.

Esto, por supuesto, me confunde en la aplicación cliente web donde recibo un mensaje de error en el momento de la compilación:

No overload for method 'DownloadFile' takes '3' arguments

Aquí está el código en el cliente web donde necesito pasar 3 argumentos:

myBrokerASMXProxy.ASMXProxy.FileService client = new myASMXProxy.ASMXProxy.FileService();

        byte[] fileDataBytes;
        string fileType;
        client.DownloadFile(URI, fileDataBytes, fileType);

Estoy pensando en cambiarlo de nuevo para devolver una matriz de bytes y agregar solo un '' fuera '' parámetro, pero pensé que debería preguntarle a los expertos sobre esto y, en general, cuál es la mejor práctica para manejar múltiples requisitos de salida.

¿Fue útil?

Solución

¿Por qué no intentas poner esta firma?

public bool DownloadFile(string URI, out byte[] docContents, out string returnFiletype)

¿Para ver qué pasa? Estoy de acuerdo con Jon Skeet, pero aún puedes devolver un bool con el resultado de la operación

Otros consejos

La matriz de bytes no se ignora, sino que se coloca como el tipo de retorno. No sé por qué está haciendo eso, pero tiene más sentido desde mi punto de vista. No usaría parámetros en un método nulo. Sospecho que el generador proxy simplemente toma cualquier método sin parámetros y convierte el primero en un tipo de retorno.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top