WCF与Web服务与套接字:可以选择哪个?

时间:2009-08-13 02:34:09

标签: wcf web-services comparison

我有两个与Web服务相关的问题:

(1)我正在编写一组应用程序,我想到也许我没有使用正确的工具来完成工作。这是规范:

  • 不同的VPN和防火墙背后有许多Windows服务器。
  • 每个服务器都运行一个Windows服务,通过Web服务向中央服务器报告有关它的各种信息,这两个服务都是我编写过的,并且可以访问。

所以我既是制作人又是消费者,我就是在同一个平台上(.NET)。也许网络服务不是要走的路?我使用的只是因为它易于编写和部署,而且我最熟悉它们。我真的应该使用WCF吗?

(2)在Web服务中,我正在创建一个State对象来表示服务器的状态,并将其作为参数发送。但是,添加服务引用会创建State类的代理。将State对象的属性复制到代理,然后发送代理似乎很古怪。我是否应该将代理类替换为自动生成的代码中的真实类(即,包括对State类的引用)?

6 个答案:

答案 0 :(得分:3)

通过“网络服务”,我认为你的意思是ASMX?我会选择WCF是可能的,仅仅是因为你失去了任何东西,但获得了很大的灵活性。例如,您可以通过简单的配置更改从XML-over-HTTP切换到Binary-over-TCP。

答案 1 :(得分:1)

我建议使用WCF并使用Net.Tcp绑定。它对300个客户来说应该足够有效。对于代理类问题,在生成代理时使用svcutil工具的/ reference选项。这将允许您在服务器和客户端之间共享类。如果互操作性是一个问题,我不会使用这个选项但是因为你声明你开发了clietn和服务,所有这些都在.Net中,它在你的情况下是有效的用途。

答案 2 :(得分:1)

您对“Web服务”和WCF的区别是错误的区别。

ASMX Web服务是.NET 1.0中引入的原始.NET SOAP Web服务技术。它已经被WCF取代,它可以完成ASMX可以做的所有事情,还有更多(包括对WS- *标准的支持)。

微软现在认为ASMX Web服务和它们所基于的XML Serializer是“传统技术”。请参阅“Microsoft says: ASMX Web Services are a “Legacy Technology””。

答案 3 :(得分:1)

使用WCF,既然您可以控制操作的双方,并且可以共享定义了服务合同的.dll,那么您可以并且可能应该使用ChannelFactory<IYourServiceContractHere>而不是自动生成那些丑陋的带有服务引用的代理类。

以下是我在此主题中找到的第一个帖子:http://blogs.msdn.com/juveriak/archive/2008/02/03/using-channels-vs-proxies-in-wcf.aspx

答案 4 :(得分:0)

如果它与平台无关,我肯定会推荐WCF。

答案 5 :(得分:0)

我已经完成了你所描述的超过300个地方的效果。我不认为你做错了。

您可以考虑的另一件可行的方法是使用MSMQ。但是,在这种情况下,您需要编写事件触发器(COM)或事件队列处理服务。