从REST客户端发出对WCF服务的请求

时间:2016-08-04 11:50:04

标签: c# json rest wcf

在我当前的项目中,我正在向WCF服务发送POST请求。但是,我得到了空洞的回应。我试图在stackoverflow上使用类似的帖子:POST1和[POST2] [2],但我无法解决问题。 我的WCF服务代码如下:

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);

    }   
} 

接口的实现如下:

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; 
        }

    }
}

现在,从REST客户端,我的请求如下:

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

Content-Type:application/json和有效负载为{"firstname":"Pankesh"}。我没有得到WCF的回复。

供您参考,我附上了我客户的截图。

enter image description here

2 个答案:

答案 0 :(得分:1)

在您使用的界面中:

string SayHelloJSONPOSTRequest(string jsonRequestString);

但是在您使用的界面的实现中:

string IRestfulTestService.SayHelloJSONPOSTRequest(string jsonString)

一个错误可能是json-String-parameter的不同命名。

<强> 编辑:

首先尝试在上面使用的工具中设置原始标题中的内容长度。

另一个可能的错误是你在return语句中使用的变量与你给方法的参数不同。

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

答案 1 :(得分:1)

可能是因为您将BodyStyle设置为WebMessageBodyStyle.Wrapped

当您使用Wrapped时,您应将数据发布为:

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

或者,您可以将其更改为WebMessageBodyStyle.Bare,并将其发送为:

{"firstname":"Pankesh"}