共计 1305 个字符,预计需要花费 4 分钟才能阅读完成。
可以说 WebHttpBinding 和 WebHttpBehavior 是整个 Web HTTP 编程模型最为核心的两个类型,前者主要解决消息编码问题,而余下的工作基本上落在了终结点行为 WebHttpBehavior 上。WebHttpBehavior 属性 HelpEnabled 和 AutomaticFormatSelectionEnabled 是“帮助页面”与“自动消息格式选择”这两个特性的总开关。
public class WebHttpBehavior : IEndpointBehavior, ...
{
// 其他成员
public virtual bool HelpEnabled {get; set;}
public virtual bool AutomaticFormatSelectionEnabled {get; set;}
}
WCF 4.0 为 REST 服务提供了帮助页面功能,我们可以通过浏览器访问服务帮助页面的地址得到所有操作的基本信息。但是这个功能在默认的情况下是关闭的,我们需要通过应用在终结点上的 WebHttpBehavior 行为的 HelpEnabled 属性开启该功能。
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
15:
16:
17:
18:
二、自动消息格式选择
REST 服务具有两种基本的消息格式(Xml 和 Json)。在定义服务契约的时候,我们可以通过应用在操作方法上的 WebGetAttribute 和 WebInvokeAttribute 指定回复消息的格式。如果没有通过这种方式对消息格式进行显式设置,我们还可以通过终结点行为 WebHttpBehavior 为回复消息设置一个默认的消息格式。除了这种显示设置方式之外,WCF 还提供一种自动消息格式选择机制。
所谓消息格式的自动选择,就是服务根据请求消息来选择一种适合的格式进行消息的序列化。在默认的情况下,这种自动选择机制是关闭的,我们需要通过 WebHttpBehavior 的 AutomaticFormatSelectionEnabled 属性开启该机制。具体的消息格式选择机制策略(顺序)如下:
- 如果作为请求的 HTTP 消息具有 Accept 报头,则根据该报头决定回复消息的格式;
- 如果作为请求的 HTTP 消息具有 Content-Type 报头,则根据该报头决定回复消息的格式;
- 如果在定义服务契约时通过 WebGetAttribute 或者 WebInvokeAttribute 对回复消息的格式进行了显式设置,则采用该消息格式;
- 如果通过终结点行为 WebHttpBehavior 设置了对回复消息的格式进行了显式设置,则采用该消息格式;
- 采用默认消息格式Xml(WebMessageFormat 枚举的默认值)。
我们同样通过之前创建的 EmployeesService 的实例来演示消息格式的自动选择机制。如下面的配置片断所示,我们将 WebHttpBehavior 行为应用到了寄宿服务的唯一终结点上,并且将 AutomaticFormatSelectionEnabled 属性设置为 True。
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
16:
17:
18:
19:
原文地址: WCF REST 消息格式 (JSON/XML) 选择