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

WCF、Web服务或ADO.NET数据服务:我应该使用什么?,wcf,web-services,wcf-data-services,Wcf,Web Services,Wcf Data Services,对于一个项目,我必须实现web服务器上托管的数据库与internet上的多个客户端之间的通信。 在阅读了一些关于可能的(微软)技术的介绍性视频后,我发现我似乎(至少)有三个选择: 1)Windows通信基础(WCF) 2) ASP.NET Web服务 3) ADO.NET数据服务 因为我对这三种技术中的任何一种都不熟悉,所以我必须深入学习其中的一种——问题是:哪一种 或者更准确地说:下面的任务是哪一个 数据需要从客户端上传到服务器/数据库,还需要下载一些其他数据。在客户端,这不会由在浏览器中工

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

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

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

或者更准确地说:下面的任务是哪一个

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

a) 在web服务器端,将有:

  • SQL Server数据库
  • .NET Framework 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都是必须的

使用straight WCF(选项1),您有更多的选项—您可以自托管、在IIS中托管服务、使用不同的协议和绑定等等。但随着选择而来的是复杂性——你需要学习和了解所有这些东西——至少在某种程度上是如此。您的客户机需要能够与您交谈SOAP—几乎任何语言(当然,Java、Ruby、PHP,您可以随意命名)都可以以某种方式与SOAP交谈

如果您最感兴趣的是将数据库中的数据公开给外部客户机,那么我认为WCF数据服务确实是一个不错的选择。它基于REST,所以你可以用浏览器点击你的WCF数据服务,看看会发生什么。它非常强大,甚至提供了LINQ客户端支持——您可以制定LINQ查询,并将其转换为对数据服务的适当REST调用

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

我会说,看看第一个,看看它是否满足您的需求-如果不满足,深入挖掘WCF。还可以查看介绍

更新:

马克,我没听错吧 服务器上的WCF实现了这一点 要求和ADO.NET(WCF)数据 还有服务吗


当然。服务器端的WCF(普通或带有数据服务)不会以任何方式、形状或形式指示客户端。您可以将iPhone连接到WCF数据服务,如果您真的喜欢的话:-)WCF从一开始就被设计为具有非常强的互操作性-实际上,它是实现跨平台通信的WS-*行业标准最多的平台。

“哦,不是(2)老式的ASP.NET Web服务即将过时——它已经过时,不再被开发——它已经被WCF所取代?哈哈。你可能想回顾一下声明的需求。有趣的是,我不知道你可以针对数据服务编写Linq。它可以进行连接、子查询等,还是基本上只限于什么