Fiddler在WCF服务PUT / POST请求时给出411错误

时间:2011-11-10 21:18:40

标签: c# wcf fiddler

当我向以下人员发送请求时,我收到411错误:

接口:

[OperationContract]
[WebInvoke(Method = "POST",
    ResponseFormat = WebMessageFormat.Json,
    BodyStyle = WebMessageBodyStyle.Wrapped,
    UriTemplate = "IncSMS")]
string IncSMS(int ID);

方法:

public void IncSMS(int ID)
{
    var business =
        (from p in _db.Businesses
            where p.BusinessID == ID
            select p).FirstOrDefault();
    business.SMSHits += 1;
    _db.SaveChanges();
}

谁能明白为什么我会收到错误?所有的get方法都有效,我只能让POST或PUT工作!

任何想法???

干杯,

麦克

3 个答案:

答案 0 :(得分:8)

代码没有任何问题,我试图通过浏览器请求PUT而无法完成。您可以通过这种方式测试GET,但不能测试PUT。 “因为默认情况下它会执行GET”!

在提琴手中,您只需在“请求构建器”的“请求标题”部分中键入Content-Length: 0,它就会神奇地起作用!如本教程底部附近所示:http://blog.donnfelker.com/2008/12/04/how-to-rest-services-in-wcf-3-5-part-2-the-post/

谢谢你们,

麦克

答案 1 :(得分:4)

根据HTTP Standards,411表示: 10.4.12 411所需长度

  

服务器拒绝接受没有定义内容的请求 -   长度。如果请求添加有效,客户端可以重复该请求   Content-Length头字段,包含消息体的长度   在请求消息中。

所以看起来在通过POST / PUT添加数据之前,您需要指定数据的长度。

答案 2 :(得分:1)

WCF REST服务中的POST和PUT操作要求包含Content-Length标头。 411响应代码是WCF,告诉您包含该标头。