包含WebInvokeBodyStyle的WCF POST服务未按预期工作

时间:2012-06-01 16:15:30

标签: wcf rest post httpwebrequest http-post

我创建了一个带有下面提到的签名的WCF POST服务。这在IIS中成功托管,我可以在服务的帮助页面中看到它:

[OperationContract]
    [WebInvoke(BodyStyle = WebMessageBodyStyle.Wrapped,
        RequestFormat = WebMessageFormat.Xml,
        ResponseFormat = WebMessageFormat.Xml,
        Method = "POST",
        UriTemplate = "TestMethod/{lang}/{str}/{selectedstring}/")]
    string TestMethod(string lang, string str, string selectedstring, string mylist, int testval);

在服务的帮助页面上,该方法正确显示为

TestMethod/{lang}/{str}/{selectedstring}/ || POST || Service at http://localhost:86/MyRestService.svc/TestMethod/{LANG}/{STR}/{SELECTEDSTRING}/ 

我正在尝试使用fiddler使用下面提到的选项调用此服务(基于一些查看博客):

方法:发布

网址 - 'http://服务器名称:86 / MyRestService.svc / TestMethod / en-us / str1 / qad11 /'

所需物品。头: 用户代理:Fiddler 主持人:servername:86 Content-Type:application / xml

请求正文:

<TestMethod xmlns="http://tempuri.org/"><mylist>string val</mylist><testval>3</testval></TestMethod>

然而它总是给我一个HTTP结果代码411(需要长度),当我尝试从我的.net测试存根调用服务时出现同样的错误。

1 个答案:

答案 0 :(得分:0)

Fiddler应该为你计算名为Content-Length的HTTP标头(至少它是针对v2.3.9.3)。检查请求的原始标签中的内容,例如:{{ 1}}其中nnn是请求体的字符串长度。如果没有,那么你需要自己添加它。此外,您可以尝试使用the POSTMan chrome plug之类的浏览器插件来创建请求。