Byte array som en ut parameter ikke gjenkjent

stemmer
0

Jeg hadde en WebMethod arbeids som returnerte byte array til den som ringer:

public byte[] DownloadPDF(string URI)

Jeg måtte endre dette til å returnere en annen utgang (en streng). Så bestemte jeg meg for å endre metoden helt av nå tilbake ugyldig og har 3 parametre som dette:

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

Min webtjeneste kompilerer riktig, men jeg mistenker at noe er galt med den andre parameteren (dvs. byte array) fordi når jeg Add Web Reference og bygge min proxy klasse, har metoden bare to parametere, ikke 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]));
    }

Jeg ser ikke hvorfor min andre parameter, byte array, blir ignorert, men det ser ut til å være kilden til problemet.

Dette selvfølgelig roter meg opp i webklienten app der jeg får en feilmelding ved kompilering:

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

Her er koden i webklienten der jeg trenger å passere 3 argumenter:

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

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

Jeg tenker på å endre det tilbake til å returnere en byte array og legger bare et enkelt ut parameter, men jeg tenkte jeg skulle spørre deg ekspertene om dette og generelt, hva er den beste praksis for håndtering av multiple output krav.

Publisert på 16/03/2009 klokken 18:50
kilden bruker
På andre språk...                            


2 svar

stemmer
1

Den byte array blir ikke ignoreres - det blir satt som returtypen i stedet. Jeg vet ikke hvorfor det gjør det, men det er mer fornuftig etter mitt syn. Jeg vil ikke bruke ut parametre i et tomrom metode. Jeg tror proxy generatoren bare tar en hvilken som helst metode med ut parametere og svinger den første i en returtype.

Svarte 16/03/2009 kl. 18:56
kilden bruker

stemmer
1

Hvorfor ikke din prøve å sette denne signaturen:

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

For å se hva som skjer? Jeg er enig med Jon Skeet, men du kan fortsatt kan returnere en bool med resultatet av operasjonen

Svarte 16/03/2009 kl. 18:59
kilden bruker

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more