【问题标题】:Custom WCF MessageFormatter自定义 WCF 消息格式化程序
【发布时间】:2012-03-15 15:48:31
【问题描述】:

我有一个 .NET 4 WCF 服务(MEX 和 HttpGET)。

对于 HttpGET 端点,我想覆盖默认的 MessageFormatter.DeserializeRequest 以将 UriTemplate 映射到强类型对象。

理想情况下,自定义属性将用于装饰应该使用此格式化程序的方法,但我不确定是否可以在这方面切换格式化程序。

这可行吗,有人可以指导我完成 app.config 中所需的配置吗?

【问题讨论】:

    标签: wcf


    【解决方案1】:

    如果您想要对 WCF REST 进行细粒度格式控制,我建议使用以下两个选项之一:

    1. 重写 WebHttpBehavior 以指定您自己的消息格式化程序。这为您提供了很多控制权,但需要大量的跑腿工作。 http://msdn.microsoft.com/en-us/library/system.servicemodel.description.webhttpbehavior.getrequestclientformatter.aspx

    2. 使用新的 WCF Web API,它为 REST 服务提供了更多的可配置性。 http://wcf.codeplex.com/wikipage?title=WCF%20HTTP.

    但是,如果您只想将某些查询字符串参数映射到强类型对象,您可以实现自己的 QueryStringConverter 类:

    http://msdn.microsoft.com/en-us/library/system.servicemodel.dispatcher.querystringconverter.aspx

    并在您的自定义 WebHttpBehavior 中使用它: http://msdn.microsoft.com/en-us/library/system.servicemodel.description.webhttpbehavior.getrequestclientformatter.aspx)。

    【讨论】:

    • 感谢您的链接。 1. 如何连接配置以指定 WCF 使用我的自定义 WebHttpBehavior? 2. 该服务也需要与传统的 mex 端点一起使用。我的理解是 WebAPI 仅适用于 Http。
    • WebHttp/REST 通常不适合与 mex 端点/WSDL 一起使用。没有基于 WebHttp 的 WCF 客户端。您打算如何使用这样的 mex 端点?
    • 另外,有没有办法确定调用的服务方法来确定应用哪个格式化程序?
    • 它将是一个具有 mex 端点和 webhttp 端点的 Windows 服务。我让它与开箱即用的 GET/POST 请求一起工作。但是使用 UriTemplate 需要字符串方法参数。我们想对方法签名进行强类型化,所以我认为这可以通过自定义 MessageFormatter 来完成。但是,我不确定如何进行这样的接线。
    • mex 端点纯粹用于元数据。它与 REST 端点不交叉兼容。如果你想托管一个 mex 端点,你可能应该托管一个 mex 对应的 SOAP 端点......
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-11-18
    • 2012-03-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-01
    • 1970-01-01
    相关资源
    最近更新 更多