KISS:与 RESTful Web 服务通信的简单 C# 应用程序

Posted

技术标签:

【中文标题】KISS:与 RESTful Web 服务通信的简单 C# 应用程序【英文标题】:KISS: Simple C# application which communicates with a RESTful web service 【发布时间】:2010-11-29 10:17:09 【问题描述】:

关注KISS principle,突然意识到:

在 .NET 中,您可以使用实体模型框架来包装数据库。 此模型可以通过 WCF 公开为 Web 服务。 此 Web 服务将具有非常标准化的定义。 可以创建一个可以使用任何此类 RESTful Web 服务的客户端应用程序。

我不想重新发明***,如果有人已经这样做了,我不会感到惊讶,所以我的问题很简单:是否有人已经创建了一个简单的(桌面,而不是网络)客户端可以使用基于实体框架的 RESTful 服务并允许用户直接向该服务读取和写入数据的应用程序?

否则,我只能自己“发明”这个了。 :-)


问题是,数据库层和RESTful服务已经完成了。 RESTful 服务只会在其开发阶段保留在项目中,因为我们可以直接从围绕它构建的 Web 应用程序中使用数据库层程序集。部署 Web 应用程序时,RESTful 服务将被排除在部署之外。

但数据库有大量数据要管理近 50 多个表。在针对本地数据库进行开发时,我们可以直接访问数据库,因此我不需要这个工具。部署后,Web 应用程序将是访问数据的唯一方式,因此我无法使用此工具。但是我们也有一个测试阶段,其中数据库存储在本地域之外的另一个系统上,并且该数据库对开发人员不可用。只有管​​理员可以直接访问此数据库,这使得测试更加复杂。

但是,通过 RESTful 服务,我仍然可以直接访问数据。因此,当某些测试出错时,我可以通过此连接修复数据,或者创建数据副本以在本地系统上进行测试。还有很多其他功能,甚至可以直接在 Excel 或 XMLSpy 中打开表服务的 URL 以查看内容。但是当我想写回一些东西时,我必须编写特殊的代码来做到这一点。一个允许我访问数据和修改数据的通用工具会更容易。由于它是围绕 ADO.NET 数据服务的通用设置,所以这也应该相当简单。

因此,我可以做到,但希望其他人已经做过类似的事情。不过好像还没有制作出这样的工具……

【问题讨论】:

【参考方案1】:

您指的是ADO.Net Data Services。它基本上创建了一个实体数据库模型,并使用 ASMX 向服务添加了一个 REST 前端。 MSDN here 提供了一篇关于使用 .Net 使用服务的 How To 文章。过去,我也使用 .Net 中的常规 WebClient 类做过同样的事情。

如果您想基于实体框架推出自己的产品,也可以查看WCF REST Starter Kit。入门工具包还包含一个方便的新 WebClient 类,可用于与 REST 服务进行通信。

澄清

据我所知,没有预构建的应用程序客户端会与这些服务通信,因为它们几乎都在使用 Web 服务访问数据。 Microsoft Smart Client Factory 很可能是我使用过的最接近的东西。

我提到了上述 2 个选项,因为他们已经在 .Net 中拥有可以直接使用它们的库,或者作为引用的 Web 服务,或者对于更具冒险精神的人,包括我自己,使用 WebClient 库或新的 @ WCF REST Starter 工具包中的 987654326@ 库。

我在 Windows、Web、Silverlight 和 WCF 中都使用过。后者是最简单的,因为它们专注于 REST。

我们目前正在调查Prism,它在使用 WCF 进行前端开发时强烈倾向于使用这种方法。

假设

关于这个问题,您做出了一个通用假设,即使用 WCF 服务包装 ADO 实体框架将是通用的。 ADO.Net 数据服务是您将获得的最接近的,但是数据库的结构将从根本上改变您与之交互的方式。以“通用”的方式提高一个级别是危险的,因为这两种技术,单独或一起,已经尽可能通用。

【讨论】:

客户端不必了解数据库结构。数据服务返回一个原子提要,其中列出了所有表,这些表可以显示在一个组合框中。选择一个表,它将返回该表中的数据,这些数据可以通过网格显示,只需查看“d”命名空间中的元素即可。附加功能不应该那么难,因为数据服务已经概括了大部分功能。危险的?是的。但作为内部工具还是实用的。 (安全问题需要在服务中处理,而不是应用程序。) 尽管您的样本是有效的,并且应用可以工作,但在商业环境中几乎没有多大意义。现实情况是,您永远不会向最终用户显示表格的所有字段。此外,它会非常通用。因此,我坚持我的回答。在您的环境中它可能是实用的,但除了正在创建的 CodePlex 项目之外,我还没有看到任何这样的客户端。 在商业环境中,没有。但在开发环境中,您希望快速查看数据,这样的工具非常实用。 同意。然而,在我们的环境中,它被称为 SMSS。所有开发人员也可以访问:)。不过我同意这个想法。这只是太多的工作,除非您正在为您的开发环境开发软件,否则它将变得更加麻烦而不是有用。恕我直言。【参考方案2】:

除了数据服务 (+1),还可以考虑 RIA 服务。它就像 Silverlight 或 WPF 客户端的特定于域的数据服务版本。不如数据服务灵活,但更容易。

【讨论】:

不幸的是,实体模型已经完成。围绕它的 RESTful 服务也很容易添加和部署。现在,我将不得不处理已部署的东西,并且不能做太多调整服务器架构的事情。 (嗯,直到下一次更新。)测试需要一个月,所以如果没有解决方案,我有一个月的时间来构建自己的解决方案。 (我想应该需要两天时间。) 数据服务和 RIA 服务都适用于您现有的实体模型。 +1 我与 RIA 的合作不多,尽管我应该深入研究它。我已经老了跟不上。

以上是关于KISS:与 RESTful Web 服务通信的简单 C# 应用程序的主要内容,如果未能解决你的问题,请参考以下文章

在 iOS 中访问 RESTful Web 服务

AJAX POST To Jersey 启用 RESTful Web 服务跨域

如何在使用消息传递(例如 RabbitMQ)与使用 Web 服务进行后端组件交互/通信之间做出决定?

RESTful Web 服务认证

RPC(Remote Procedure Call基于服务调用)和 RESTful(Representational State Transfer基于资源)通信协议异同?常见RPC和RESTful框架

RESTful API 与 Web 服务 API