WCF、Web 服务或 ADO.NET 数据服务:我应该使用什么?

2023-11-23

对于一个项目,我必须在 Web 服务器上托管的数据库与互联网上的多个客户端之间实现通信。 在阅读了一些内容并观看了一些有关可能的(微软)技术的介绍性视频后,我发现我似乎(至少)有三个选择:

1) Windows 通信基础 (WCF)
2) ASP.NET Web 服务
3)ADO.NET数据服务

因为我对这三种技术中的任何一种都不熟悉,所以我必须深入学习(希望只是)其中一种技术 - 问题是:哪一种?

或者更准确地说:哪一个用于以下任务?

数据需要从客户端上传到服务器/数据库,并且还需要下载一些其他数据。在客户端,这不会由在浏览器中工作的用户交互地发生,而是作为客户端上的自动进程定期运行(例如每 2 小时)。

a) 在 Web 服务器端将有:

  • SQL Server 数据库
  • .NET框架3.5 SP1
  • 表示数据库结构并使用 ADO.NET 实体框架建模的类库
  • (一个 ASP.NET Web 应用程序,它将在浏览器中显示数据库中的数据:我将其放在括号中,因为这个 Web 应用程序并不重要,因为所提到的数据上传/下载不会通过浏览器 GUI 触发.)

b) 客户端不太清晰,必须更加灵活。这里我必须区分两个要求:

i) 优先事项一(就我可用于开发的时间而言):

  • 客户端在我的控制之下,这意味着:我在客户端上有任何 Windows 操作系统,我可以安装 .NET Framework,并且我可以决定开发 Windows 服务、控制台应用程序、Windows 窗体应用程序或其他任何内容。我对上面提到的类库有了解并可以访问。

ii) 较低优先级,但必须是未来的选择:

  • 我需要公开任何类型的接口描述,以允许其他开发人员构建自己的应用程序来上传/下载数据。
  • 其他人为其开发的客户端可以在任何类型的操作系统(Windows、UNIX、MacOS 等)上运行。他们还应尽可能自由地选择自己喜欢的编程语言。

由于最后一点,强迫开发人员在客户端使用 .NET Framework 是不可行的。客户端的通信必须是可从各种平台和语言访问的任何类型的“标准”技术。在我的小研究中,我读到了“SOAP”、“REST”或“AtomPub”等术语,这些术语似乎是一种标准协议或通信技术(不是微软专有的发明)。但我不确定也不知道哪种技术是“最新的”,具有“最好的未来”,是最常见和众所周知的,是最强大的或最容易使用的(从其他可能的角度来看)开发人员!所以问题是我必须支持什么才能让大多数客户端开发人员满意)。

最后一点:安全很重要!上传/下载数据必须仅限于专人。如果没有适当的凭据,则不应使用或探索该界面。

现在最好用什么技术? (1)、(2)还是(3)?为什么你会推荐它?

预先非常感谢您的任何建议!


嗯,不。 (2) 旧式 ASP.NET Web 服务即将过时 - 它已经过时,不再开发 - 它已被 WCF 取代。

因此,剩下选项 1(直接 WCF)和 3(ADO.NET 数据服务 - 最近更名为 WCF 数据服务)。

两者都使用 WCF 作为其基础技术 - 因此学习和了解 WCF 在这两种情况下都是必须的。

使用直接 WCF(选项 1),您有更多选择 - 您可以自行托管、在 IIS 中托管您的服务、使用不同的协议和绑定等等。但随着选择而来的是复杂性——你需要学习和了解所有这些东西——至少在某种程度上。您的客户端需要能够与您对话 SOAP - 几乎任何语言(.NET 当然,Java、Ruby、PHP - 只要你能想到的)都可以以这种或那种方式对话 SOAP。

如果您最感兴趣的是向外部客户端公开数据库中的数据,我认为 WCF 数据服务确实是一个不错的选择。它基于 REST,因此您可以使用浏览器访问 WCF 数据服务,然后看看会发生什么。它非常强大,甚至提供 LINQ 客户端支持 - 您制定 LINQ 查询,然后将其转换为对数据服务的适当 REST 调用。

使用 WCF 数据服务,您的客户端只需要一个 HTTP 堆栈 - 即使 iPhone 也有这个 :-) 但使用 .NET 客户端,事情当然会更好、更舒适、更高效。

我想说看看WCF数据服务首先看看这是否满足您的需求 - 如果没有,请更深入地研究 WCF。还请查看WCF 数据服务概览进行介绍。

UPDATE:

马克,我对你的理解正确吗 服务器上的 WCF 满足此要求 要求?和 ADO.NET (WCF) 数据 服务也?

绝对地。服务器端的 WCF(普通的或带有数据服务的)NOT以任何方式、形状或形式向客户发号施令。如果您真的愿意,您可以将 iPhone 连接到 WCF 数据服务 :-) WCF 从一开始就被设计为具有很强的互操作性 - 实际上,它是实现最多 WS-* 行业的一个平台跨平台通信的标准。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

WCF、Web 服务或 ADO.NET 数据服务:我应该使用什么? 的相关文章

