hatte ich einen Webmethod arbeiten, das ein Byte-Array an den Aufrufer zurückgegeben:Byte-Array als out-Parameter nicht erkannt
public byte[] DownloadPDF(string URI)
Ich hatte dieses einen anderen Ausgang zurück zu ändern (eine Zeichenkette). 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)
Meine Web-Service stellt richtig, aber ich vermute, etwas falsch ist mit dem zweiten Parameter (dh die Byte-Array), weil, wenn I "Add Web Reference" und meine Proxy-Klasse bauen, hat das Verfahren nur zwei Parameter, 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 Ursache des Problems zu sein.
Dies natürlich vermasselt mich im Web-Client-Anwendung, wo ich eine Fehlermeldung bei der Kompilierung erhalten:
No overload for method 'DownloadFile' takes '3' arguments
Hier ist der Code in dem Web-Client ist, wo ich drei Argumente zu übergeben:
Ich denke daran, es zurück zu ändern, um ein Byte-Array zurückzugeben und nur einen einzigen "out" -Parameter hinzuzufügen, aber ich dachte, ich sollte Sie Experten fragen und im Allgemeinen, was ist die beste Praxis für die Handhabung mehrerer Ausgabeanforderungen .
OK..noch nicht sicher, warum, aber Ihre vorgeschlagene Signatur (Rückgabe eines bool) führte zu der richtigen Signatur in der generierten Proxy-Klasse (d. H. 1 Eingabe-Parm, eine Byte-Array-Ausgabe und eine String-Ausgabe). Ist das hauptsächlich Stil oder gibt es eine Best Practice für mehrere Ausgaben? Ich könnte ein Bytearray zurückgegeben haben –
Ich denke, wie Jon sagte, der Proxy-Generator optimiert es für kürzere SOAP-Nachrichten, so setzen Sie den ersten Parameter als Rückgabetyp instaead der void-Methode –
Dies scheint eher ein Workaround als eine Lösung - das Hinzufügen eines Dummy-Rückgabetyps ist nicht besonders sauber. (Es war ein gutes Experiment zu führen, versteh mich nicht falsch - ich würde es einfach nicht im wirklichen Leben benutzen wollen.) –