WCF - 让客户选择返回格式

Mor*_*rat 7 xml wcf json wcf-endpoint

我正在尝试自己学习一些WCF.我有C#/ ASP.net知识,但我是WCF的新手.我在学习的过程中使用Visual Studio 2010来开发一些应用程序.

我开发了一个小型Web服务,它充当TODO /任务管理器的后端,用户可以在其中创建/删除/编辑新事件; 这一切都非常简单和基本.

我的问题如下:

  1. 有没有办法让客户选择他想要的返回格式(例如xml/json/rdf)而无需编写新的操作合同?
  2. 如何在客户端上看到Web服务发送给我的确切消息(以便我可以检查它是否是例如json表示或xml消息).

Dan*_*rth 9

使用WCF创建REST服务时,支持内容协商.

你只需要设置automaticFormatSelectionEnabledtrue端点上.

另请参阅:WCF Web HTTP格式


lad*_*dge 3

Web 浏览器从网站选择响应格式的方式是通过内容协商,特别是通过使用AcceptContent-Type HTTP 标头。

例如,如果您的客户端需要 JSON 格式的响应,它将向服务器发送如下所示的 HTTP 请求:

GET /resource HTTP/1.0
User-Agent: YourClient 1.0
Accept: application/json
Run Code Online (Sandbox Code Playgroud)

反过来,服务器将使用如下 HTTP 数据包进行响应:

HTTP/1.0 200 OK
Content-Type: application/json
Content-Length: 20

{ "type" : "json" }
Run Code Online (Sandbox Code Playgroud)

不幸的是,WCF 不具备处理开箱即用的内容协商的能力,但有一个非常好的第三方库,无需太多工作即可实现它,称为WcfRestContrib。他们的文档描述了使其工作所需的(非常简单的)步骤。总而言之,你必须

  1. 根据您希望支持的内容类型装饰您的服务类别,
  2. 装饰您希望具有谈判意识的方法,以及
  3. 从该方法返回一个可序列化的业务对象。

至于你的第二个问题,Fiddler是测试客户端和服务器的不错选择。