2017-12-08 3 views
0

Ich versuche, einen POST eines JSON-Inhalts aus einer Angular 4-Einzelseite-Anwendung (lokal über http://localhost:4200/ ausgeführt) zu einem REST WCF Webservice-Endpunkt (wird lokal ausgeführt, und Der Endpunkt ist der folgende: http://localhost:3026/ToshlSrvc.svc/Add).Angular 4 POST zu WCF REST-Dienst gibt NULL-Antwort

Ich verwende Standard-Http.post() -Methode + RxJs-Erweiterungen, um die POST-Anfrage zu stellen. Der Webservice empfängt tatsächlich den POST und den relativen Inhalt, und er tut richtig, wofür er entworfen wurde (fügt das deserialisierte Objekt einem Entity Framework-Kontext hinzu, persistiert bei DB und gibt die neue ID zurück), so dass weder auf der Clientseite noch auf der Serverseite Fehler auftreten.

Leider sind die "Daten" -Args der subscribe() - Methode, die zum Abhören von http.post() verwendet wird, immer NULL! Ich kann die neue ID nicht in der POST-Antwort enthalten! Aber wenn ich in Netzwerkaktivitäten von Chrome überprüfen oder wenn ich einen Beitrag mit PostMan Problem, das ich sehe, dass der Antworttext ist folgende:

<int xmlns="http://schemas.microsoft.com/2003/10/Serialization/">1250</int> 

(1250 in diesem Fall ist die korrekte neue ID)

I kann nicht herausfinden, was hier falsch ist. Haben Sie Vorschläge?

Jede Hilfe wird geschätzt.


DER FALL

Hier ist das Typoskript-Code, wie ich erreichen die webService:

public Add(resource: Entry): void{ 
    const WEBSERVICE_ADDRESS: string = "http://localhost:3026/ToshlSrvc.svc"; 
    const headers = new HttpHeaders().set('Content-Type', 'application/json; charset=utf-8'); 
    return this.http.post(this.WEBSERVICE_ADDRESS + '/Add', JSON.stringify(resource), { headers: headers}) 
        .catch(this.handleError); 
        .subscribe(data => { 
          console.log(data); //I always get null! 
        }); 
    } 

Hier ist die Erklärung des Endpunkts des Webservice:

[WebInvoke(Method = "POST", RequestFormat = WebMessageFormat.Json, UriTemplate = "/Add")] 
int Add(EntryDTO entry); 

Der Körper meines Webservice-Endpunkt:

Die Optionen Preflight und POST-Request-Check: https://www.dropbox.com/s/900q3oor6dex0hl/issueOPTIONS.png?dl=0 https://www.dropbox.com/s/no8o78oqsolxk21/issuePOST.png?dl=0


Um die Kommunikation zwischen diesen verschiedenen Bereichen zu ermöglichen, habe ich CORS aktiviert wie hier https://enable-cors.org/server_wcf.html ausgesetzt + i benötigt eine leere GetOptions hinzufügen() Endpunkt in meinem Webservice wie hier dargestellt: Ajax POST to WCF Rest CORS-compliant WebService throws error 405.

Ich musste dies tun, weil die Enable-Cors.org Strategie überhaupt nicht ohne die oben genannte GetOptions() Methode funktioniert. Ich denke, dass dieser Punkt oder eine falsche CORS-Einstellung in diesem Problem übereinstimmen kann.

Antwort

1

Ihr Dienst gibt XML zurück. Versuchen Sie, den Antworttyp auf JSON festzulegen.

+0

Ich sollte sicher schlafen gehen .... es war genug add "ResponseFormat = WebMessageFormat.Json" zum "Add" Webserver Endpunkt. Vielen Dank für das Öffnen meiner Augen! – GiveEmTheBoot

+0

Ich bin froh, dass es geholfen hat :) –