随机推荐

  • Bash - 如果 apt-get/dpkg 正在运行,如何检查软件包是否可以安装?

    在 bash 脚本中我想安装一个包 在明智地这样做之前 我需要检查是否没有其他实例apt get or dpkg已经在工作了 如果是这样的话 那么apt get会失败 因为它已经锁定了 检查是否足够 var lib dpkg lock an
  • Gradle processResources - 文件包含 $ 字符

    你怎样才能执行gradle processResources在包含的文件上 字符而不转义 在文件中 我有一些静态 html 文件位于 resources static文件夹建议Spring Boot 参考文档 但是 当我尝试执行时gradl
  • 如何在log4net中为多行日志条目添加缩进?

    我知道这个问题我同意这个答案 但是我可以使用 log4net 执行以下操作吗 而不是 2013 04 09 12 54 47 093 INFO Main Line 1 Line 1 Line 1 Line 2 Line 2 Line 2 L
  • 缩放后的 QPixmap 看起来很糟糕

    我有以下小部件 pixmap QtGui QPixmap r pics cdaudio png scaled 100 100 图像从 256x256 缩小 它看起来相当不稳定 如何在 Qt 内平滑地扩展它 Use the transform
  • 当 mysql_query 返回 false 时

    除了编写错误的查询并且没有访问表的权限之外 当mysql query返回假 还有其他案例吗 请参阅参考指南 对于 SELECT SHOW DESCRIBE EXPLAIN 等返回的语句 结果集 mysql query 成功时返回资源 否则返
  • 我的 App Engine 应用程序不会自动创建默认存储桶

    我的应用程序引擎应用程序不会自动创建默认存储桶我不明白这是为什么 我的其他应用程序工作正常 但是当我在新应用程序中运行相同的代码时 我正在处理它 但它不会创建 Google 云存储桶 有人有主意吗 已弃用的方法 转到您的 App Engin
  • 将整数列表传递给存储过程

    这是我的存储过程 ALTER PROCEDURE dbo Dan numbers varchar 10 AS BEGIN SET NOCOUNT ON select numbers numbers END 在SSMS中 我可以像这样成功执行
  • 单击浏览器后退按钮时如何调用事件

    单击浏览器后退按钮时如何调用 jquery 事件 我在 asp net mvc 中使用单页应用程序 我想在用户按下浏览器的后退按钮时显示一个确认框以离开屏幕 我如何在浏览器后退按钮上调用 jquery 函数 请帮忙 我已经搜索并找到了推送状
  • “ProductList”对象没有属性“object_list”

    In my ProductList类 当我尝试打电话时get context data在另一种方法中 我收到错误 ProductList object has no attribute object list def get context
  • Google Analytics 有没有办法像 Mixpanel 一样跟踪多个事件参数?

    Given trackEvent category action opt label opt value opt noninteraction 我尝试使用 opt label 但它似乎只是一个字符串 并且不接受像 Mixpanel 那样的不
  • Python:排序函数在存在 nan 时中断

    sorted 2 float nan 1 回报 2 nan 1 至少在 Activestate Python 3 1 实现上是这样 我明白nan是一个奇怪的对象 所以如果它出现在排序结果中的随机位置我不会感到惊讶 但它也搞乱了容器中非 na
  • 转义大括号位于车把中的表达式旁边

    无法理解如何转义位于表达式旁边的 或 符号Handbars Java 模板引擎 我正在使用车把模板生成纯文本 因此我无法按照建议使用大括号的 HTML ASCII 代码there 我需要这样的表达 variable name 待解决 var
  • 使用 ACTION_IMAGE_CAPTURE 以较低分辨率打开 Android 相机

    我正在使用这样的意图打开 Android 相机 Intent cameraIntent new Intent android provider MediaStore ACTION IMAGE CAPTURE cameraIntent put
  • GWT 2.7 + GAE 应用程序在部署时查找代码服务器

    为什么 appengine 尝试使用超级开发模式 每次我将 GWT 应用程序部署到 appengine 并尝试访问它时 我都会看到白色的加载屏幕 然后大约 20 30 秒后我会收到以下消息 我使用 Maven 与gwt maven 插件 a
  • hibernate如何从现有数据库视图中检索数据?

    我是冬眠新手 我的问题是我有一个 Oracle 数据库 我在数据库中有一个视图 现在我想使用 hibernate 来检索该视图中的数据 有没有可能的解决方案 下面的代码片段可以解决您的问题 该代码片段是从教程中提取的 将 Hibernate
  • 为什么 Object.create(null) 的 __proto__ 未定义?

    在阅读 Javascript 原型时 我遇到了这种我无法解释的行为 我正在 chrome 的控制台 V8 中对此进行测试 var fruit taste good var banana Object create fruit console
  • 如何避免 Java 游戏中的垃圾收集延迟? (最佳实践)[关闭]

    Closed 这个问题需要多问focused 目前不接受答案 我正在为 Android 平台调整 Java 交互游戏的性能 有时 垃圾收集的绘图和交互会出现问题 通常它不到十分之一秒 但有时在非常慢的设备上可能会长达 200 毫秒 我正在使
  • 检查两个 Python 正则表达式模式是否等效

    我想写一个正则表达式re VERBOSE模式 但我不相信我会毫无错误地添加详细部分 我记得 理论上 两个正则表达式的等价性 至少没有反向引用 可以通过生成它们的自动机并尝试找到图双射来找到 但我看不到用于比较正则表达式的实例方法 有没有办法
  • 无法使用滚动条使 DIV 宽度为 100%

    我有一个带有 DIV 和 TABLE 的页面 DIV 是我的标题 即使显示水平滚动条 我也希望它的宽度为 100 由于某种原因 它只占用 100 的可见窗口 我的 HTML 代码是 div style background color ye
  • WCF、Web 服务或 ADO.NET 数据服务:我应该使用什么?

    对于一个项目 我必须在 Web 服务器上托管的数据库与互联网上的多个客户端之间实现通信 在阅读了一些内容并观看了一些有关可能的 微软 技术的介绍性视频后 我发现我似乎 至少 有三个选择 1 Windows 通信基础 WCF 2 ASP NE