2016-08-04 16 views
0

In meinem aktuellen Projekt sende ich eine POST-Anforderung an einen WCF-Dienst. Aber ich bekomme eine leere Antwort. Ich habe versucht, den ähnlichen Beitrag auf stackoverflow zu verwenden: POST1 und [POST2] [2], aber ich konnte das Problem nicht lösen. Mein WCF-Service-Code ist wie folgt:Postanforderung an WCF-Dienst von einem REST-Client

namespace RestfulWCFService 
{ 

    [OperationContract] 
    [WebInvoke(Method="GET", ResponseFormat= WebMessageFormat.Xml, UriTemplate="xml/?firstname={firstname}&lastname={lastname}")] 
    string SayHelloXml(string firstname, string lastname); 

    [OperationContract] 
    [WebInvoke(Method = "GET", ResponseFormat = WebMessageFormat.Json, UriTemplate = "json/{name}")] 
    string SayHelloJson(string name); 



    [ServiceContract] 
    public interface IRestfulTestService 
    { 

     [OperationContract] 
     [WebInvoke(Method = "POST", ResponseFormat = WebMessageFormat.Json, BodyStyle = WebMessageBodyStyle.Wrapped, 
      UriTemplate = "/data")] 
     string SayHelloJSONPOSTRequest(string jsonRequestString); 

    } 
} 

Die Implementierung der Schnittstelle ist wie folgt:

namespace RestfulWCFService 
{ 

     string IRestfulTestService.SayHelloXml(string firstname, string lastname) 
    { 
     return "Hello " + firstname + " " + lastname; 
    } 

    string IRestfulTestService.SayHelloJson(string name) 
    { 
     return "Hello " + name; 
    } 


    public class RestfulTestService : IRestfulTestService 
    { 
     string IRestfulTestService.SayHelloJSONPOSTRequest(string jsonRequestString) 
     { 
      return "Hello " + jsonRequestString; 
     } 

    } 
} 

nun von einem REST-Client, mein Wunsch ist wie folgt:

http://localhost/RestfulWCFService/RestfulTestService.svc/data 

und die Content-Type:application/json und Nutzlast ist {"firstname":"Pankesh"}. Ich bekomme keine Antwort von WCF.

Zu Ihrer Information, ich füge den Screenshot meines Clients an.

enter image description here

+1

Sie scheinen 500. Die zu bekommen Service kann nicht aktiviert werden. Navigieren Sie zu http: //localhost/RestfulWCFService/RestfulTestService.svc und sehen Sie, warum. – smoksnes

+0

@smoksnes: Der Dienst ist bereits aktiviert, wenn ich eine GET-Anfrage mache. Ich aktualisiere Vertragsdefinitionen und seine Implementierungsdatei für Ihre Referenz. – Pankesh

+0

OK, die Statusmeldung, die Sie im Client zeigen, hängt nicht mit der Anfrage zusammen, die Sie stellen. – smoksnes

Antwort

1

In der Schnittstelle Sie verwenden:

string SayHelloJSONPOSTRequest(string jsonRequestString); 

Aber in der Implementierung der Schnittstelle Sie verwenden:

string IRestfulTestService.SayHelloJSONPOSTRequest(string jsonString) 

Ein Fehler, die unterschiedliche Namensgebung des JSON- sein könnte String-Parameter

EDITS:

Zum einen versuchen, Inhalt Länge in den rohen Header in dem Werkzeug, das Sie oben verwenden einzustellen.

Ein weiterer möglicher Fehler besteht darin, dass die Variable, die Sie in der return-Anweisung verwenden, nicht mit dem Parameter identisch ist, den Sie der Methode übergeben haben.

string IRestfulTestService.SayHelloJSONPOSTRequest(string jsonRequestString) 
{ 
    return "Hello " + jsonString; 
} 
+1

Aha, guter Fang !!! Ich habe aktualisiert. Aber immer noch das gleiche Problem. Lassen Sie mich das in der Frage aktualisieren, um Verwirrung zu vermeiden. – Pankesh

+0

Ich bin auch ein wenig verwirrt über Ihre Inhaltslänge als "0". Haben Sie versucht, "Content-Length" als Header-Parameter auf die Länge Ihrer JSON-Zeichenfolge zu setzen? – rbr94

+0

Ich habe nicht ausdrücklich 'content-length' als 0 gesetzt. Soll ich einen anderen Client benutzen, um die POST-Anfrage zu testen ??? – Pankesh

1

Es ist wahrscheinlich, weil Sie BodyStyle-WebMessageBodyStyle.Wrapped gesetzt.

Wenn Sie Wrapped sollten Sie Ihre Daten hinterlassen wie:

{"jsonRequestString":{"firstname":"Pankesh"}} 

Alternativ können Sie es zu WebMessageBodyStyle.Bare ändern, und senden Sie es als:

{"firstname":"Pankesh"} 
+0

Danke! Wenn ich den {"jsonRequestString": "Pankesh"} übergebe. Es gibt "Hallo Pankesh" gut. Aber was, wenn ich die mehreren JSON-Daten weitergeben möchte. Ich meine - ich möchte {"Vorname": "Pankesh"} {"Nachname": "Patel"} im Körper übergeben, ohne die Schnittstellendefinition zu ändern. Ist das möglich? – Pankesh

+0

Ich sehe, dass eine Antwort akzeptiert wurde, also nehme ich an, Sie haben es gelöst? – smoksnes

+0

Für einen Parameter im Körper ist es gelöst. Aber die Frage/Herausforderung bleibt ungelöst - wie kann ich mehrere JSON-Objekte im Körper übergeben ??? – Pankesh

Verwandte Themen