Question

Je disposais d'une méthode Web qui renvoyait un tableau d'octets à l'appelant:

public byte[] DownloadPDF(string URI)

J'ai dû changer cela pour retourner une autre sortie (une chaîne). J'ai donc décidé de changer complètement la méthode en renvoyant maintenant void et en ayant 3 paramètres comme celui-ci:

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

Mon service Web est correctement compilé, mais je soupçonne que le deuxième paramètre (le tableau d'octets) est erroné, car je "ajoute une référence Web". et construire ma classe de proxy, la méthode a seulement 2 paramètres, pas 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]));
    }

Je ne vois pas pourquoi mon deuxième paramètre, le tableau d'octets, est ignoré, mais il semble être la source du problème.

Cela me dérange bien sûr dans l'application client Web où je reçois un message d'erreur lors de la compilation:

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

Voici le code du client Web sur lequel je dois passer 3 arguments:

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

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

Je songe à le reconvertir pour renvoyer un tableau d'octets et ajouter un seul "out". paramètre, mais j’ai pensé que je devrais demander à des experts à ce sujet et, en général, quelle est la meilleure pratique pour traiter plusieurs exigences de sortie.

Était-ce utile?

La solution

Pourquoi n'essayez-vous pas de mettre cette signature:

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

Pour voir ce qui se passe? Je suis d'accord avec Jon Skeet, mais vous pouvez toujours retourner un résultat boolé avec le résultat de l'opération

Autres conseils

Le tableau d'octets n'est pas ignoré - il est mis comme type de retour. Je ne sais pas pourquoi, mais à mon avis, cela a plus de sens. Je n'utiliserais pas de paramètres dans une méthode vide. Je suppose que le générateur de proxy prend simplement n'importe quelle méthode sans paramètres et transforme la première en un type de retour.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top