【问题标题】:WCF RequestFormat for WebGet and WebInvokeWebGet 和 WebInvoke 的 WCF RequestFormat
【发布时间】:2026-01-19 03:10:01
【问题描述】:

我使用 WebGet 和 WebInvoke 公开了 WCF 服务,这些服务需要将数据包装在 xml 中。我希望能够返回原始数据而不将其包装在 xml 中,并且还允许客户端能够调用我的服务而无需将请求包装在 xml 中。

我正在使用协议缓冲区序列化数据并将结果转换为 base64String,因此 WebGet 响应如下所示:

<BinVehicleResp xmlns="http://schemas.datacontract.org/2004/07/NTouchServices.Binary_Types" xmlns:i="http://www.w3.org/2001/XMLSchema-instance">
  <BinVehicle>CgsxMjMtNDU2LTc4ORIFNDQwMDAaBUJsYWNrIgVKZXR0YVIJCJrYqoXAShAE (BINARY DATA)</BinVehicle>
</BinVehicleResp>

并且 WebInvoke 输入必须至少看起来像:

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

我真的只想要 BINARY DATA 部分,尤其是对于 WebInvoke。我可以接受 WebGet 的现状。有没有人对我如何允许客户端能够使用 WebInvoke 进行 HTTP POST 而不需要将请求包装在 xml 中有任何建议?谢谢。

【问题讨论】:

  • 如果您发布代码或 XML,在文本编辑器中突出显示这些行,然后单击编辑器工具栏上的“代码”按钮 (101 010) 以很好地格式化和语法高亮!

标签: xml wcf webget webinvoke


【解决方案1】:

我不确定我是否完全理解了这个问题。您声明您需要将要发布的数据包装在 XML 中,但随后询问如何在不将其包装在 XML 中的情况下发布数据。我最初的回答是使用BodyStyle 参数声明您的WebInvoke 服务方法:

[OperationContract]
[WebInvoke(Uri="SomeMethod?x={foo}&y={bar}", BodyStyle=WebMessageBodyStyle.WrappedRequest)]
public string SomeMethod(string foo, string bar) {
...
}

这是BodyStyle 的 MSDN 文档——您可以将其设置为 Bare(响应和请求均未包装)、Wrapped 或 WrappedRequest/Response。

我希望这会有所帮助。

【讨论】:

  • 这看起来很有希望,我会试试看。对不起,这个问题令人困惑。我的真正意思是为了让它以目前的方式成功,WCF 需要包装请求和响应 - 但是,我个人希望不包装响应。
  • 没问题。让我知道这是否有效 - 我很好奇。谢谢!