WCF与Web服务与套接字:选择哪一种?

WCF与Web服务与套接字:选择哪一种?,wcf,web-services,comparison,Wcf,Web Services,Comparison,关于Web服务,我有两个相关的问题: (1) 我目前正在编写一套应用程序,我突然想到,也许我没有使用合适的工具来完成这项工作。以下是规格: 在不同的VPN和防火墙后面有许多Windows服务器 每个服务器都有一个运行的Windows服务,它通过一个Web服务向一个集中的服务器报告关于它的各种信息,这两个服务我都写过,并且都可以访问 因此,我既是生产者又是消费者,我呆在同一个平台上(.NET)。也许web服务不是最好的选择?我使用它纯粹是因为它易于编写和部署,而且我对它们最为满意。我真的应该为

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

(1) 我目前正在编写一套应用程序,我突然想到,也许我没有使用合适的工具来完成这项工作。以下是规格:

  • 在不同的VPN和防火墙后面有许多Windows服务器
  • 每个服务器都有一个运行的Windows服务,它通过一个Web服务向一个集中的服务器报告关于它的各种信息,这两个服务我都写过,并且都可以访问
因此,我既是生产者又是消费者,我呆在同一个平台上(.NET)。也许web服务不是最好的选择?我使用它纯粹是因为它易于编写和部署,而且我对它们最为满意。我真的应该为此使用WCF吗


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

如果代理类与平台无关,我当然会推荐WCF。

我所做的正是您描述的,在300多个位置产生了巨大的影响。我认为你没有打错电话。


<> P>另一个你认为可以很好工作的是使用MSMQ。但是,在这种情况下,您需要编写事件触发器(COM)或事件队列处理服务。

我想您指的是ASMX?我认为WCF是可能的,因为你不会失去任何东西,但会获得很多灵活性。例如,您可以通过一个简单的配置更改,从通过HTTP的XML切换到通过TCP的二进制

我建议使用WCF和Net.Tcp绑定。它的效率应该足以满足300个客户的需求。对于代理类问题,在生成代理时使用svcuti工具的/reference选项。这将允许您在服务器和客户端之间共享类。如果互操作性是一个问题,我不会使用此选项,但因为您声明您同时开发了clietn和服务以及all-in.Net,所以在您的情况下,它是一个有效的用途。

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

ASMXWeb服务是.NET1.0中引入的原始.NETSOAPWeb服务技术。它已经被WCF所取代,WCF可以实现ASMX所能做的一切,还可以提供更多功能(包括对WS-*标准的支持)


微软现在认为ASMXWeb服务及其基于的XML序列化程序是“遗留技术”。请参阅“

使用WCF,因为您可以控制操作的双方,并且可以共享定义服务契约的.dll,所以您可以而且可能应该使用
ChannelFactory
而不是使用服务引用自动生成那些丑陋的代理类


这是我在这个主题上找到的第一个热门话题:

re-MSMQ:我认为如果使用WCF,您不需要这样做,因为您可以创建一个WCF绑定到队列,并充分利用这两个方面。这是事实。我记得我做过一个WCF服务来消耗队列中的消息,但我没有特别记得。我对较旧的队列管理方法比较熟悉。我忘了解决WCF问题,它是一个很好的抽象层。此外,微软现在认为ASMX web服务是“遗留技术”,不会修复bug。是的,我指的是ASMX。我猜我总是错误地将两者等同起来。ASP.NET Web服务应用程序(3.5)也被认为是遗留的吗?如果是这样的话,为什么他们会发布一些他们认为遗留下来的新东西(除非它充当WCF的桥梁)?ASP.NET Web服务应用程序不是新的。是什么让你觉得它们是新的?我没有很好地表达这个问题。从VisualStudio 2005到2008,他们已经对ASP.NET Web服务做了一些修改,比如添加Web引用和添加服务引用,App.CONFIG中的更改,我相信代理类,等等。我的意思是,为什么他们会烦恼调整他们认为遗留下来的东西?“添加服务引用”不是ASP.NET Web服务的一部分。这是WCF的一部分。另外,还记得.NET3.5发布的时间吗。他们最近才公开指定ASMX为“遗产”。