2010-06-16 2 views
2

У меня есть служба REST WCF, работающая в .net 4, и я протестировал веб-сервис, который он работает, и принял HttpRequest, который я ему делаю. Но у меня возникла проблема с попыткой получить доступ к телу HttpRequest в веб-службе. Я попытался отправить случайные размеры данных, добавленных в HttpRequest, используя как Fiddler, так и мое приложение WinForm, и я не могу найти никаких объектов во время выполнения, где я могу найти тело моего запроса. Мой первоначальный инстинкт заключался в том, чтобы посмотреть в HttpContext.Current.Request.InputStream, но длина этого свойства равна 0, поэтому я попытался посмотреть в IncomingWebRequestContext, что у объекта нет даже метода или свойств, чтобы получить тело HttpRequest.Чтение тела HttpRequest в REST WCF

Итак, мой вопрос в том, есть ли способ получить доступ к телу запроса HttpRequest в WCF?

PS: Данные внутри тела запроса - это строки JSON, и для ответа они возвращают данные внутри тела ответа как строку JSON.

ответ

9

Намного проще, этот ответ на WCF + REST: Where is the request data? работает отлично.

Кроме того, если ваш объект запроса десериализуем, вы можете просто пройти класс. Если исключить некоторые опечатки, это должно работать:

public class Banana 
{ 
    public string Colour; 
    public int Size; 
} 

...

[WebInvoke(
    Method = "POST", 
    UriTemplate = "bananas", 
    ResponseFormat=WebMessageFormat.Json, 
    RequestFormat=WebMessageFormat.Json)] 
string CreateBanana(Banana banana); 

...

public string CreateBanana(Banana banana) 
{ 
    return "It's a " + banana.Colour + " banana!"; 
} 

Выполнение POST с данными {"Colour": "blue", "Size": 5} к этому ресурсу должен возвращать "It's a blue banana!".

4

Попробуйте с ((System.ServiceModel.Channels.BufferedMessageData)(((System.ServiceModel.Channels.BufferedMessage)((OperationContext.Current.RequestContext).RequestMessage)).MessageData)).Buffer

он имеет тип System.ArraySegment<byte>

или читать WCF + REST: Where is the request data?

+0

Это для .Net Framework 4.0? Поскольку я не мог найти BufferedMessageData и BufferedMessage в пространстве имен System.ServiceModel.Channels – madness800

+0

, я использовал его в отладчике (окне просмотра) внутри моего проекта .NET Framework 4.0 WCF. – Oleg

+0

Я даже пошел и добавил ссылку System.ServiceModel в мой проект, и я все еще не мог найти объект BufferedMessageData внутри System.ServiceModel.Channels. Я также попытался выполнить поиск в браузере объектов, и никаких результатов не получилось. – madness800

Смежные вопросы