在我当前的项目中,我正在向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的回复。
供您参考,我附上了我客户的截图。
答案 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"}