调用 wcf 休息服务并以 xml 或 json 格式返回数据
Posted
技术标签:
【中文标题】调用 wcf 休息服务并以 xml 或 json 格式返回数据【英文标题】:call a wcf rest service and return data as xml or json 【发布时间】:2013-10-23 17:07:48 【问题描述】:我正在尝试从 WCF REST 服务获取数据以返回为 xml 或 json。
在使用 WebInvoke 属性设置 RequestFormat 和 ResponseFormat 并将两者设置为适当的格式时,我可以将数据返回为 xml 或 json:
但我不想硬编码格式,所以在网上进一步研究它,我发现了一些东西,但无论我做什么,它似乎总是以 xml 格式返回我的数据。
这是我所做的:
从 WebInvoke 属性中删除了 RequestFormat 和 ResponseFormat。
[OperationContract]
[WebInvoke(
Method = "GET",
RequestFormat = WebMessageFormat.Json,
ResponseFormat = WebMessageFormat.Json,
BodyStyle = WebMessageBodyStyle.Wrapped,
UriTemplate = "Search/searchName/fieldValues")]
Result Search(string searchName, string fieldValues);
我在 web.config 中添加了以下部分:
<system.serviceModel>
<standardEndpoints>
<webHttpEndpoint>
<standardEndpoint name="" helpEnabled="true" automaticFormatSelectionEnabled="true"/>
</webHttpEndpoint>
</standardEndpoints>
</system.serviceModel>
我不知道是否需要上述内容,因为我可以在我的 web.config 中没有此格式的情况下以这两种格式进行格式化,但我猜,它确实显示为 automaticaFormat
调用WebClient
时,我将Content-Type
和Accept
标头都设置为application/xml
或`application/json。
但即使在进行了这些更改并将我的标头设置为application/json
之后,它仍然以 XML 格式返回数据。
我在 Fiddler 中尝试过,但还是一样。收到请求,返回响应但在 xml 中。
我也尝试将以下代码放入调用 WCF 方法中,但仍然不行:
WebOperationContext.Current.OutgoingResponse.ContentType = "application/json";
最后,我找到了这个article,并尽我所能按照步骤操作,但又一次不行!只需查找“消息格式选择部分”即可。
我显然错过了什么,但是什么???有没有人对如何实现这一点有任何想法?
【问题讨论】:
ASP.NET Web API
服务内置了此功能。如果可以,请使用它 - 除非您需要非常特定于 WCF 的东西。
【参考方案1】:
您要求的是我今天实际实现的目标。我需要创建一个提供 JSON 或 XML 作为回报的 RESTful 服务。它有点特定于域,但是如果您在字里行间阅读以下博客,则会显示如何通过 MemoryStream 返回类型来实现这一点:
http://www.j4jayant.com/articles/fhir/22-fhir-feel-2
在GetResourceFeed函数中,可以看到请求中的Accept值是如何在JSON和XML(原子)之间切换的。请随时尝试。
【讨论】:
我已经尝试过了。请参阅第 4 点。我再次尝试过,确保我的代码基于您提到的文章,但没有用。它仍然无法以 json 格式返回数据,但如果我使用 WebInvoke,xml/json 都可以正常工作。还有什么建议吗? 您是否将该测试与示例中的 MemoryStream 相结合?您是否将 Result 返回类型替换为 MemoryStream? 我明白你的意思了!我不认为这是重要的部分,但也许这将是实际的解决方案。我自己一直在考虑这个问题,即在服务器端手动转换为相关格式,而不是因为现有问题而依赖 MS 自动完成,也因为 xml 格式问题!我暂时保留这个问题,稍后会更新你,因为我在这方面花了太多时间,而且我在这里面临完成一个项目的压力。但肯定会恢复。以上是关于调用 wcf 休息服务并以 xml 或 json 格式返回数据的主要内容,如果未能解决你的问题,请参考以下文章