2017-06-23 3 views
1

Ich versuche, ein Array von Bytes zu meinem WebMethod durch JavaScript zu übergeben. Das Problem ist, dass mein WebMethod mit der Nachricht zurückgibt "Das Testformular ist nur für primitive Methoden als Parameter verfügbar."Wie erhalten Sie nicht primitive Daten in WebMethod?

Wenn ich den Datentyp in Zeichenfolge oder eine andere Art von primitiven Variablen ändern, akzeptiert die WebMethod es geht weiter.

Ich bin ein Objekt in ein Byte [], mit dem Namen msgpackEnvio mit MessagePack (Die Transformation selbst tritt gut), und dann an WebService senden.

Hier ist meine Bitte an WebService mit Jquery

$.ajax({ 
        beforeSend: function (request) { 
         request.setRequestHeader("Content-Type", "application/json"); 
        }, 
        processData: false, 
        dataType: "json", 
        url: url, 
        data: msgpackEnvio, 
        type: "POST", 
        error: function (data) { 
         $('#upload-load').hide(); 
         $('.bt-enviar-excel').removeAttr('disabled', 'disabled'); 
         var msg = document.getElementsByClassName('msg')[0]; 
         msg.style.color = 'red'; 
         msg.innerHTML = 'Erro interno servidor!'; 
        }, 
        success: //some code 

In der Tat, über die Code Angelegenheiten gar nicht, mein Problem in der webService ist, und wie es um ein Array zu machen zu erhalten oder vielleicht ein Objekt .

Und hier ist mein WebMethod der in der Lage sein soll, ein byte []

[WebMethod] 
public string TestMessagePack(byte[] name) 
{   
    //my code 

    return "Finish"; 
} 

Antwort

0

Sie base64 verwenden Codierung und Decodierung können erhalten Byte-Arrays als Strings zu senden. Alles andere als das und Sie möchten stattdessen Postanfragen und JSON-Serialisierung/Deserialisierung verwenden. Es wird keine generische one size fits all-Konvertierung zwischen komplexen C# -Objekten und JavaScript-Objekten geben, weshalb nur primitive Parameter erlaubt sind. Für nicht-prioritäre Dinge benötigen Sie also eine Übersetzungsebene. Das wird normalerweise eine Form der String-Serialisierung und Deserialisierung bedeuten.

+0

Ich habe es versucht, aber das Problem, das ich lösen möchte, ist genau dies. Wenn ich einige Objekte lese, wird mein Json so groß, dass die Verbindung zu WebService zu lange dauert und manchmal sogar ein Zeitverbindungsfehler auftritt. Ich muss wirklich die WebService-Methode ändern, um nicht-primitive zu empfangen –

+0

Wie würde das JavaScript wissen, ein nicht primitives Objekt zu erstellen, das C# verstehen könnte? Komplexe Objekte werden abhängig von ihrer Sprache und Umgebung in Bezug auf das, was sie tatsächlich unter der Haube aussehen, um diese Lücke zu füllen Serialisierung kommt ins Spiel. Komplexe Objekte müssen auf die eine oder andere Weise in eine Zeichenfolge serialisiert werden (ein primitiver Typ, mit dem beide Ebenen umgehen können), um aus einer Zeichenfolge zurück in ein komplexes Objekt zu senden und zu deserialisieren, das empfangen werden soll. JSON/XML/etc und base64 sind deine Freunde hier. –

+0

Einige einfachere Typen können automatisch serialisiert und deserialisiert werden, obwohl ich darauf nicht angewiesen bin. Wenn sie komplexer werden, müssen Sie sowieso zu json oder xml wechseln. Woher kommt diese Fehlermeldung? Es ist nicht in dem referenzierten Code und ist keine Standardfehlermeldung. –

Verwandte Themen