对于一个项目,我必须在 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(使用前将#替换为@)