从使用WCF WebHttp API实现的服务中的POST方法获取原始xml

时间:2011-07-05 15:07:02

标签: c# wcf webhttp

我正在使用RESTful方法构建一个Web服务,并且正在使用WCF WebHttp API(.NET v4)。 为了满足一些遗留功能,我需要通过POST接受原始XML消息并对其进行处理。例如,我的一个方法如下:

[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>

如何在此方案中以原始方式允许和处理POSTed请求? 我查看了API,唯一相关的类( WebOperationContext.Current.IncommingRequest )没有任何方法来检索原始消息......

由于 Z ...

2 个答案:

答案 0 :(得分:3)

创建一个XElement类型的输入参数,您可以以任何方式查询XML。

答案 1 :(得分:3)

除了Maurice(适用于XML内容)的建议之外,如果您想要任何内容​​类型中的原始字节,您可以使用Stream参数(http://blogs.msdn.com/b/carlosfigueira/archive/2008/04/17/wcf-raw-programming-model-receiving-arbitrary-data.aspx处的更多信息),它将映射整个请求正文到该参数。