Fiddler выдает ошибку 411 по запросу в службу WCF PUT / POST - PullRequest
3 голосов
/ 11 ноября 2011

Я получаю сообщение об ошибке 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 работать!

Есть идеи ???

Приветствия

Mike.

Ответы [ 3 ]

8 голосов
/ 22 ноября 2011

В коде нет ничего плохого, я пытался запросить PUT через браузер, но это невозможно сделать.Вы можете проверить GET таким образом, но не PUT.«Потому что по умолчанию он выполняет GET»!

В fiddler вы просто набираете Content-Length: 0 в разделе «Заголовки запроса» «Построителя запросов», и он будет работать волшебным образом!Как видно из нижней части этого урока: http://blog.donnfelker.com/2008/12/04/how-to-rest-services-in-wcf-3-5-part-2-the-post/

Спасибо, ребята,

Майк.

4 голосов
/ 11 ноября 2011

Согласно стандартам HTTP , 411 означает: 10.4.12 411 Необходимая длина

Сервер отказывается принять запрос без определенного Контента- Длина. Клиент МОЖЕТ повторить запрос, если он добавляет действительный Поле заголовка Content-Length, содержащее длину тела сообщения в сообщении запроса.

Похоже, прежде чем вы сможете добавить данные через POST / PUT, вам нужно будет указать длину данных.

1 голос
/ 11 ноября 2011

Операции POST и PUT в сервисах WCF REST требуют включения заголовка Content-Length.Код ответа 411 - WCF, говорящий вам включить этот заголовок.

...