Получить сырой XML из метода POST в сервисе, реализованном с использованием API WCF WebHttp - PullRequest
2 голосов
/ 05 июля 2011

Я создаю веб-сервис с использованием подхода RESTful и использую WCF WebHttp API (.NET v4). Чтобы удовлетворить некоторые устаревшие функциональные возможности, мне нужно принять необработанное XML-сообщение через POST и обработать его. Например, один из моих методов выглядит следующим образом:

[WebInvoke(UriTemplate = "Hello", Method = "POST")]
public Message ProcessMessage(string xmlMessage)
{
    if (String.IsNullOrWhiteSpace(xmlMessage))
    {
        return WebOperationContext.Current.CreateXmlResponse(ProcessingFailedReply);
    }
    var message = XElement.Parse(xmlMessage);
    return WebOperationContext.Current.CreateXmlResponse(ProcessingSuccessfullReply);
}

Тем не менее, каждый раз, когда я пытаюсь отправить какой-нибудь xml-файл в "/ Hello", я получаю сообщение о том, что формат недопустим и ему нужна специально закодированная строка. Я предполагаю, что API использует стандартную схему для автоматической сериализации xmlMessage. Когда я посещаю справку ("/ help"), мне предоставляется пример формата для моего xmlMessage:

<string xmlns="http://schemas.microsoft.com/2003/10/Serialization/">String content</string>

Как разрешить и обработать POST-запрос как необработанный в этом сценарии? Я просмотрел API и единственный соответствующий класс ( WebOperationContext.Current.IncommingRequest ) не имеет методов для получения необработанного сообщения ...

Спасибо Z ...

Ответы [ 2 ]

3 голосов
/ 05 июля 2011

В дополнение к предложению Мориса (которое работает с содержимым XML), если вы хотите использовать необработанные байты в любом типе содержимого, вы можете использовать параметр Stream (дополнительную информацию см. На http://blogs.msdn.com/b/carlosfigueira/archive/2008/04/17/wcf-raw-programming-model-receiving-arbitrary-data.aspx)), и он отобразитвсе тело запроса к этому параметру.

3 голосов
/ 05 июля 2011

Создайте входной параметр типа XElement, и вы можете запросить XML любым удобным для вас способом.

...