Frage

Ich hatte einen Webmethod Arbeits, die ein Byte-Array an den Aufrufer zurückgegeben:

public byte[] DownloadPDF(string URI)

Ich musste diese einen anderen Ausgang zurückzukehren ändern (ein String). Also entschied ich mich nun das Verfahren vollständig zu ändern, indem Leere zurückkehrt und mit 3 Parameter wie folgt aus:

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

Mein Web-Service stellt richtig, aber ich vermute, etwas mit dem zweiten Parameter (dh der Byte-Array) falsch ist, weil, wenn ich „Webverweis hinzufügen“ und meine Proxy-Klasse bauen, das Verfahren nur zwei Parameter hat, nicht 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]));
    }

Ich sehe nicht, warum mein zweiter Parameter, der Byte-Array, ignoriert wird, aber es scheint, die Quelle des Problems zu sein.

Das ist natürlich verwirrt mich in der Web-Client-Anwendung, wo ich eine Fehlermeldung bei der Kompilierung erhalten:

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

ist der Code im Web-Client, wo ich drei Argumente zu übergeben:

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

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

Ich denke es ändern zurück ein Byte-Array zurück und nur einen einzigen „out“ Parameter hinzufügen, aber ich dachte, ich sollte Ihnen Experten über dieses und im allgemeinen fragen, was ist die beste Praxis mehrere Ausgabeanforderungen für die Handhabung.

War es hilfreich?

Lösung

Warum nicht Ihre try setzen diese Signatur:

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

Um zu sehen, was passiert? Ich stimme mit Jon Skeet, aber man kann trotzdem eine Bool mit dem Ergebnis der Operation Rückkehr

Andere Tipps

Der Byte-Array wird nicht ignoriert werden - es stattdessen setzen als Rückgabetyp hat wurde. Ich weiß nicht, warum es das tut, aber es macht mehr Sinn, meiner Meinung nach. Ich würde keine Parameter in einem Hohlraum Methode aus. Ich vermute, dass der Proxy-Generator nimmt nur jede Methode mit out-Parametern und schaltet die ersten in eine Rückgabetyp.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top