InfoQ Geekathon 大模型技术应用创新大赛 了解详情
写点什么

使用 WCF 消费 REST 服务

  • 2008-05-04
  • 本文字数:1139 字

    阅读完需:约 4 分钟

.NET Framework 3.5 引入了 REST 风格的 Windows Communication Foundation(简称 WCF)服务。除了开发和托管 RESTful 服务,还提供了多种选项来消费这些服务。

WCF 通过“web”绑定和允许发布 RESTful 服务的 Web 编程模型提供对REST 支持。RESTful 服务返回普通的XML,JSON 编码,或者聚合种子(syndication feed)。网络上有很多关于如何编写这类服务的资源,可是对在.NET Framework 中如何消费REST 服务却言之甚少。

Simon Evan 的文章“使用 Silverlight 2.0 消费服务”中,他指出目前不支持类似 SOAP Web Service 中那样的自动生成代理:

消费其它服务(例如 REST)有一点难度,并且的确使我们惊奇的一件事是,目前还不能自动产生由 ASP.net AJAX(通过 WebHttpBinding)使用的代理。你不得不手动构建一个 URI 字符串,在 HTTP GET 请求(REST)时使用 WebClient 类;对于其他 HTTP 动词,使用 HttpWebRequest 类。如果这个服务使用了 JSON 编码,解析响应可用这两种方法中的任意一种:使用 WCF 的 DataContractJSONSerializer(在概念上与 XmlSerializer 类似),或者使用 LinqToJSON……

Json.NET(LinqToJSON)可以在 Codeplex 网站找到。作为.NET Framework 3.5 组成部分, LINQ to XML 可以方便地解析和消费XML 数据。

Pedram Rezaei 解释了如何为“来自 Flickr 的兴趣列表(ListInteresting)操作”开发一个消费者。起初他采用了 Simon Evan 所说的三步走的方式:

  • 制作 HTTP 请求,并将所有的参数组为 URI 的一部分包含进来
  • 得到 XML 格式的响应
  • 要么解析它,要么把它反序列化成一个对象

即便这是一个可行的方式,但 Pedram 批评说:

我们并没有使用 WCF 提供的统一编程模型,而且 URL 也是通过字符串连接搞出来的。响应也是被手工反序列化成一个对象的。使用 WCF 和 WebHttpBinding 我们可以将绝大部分的工作自动化。

他采用了一种“WCF 方式”,包含如下步骤:

  • 定义一个表示服务提供者的 ServiceContract。
    UriTemplate 包含了所有必要的参数,这些参数与其对应接口方法的参数列表完全一致。这个方法的签名还定义了一个 CLR 返回类型,它从服务响应中反序列化出 XML 内容。这个方法必须被用 WebGet 或者 WebInvoke 属性做注解;而且为了尽可能匹配服务返回的 XML,ServiceContract 必须被配置为使用 XmlSerializerFormat,而不是 DataContractSerializer 格式。
  • 配置客户端端点使用“webHttpBinding”。
  • 为返回值和参数定义 XML serializable 类型。
  • 创建客户端代理,创建方法:要么通过直接实例化 ChannelFactory,要么由 ClientBase 继承。

欲知细节,请阅读 Pedram 的文章 Mihailo Lalevic 使用了相同的方式来为 eBay API 开发了一个消费者,同时提供了一个 WPF 示例应用(源码)作为他文章的附件。

查看英文原文 Consuming REST Services with WCF

活动推荐:

2023年9月3-5日,「QCon全球软件开发大会·北京站」 将在北京•富力万丽酒店举办。此次大会以「启航·AIGC软件工程变革」为主题,策划了大前端融合提效、大模型应用落地、面向 AI 的存储、AIGC 浪潮下的研发效能提升、LLMOps、异构算力、微服务架构治理、业务安全技术、构建未来软件的编程语言、FinOps 等近30个精彩专题。咨询购票可联系票务经理 18514549229(微信同手机号)。

2008-05-04 03:271773
用户头像

发布了 29 篇内容, 共 33542 次阅读, 收获喜欢 2 次。

关注

评论

发布
暂无评论
发现更多内容

设计模式六大原则

刘志刚

设计原则

阿里拍卖,能不能拍到点儿上?

ToB行业头条

人人都需要一份自己的「使用说明书」

非著名程序员

程序员 程序人生 提升认知 独立思考 自我思考

女员工被阿里录取工资二万六,辞职时被领导挽留:给你4万留下

程序员生活志

程序员 阿里

抢滩新基建,百度还会输给阿里和腾讯吗?

ToB行业头条

2020,是中国SaaS行业的机遇之年?

ToB行业头条

为什么单元测试不是持续交付的唯一答案

禅道项目管理

持续集成 单元测试

啃碎并发(10):内存模型之内部原理

猿灯塔

第6周-作业2-总结

seng man

我在项目中是这样配置Vue的

前端有的玩

Java Vue 大前端 框架设计

IDC2020 Q1通用服务器数据发布,浪潮信息成绩喜人

Geek_116789

讲烂了的mysql,今天再给大家重温一下

爱嘤嘤嘤斯坦

Java MySQL 数据库 编程 mysql事务

微信小程序使用GoEasy实现websocket实时通讯

GoEasy消息推送

小程序 websocket 即时通讯

Spring5-Reactor函数式编程

小技术君

spring reactor Spring5 springboot

​中国SaaS处在什么阶段?

ToB行业头条

吴恩达推荐笔记:22张图总结深度学习全部知识

程序员生活志

学习 吴恩达

自动化测试首先是一种工作文化

wangwei1237

自动化测试 测试文化

CAP原理简述

刘志刚

MobTech袤博与百度战略签约 携手布局数据智能产业新蓝图

Geek_116789

为什么我们需要制品管理?

Man

DevOps nexus 制品库管理 Artifactory

在前端如何玩转 Word 文档

阿宝哥

html markdown word

laravel redis队列不执行

kaer

laravel redis Queue

三大 OSS 缓存加速系统巅峰对决

苏锐

hadoop cache JuiceFS JindoFS Performance

腾讯的ToB梦想

ToB行业头条

Worktile完成新一轮融资,将发力研发管理赛道

Worktile

融资

计算机网络基础(一)---计算机网络概览篇

书旅

php laravel 计算机网络

话题讨论|在编程中,有哪些好习惯是应该一直坚持下去的?

InfoQ写作社区官方

写作平台 话题讨论 话题

《重学 Java 设计模式》PDF 出炉了 - 小傅哥,肝了50天写出18万字271页的实战编程资料

小傅哥

Java 设计模式 小傅哥 重构 代码质量

第6周-作业1

seng man

推荐系统大规模特征工程与FEDB的Spark基于LLVM优化

范式AI云

spark Sparksql 推荐系统 LLVM FEDB

火焰图:全局视野的Linux性能剖析

Marionxue

  • 扫码添加小助手
    领取最新资料包
使用WCF消费REST服务_SOA_Hartmut Wilms_InfoQ精选文章