none
请问WCF 跟 WebService之间的相同跟异同 RRS feed

答案

  •  

    这两天看了WCF,感觉wcf好像是要客户端支持的,而WebService是跨语言的?

    作者: Frank Xu Lei 发布于: 2011/01/26 1,016次浏览

    热度:

     

    【0】问题:

    1. WCF与 Web Service的区别是什么?
    2. 和ASP.NET Web Service有什么关系?
    3. WCF与ASP.NET Web Service的区别是什么?

    这是很多.NET开发人员容易搞错的问题。面试的时候也经常遇到。而很多新手也会因为初次接触WCF或者Web Service而陷入迷惑的境地,很多资料介绍的也不准确。我甚至和许多许多年开发经验的开发人员讨论这些问题,他们都无法分清二者的区别。相信很多人也被误导。以下是最常见的错误观点:

    1. Web Service太旧了;
    2. Web Service 就是 ASP.NET Web Service;
    3. WCF比Web Service性能好;
    4. WCF 比 ASP.NET Web Service快;
    5. WCF比Web Service速度快;
    6. WCF比Web Service强大;
    7. WCF比 Web Service安全;
    8. Web Service必将被WCF取代;
    9. WCF其实就是Web Service;
    10. WCF非常简单,其实没有什么;

    等等结论。这些观点我相信很多人都听说或接触过。后面我们会详细分析每个观点的错误的原因。以后大家在学习和面试中也好有个参考。

    ——————————————————————————————————————–

    下面有个类似的问题是来自于WCF中文论坛,引用ymq:
    不错
    以前用web service用的比较多,基本熟悉了,最近接触到WCF,也许是刚接触的原因,感觉怎么比 web service 复杂的多,优点好像也不是很明显 。。。。。
    谢谢,我曾经在WCF中文技术论坛里和他们讨论过一个问题。

    ——————————————————————————————————————–

    下面我们来详细讨论一下二者的区别。Web Service和WCF的到底有什么区别。

    【1】Web Service:严格来说是行业标准,也就是Web Service 规范,也称作WS-*规范,既不是框架,也不是技术。

           它有一套完成的规范体系标准,而且在持续不断的更新完善中。

           它使用XML扩展标记语言来表示数据(这个是夸语言和平台的关键)。微软的Web服务实现称为ASP.NET Web Service.它使用Soap简单对象访问协议来实现分布式环境里应用程序之间的数据交互。WSDL来实现服务接口相关的描述。此外Web services 可以注册到UDDI中心.供其客户查找使用。
         后来微软做了ASP.NET Web Service的安全,性能,数据加密、解密,托管宿主等多方面的扩展,称为WSE系列,这个是过度产品,最高到WSE3.0.后来就是WCF时代。(WCF分布式开发必备知识(4):Web Service

    【2】ASP.NET Web Service:微软提供了Web服务的开发框架,属于ASP.NET Framework的一部分,但是支持早起的WS规范。比如SOAP1.1。
    【3】WCF:WCF 是一个分布式应用的开发框架,属于特定的技术,或者平台。既不是标准也不是规范。

            WCF其实一定程度上就是ASP.NET Web Service,因为它支持Web Service的行业标准和核心协议,因此ASP.NET Web Service和WSE能做的事情,它几乎都能胜任,跨平台和语言更不是问题(数据也支持XML格式化,而且提供了自己的格式化器)。
    但是WCF作为微软主推一个通讯组件或者平台,它的目标不仅仅是在支持和集成Web Service,因为它还兼容和具备了微软早期很多技术的特性。
             根据微软官方的解释,WCF(之前的版本名为“Indigo”)是使用托管代码建立和运行面向服务(Service Oriented)应用程序的统一框架。它使得开发者能够建立一个跨平台的安全、可信赖、事务性的解决方案,且能与已有系统兼容协作。WCF是微软分布式应用程序开发的集大成者,它整合了.Net平台下所有的和分布式系统有关的技术,如Enterprise Sevices(COM+).Net Remoting、Web Service(ASMX)、WSE3.0和MSMQ消息队列。以通信(Communiation)范围而论,它可以跨进程、跨机器、跨子网、企业网乃至于 Internet;以宿主程序而论,可以以ASP.NET,EXE,WPF,Windows Forms,NT Service,COM+作为宿主(Host)。WCF可以支持的协议包括TCP,HTTP,跨进程以及自定义,安全模式则包括SAML, Kerberos,X509,用户/密码,自定义等多种标准与模式。也就是说,在WCF框架下,开发基于SOA的分布式系统变得容易了,微软将所有与此相关的技术要素都包含在内,掌握了WCF,就相当于掌握了叩开SOA大门的钥匙。(MSDN)(WCF分布式开发步步为赢(1):WCF分布式框架基础概念
    如果你想对WCF学习系统化一些,必须向对如Enterprise Sevices(COM+).Net Remoting、Web Service(ASMX)、WSE3.0和MSMQ消息队列也有个详细的认识的话,你可以看看我的博客,在此之前我对WCF学习相关的知识都系统的进行了整理。这个是文章目录:老徐的博客:文章目录 。
    还有一点就是,很多人对WCF学习感兴趣,当初我也是,直接奔WCF而来,其实在后来的学习中感觉吃力,因为WCF宣称的很多特性和优势,我们无法理解,更无法体会。文中提到了很多微软的早期技术如果都没有接触过,这些对比我们就无法有深刻的体会。

                 建议先从基础开始,然后在关注一些WCF较高级的应用或者概念,循序渐进。网上也有很多WCF学习的资料,等有了一定基础以后可以看看付中凯大哥的讲座,这个需要一定的基础。
    原帖地址: http://social.microsoft.com/Forums/zh-CN/wcfzhchs/thread/c06420d1-69ba-4aa6-abe5-242e3213b68f
    优点的话,只有你学习使用以后才有体会,等你开始学习了WCF你就会慢慢喜欢上它~很好的一个通信框架,这个是微软SOA重要的技术框架。Biztalk里发布和调用WCF服务很常见,它提供了丰富的适配器。你有兴趣可以了解一下。~

     

    【4】结论:

       那么我们看了这些分析以后,就可以知道以上的结论为什么错误了。

    不能哪一个技术框架和行业标准作比较,任何对于二者的比较 都是错误的,因为两者根不不在同一个范畴里。就好比不能拿个汽车和交通法规比较一样。这是个误区。

    1. Web Service太旧了:框架都版本的差异,功能特性上却是有新旧之分,但是对于特定的系统,适合自己的就是最好的。
    2. Web Service 就是 ASP.NET Web Service:同样不是一个范畴。前者规范,后者是框架
    3. WCF比Web Service性能好:不是一个范畴,
    4. WCF 比 ASP.NET Web Service快:不一定,需要特定的限制条件,WCF使用BasicHttpBinding的时候与ASP.NET Web Service协议一样。
    5. WCF比Web Service速度快:同样概念不严格。
    6. WCF比Web Service强大:WCF却是集成了多种微软的分布式技术,但是这里应该严格说是:ASP.NET Web Service
    7. WCF比 Web Service安全:不严格。其次WCF也可以开发完全裸奔的应用程序。
    8. Web Service必将被WCF取代;Web Service不会被WCF取代!前者是一套广泛使用的规范。如果说WCF能取代的是ASP.NET Web Service,因为二者都是.NET平台上的技术。
    9. WCF其实就是Web Service:WCF在某些情况下不遵守 Web服务规范,也就是可以开发非服务性质的应用。而且不能简单等同。
    10. WCF非常简单,其实没有什么:WCF虽然是个服务开发框架,但是如果你深入学习,会发现WCF架构的强大之处。单单是WCF安全这一块已经相当的复杂了。况且还要统一编程模型,兼容和支持许多早期的分布式技术。很多人轻易下这样的结论,一定是仅仅看了一些文章或书籍,不一定写过代码。高手不会这样武断地下结论。

    看了这个文章,希望你对于WCF和WebService有个透彻的理解。

    而不会再产生这样的疑惑。

    无论是参加面试,作为候选人,还是面试官,弄清楚这些基础的问题,相当的必要。不要忽悠别人,也不要被别人忽悠。

    技术人员应该坚持严谨的学习态度。~

    呵呵,希望对大家的学习有帮助~


    老徐的博客

    作      者】:Frank Xu Lei

    网      站】:http://www.frankxulei.com/

    【中文论坛】:微软WCF中文技术论坛
    【英文论坛】:微软WCF英文技术论坛

    2009年7月21日 10:53
    版主

全部回复

  • 简单来说,WCF提供的服务可以以Web Service的方式提供,也可以不用。


    Anders Liu: http://andersliu.cnblogs.com
    2009年7月21日 4:32
    版主
  • 您好,请参考:
    wcf是面向服务的解决方案。既包含了Remoting也包含了Webservice。客户端既可以是windows家族也可以是非windows家族。
    wcf以面向服务为思想提供了包含通讯、事务、并发、队列和安全等一整套分布式开发的方案。
    2009年7月21日 5:51
  •  

    这两天看了WCF,感觉wcf好像是要客户端支持的,而WebService是跨语言的?

    作者: Frank Xu Lei 发布于: 2011/01/26 1,016次浏览

    热度:

     

    【0】问题:

    1. WCF与 Web Service的区别是什么?
    2. 和ASP.NET Web Service有什么关系?
    3. WCF与ASP.NET Web Service的区别是什么?

    这是很多.NET开发人员容易搞错的问题。面试的时候也经常遇到。而很多新手也会因为初次接触WCF或者Web Service而陷入迷惑的境地,很多资料介绍的也不准确。我甚至和许多许多年开发经验的开发人员讨论这些问题,他们都无法分清二者的区别。相信很多人也被误导。以下是最常见的错误观点:

    1. Web Service太旧了;
    2. Web Service 就是 ASP.NET Web Service;
    3. WCF比Web Service性能好;
    4. WCF 比 ASP.NET Web Service快;
    5. WCF比Web Service速度快;
    6. WCF比Web Service强大;
    7. WCF比 Web Service安全;
    8. Web Service必将被WCF取代;
    9. WCF其实就是Web Service;
    10. WCF非常简单,其实没有什么;

    等等结论。这些观点我相信很多人都听说或接触过。后面我们会详细分析每个观点的错误的原因。以后大家在学习和面试中也好有个参考。

    ——————————————————————————————————————–

    下面有个类似的问题是来自于WCF中文论坛,引用ymq:
    不错
    以前用web service用的比较多,基本熟悉了,最近接触到WCF,也许是刚接触的原因,感觉怎么比 web service 复杂的多,优点好像也不是很明显 。。。。。
    谢谢,我曾经在WCF中文技术论坛里和他们讨论过一个问题。

    ——————————————————————————————————————–

    下面我们来详细讨论一下二者的区别。Web Service和WCF的到底有什么区别。

    【1】Web Service:严格来说是行业标准,也就是Web Service 规范,也称作WS-*规范,既不是框架,也不是技术。

           它有一套完成的规范体系标准,而且在持续不断的更新完善中。

           它使用XML扩展标记语言来表示数据(这个是夸语言和平台的关键)。微软的Web服务实现称为ASP.NET Web Service.它使用Soap简单对象访问协议来实现分布式环境里应用程序之间的数据交互。WSDL来实现服务接口相关的描述。此外Web services 可以注册到UDDI中心.供其客户查找使用。
         后来微软做了ASP.NET Web Service的安全,性能,数据加密、解密,托管宿主等多方面的扩展,称为WSE系列,这个是过度产品,最高到WSE3.0.后来就是WCF时代。(WCF分布式开发必备知识(4):Web Service

    【2】ASP.NET Web Service:微软提供了Web服务的开发框架,属于ASP.NET Framework的一部分,但是支持早起的WS规范。比如SOAP1.1。
    【3】WCF:WCF 是一个分布式应用的开发框架,属于特定的技术,或者平台。既不是标准也不是规范。

            WCF其实一定程度上就是ASP.NET Web Service,因为它支持Web Service的行业标准和核心协议,因此ASP.NET Web Service和WSE能做的事情,它几乎都能胜任,跨平台和语言更不是问题(数据也支持XML格式化,而且提供了自己的格式化器)。
    但是WCF作为微软主推一个通讯组件或者平台,它的目标不仅仅是在支持和集成Web Service,因为它还兼容和具备了微软早期很多技术的特性。
             根据微软官方的解释,WCF(之前的版本名为“Indigo”)是使用托管代码建立和运行面向服务(Service Oriented)应用程序的统一框架。它使得开发者能够建立一个跨平台的安全、可信赖、事务性的解决方案,且能与已有系统兼容协作。WCF是微软分布式应用程序开发的集大成者,它整合了.Net平台下所有的和分布式系统有关的技术,如Enterprise Sevices(COM+).Net Remoting、Web Service(ASMX)、WSE3.0和MSMQ消息队列。以通信(Communiation)范围而论,它可以跨进程、跨机器、跨子网、企业网乃至于 Internet;以宿主程序而论,可以以ASP.NET,EXE,WPF,Windows Forms,NT Service,COM+作为宿主(Host)。WCF可以支持的协议包括TCP,HTTP,跨进程以及自定义,安全模式则包括SAML, Kerberos,X509,用户/密码,自定义等多种标准与模式。也就是说,在WCF框架下,开发基于SOA的分布式系统变得容易了,微软将所有与此相关的技术要素都包含在内,掌握了WCF,就相当于掌握了叩开SOA大门的钥匙。(MSDN)(WCF分布式开发步步为赢(1):WCF分布式框架基础概念
    如果你想对WCF学习系统化一些,必须向对如Enterprise Sevices(COM+).Net Remoting、Web Service(ASMX)、WSE3.0和MSMQ消息队列也有个详细的认识的话,你可以看看我的博客,在此之前我对WCF学习相关的知识都系统的进行了整理。这个是文章目录:老徐的博客:文章目录 。
    还有一点就是,很多人对WCF学习感兴趣,当初我也是,直接奔WCF而来,其实在后来的学习中感觉吃力,因为WCF宣称的很多特性和优势,我们无法理解,更无法体会。文中提到了很多微软的早期技术如果都没有接触过,这些对比我们就无法有深刻的体会。

                 建议先从基础开始,然后在关注一些WCF较高级的应用或者概念,循序渐进。网上也有很多WCF学习的资料,等有了一定基础以后可以看看付中凯大哥的讲座,这个需要一定的基础。
    原帖地址: http://social.microsoft.com/Forums/zh-CN/wcfzhchs/thread/c06420d1-69ba-4aa6-abe5-242e3213b68f
    优点的话,只有你学习使用以后才有体会,等你开始学习了WCF你就会慢慢喜欢上它~很好的一个通信框架,这个是微软SOA重要的技术框架。Biztalk里发布和调用WCF服务很常见,它提供了丰富的适配器。你有兴趣可以了解一下。~

     

    【4】结论:

       那么我们看了这些分析以后,就可以知道以上的结论为什么错误了。

    不能哪一个技术框架和行业标准作比较,任何对于二者的比较 都是错误的,因为两者根不不在同一个范畴里。就好比不能拿个汽车和交通法规比较一样。这是个误区。

    1. Web Service太旧了:框架都版本的差异,功能特性上却是有新旧之分,但是对于特定的系统,适合自己的就是最好的。
    2. Web Service 就是 ASP.NET Web Service:同样不是一个范畴。前者规范,后者是框架
    3. WCF比Web Service性能好:不是一个范畴,
    4. WCF 比 ASP.NET Web Service快:不一定,需要特定的限制条件,WCF使用BasicHttpBinding的时候与ASP.NET Web Service协议一样。
    5. WCF比Web Service速度快:同样概念不严格。
    6. WCF比Web Service强大:WCF却是集成了多种微软的分布式技术,但是这里应该严格说是:ASP.NET Web Service
    7. WCF比 Web Service安全:不严格。其次WCF也可以开发完全裸奔的应用程序。
    8. Web Service必将被WCF取代;Web Service不会被WCF取代!前者是一套广泛使用的规范。如果说WCF能取代的是ASP.NET Web Service,因为二者都是.NET平台上的技术。
    9. WCF其实就是Web Service:WCF在某些情况下不遵守 Web服务规范,也就是可以开发非服务性质的应用。而且不能简单等同。
    10. WCF非常简单,其实没有什么:WCF虽然是个服务开发框架,但是如果你深入学习,会发现WCF架构的强大之处。单单是WCF安全这一块已经相当的复杂了。况且还要统一编程模型,兼容和支持许多早期的分布式技术。很多人轻易下这样的结论,一定是仅仅看了一些文章或书籍,不一定写过代码。高手不会这样武断地下结论。

    看了这个文章,希望你对于WCF和WebService有个透彻的理解。

    而不会再产生这样的疑惑。

    无论是参加面试,作为候选人,还是面试官,弄清楚这些基础的问题,相当的必要。不要忽悠别人,也不要被别人忽悠。

    技术人员应该坚持严谨的学习态度。~

    呵呵,希望对大家的学习有帮助~


    老徐的博客

    作      者】:Frank Xu Lei

    网      站】:http://www.frankxulei.com/

    【中文论坛】:微软WCF中文技术论坛
    【英文论坛】:微软WCF英文技术论坛

    2009年7月21日 10:53
    版主
  • 支持楼上!
    做最好的自己
    2009年7月21日 11:52
  • 严重支持.....


    做一名有着良好修养的程序员.....
    2009年7月31日 17:14
  • 那么WCF提供的服务怎么样以Web Service的方式提供呢?我们现在有个项目,用户要求这么做,不知道如何做才能达到目的呢?谢谢

    2010年1月28日 7:54
  • 那么WCF提供的服务怎么样以Web Service的方式提供呢?我们现在有个项目,用户要求这么做,不知道如何做才能达到目的呢?谢谢


    使用basicHttpBinding方式发布服务就可以,协议是SOAP 1.1 也就是兼容Web Service.
    Frank Xu Lei--谦卑若愚,好学若饥
    专注于.NET平台下分布式应用系统开发和企业应用系统集成
    Focus on Distributed Applications Development and EAI based on .NET
    欢迎访问老徐的中文技术博客:Welcome to My Chinese Technical Blog
    欢迎访问微软WCF中文技术论坛:Welcome to Microsoft Chinese WCF Forum
    欢迎访问微软WCF英文技术论坛:Welcome to Microsoft English WCF Forum
    2010年1月28日 12:52
    版主
  •  

    这两天看了WCF,感觉wcf好像是要客户端支持的,而WebService是跨语言的?

    呵呵,欢迎来WCF论坛啊~前面有描述,我在来补充一下。其实先弄清楚两者的概念,在来做比较久容易许多了。
    1.WebService:严格来说是行业标准,不是技术,使用XML扩展标记语言来表示数据(这个是夸语言和平台的关键)。微软的Web服务实现称为ASP.NET Web Service.它使用Soap简单对象访问协议来实现分布式环境里应用程序之间的数据交互。WSDL来实现服务接口相关的描述。此外Web services 可以注册到UDDI中心.供其客户查找使用。
        后来微软做了ASP.NET Web Service的安全,性能,数据加密、解密,托管宿主等多方面的扩展,称为WSE系列,这个是过度产品,最高到WSE3.0.后来就是WCF时代。(WCF分布式开发必备知识(4):Web Service
    2.WCF:其实一定程度上就是ASP.NET Web Service,因为它支持Web Service的行业标准和核心协议,因此ASP.NET Web Service和WSE能做的事情,它几乎都能胜任,跨平台和语言更不是问题(数据也支持XML格式化,而且提供了自己的格式化器)。
    但是WCF作为微软主推一个通讯组件或者平台,它的目标不仅仅是在支持和集成Web Service,因为它还兼容和具备了微软早期很多技术的特性。
     根据微软官方的解释,WCF(之前的版本名为“Indigo”)是使用托管代码建立和运行面向服务(Service Oriented)应用程序的统一框架。它使得开发者能够建立一个跨平台的安全、可信赖、事务性的解决方案,且能与已有系统兼容协作。WCF是微软分布式应用程序开发的集大成者,它整合了.Net平台下所有的和分布式系统有关的技术,如Enterprise Sevices(COM+).Net Remoting、Web Service(ASMX)、WSE3.0和MSMQ消息队列。以通信(Communiation)范围而论,它可以跨进程、跨机器、跨子网、企业网乃至于 Internet;以宿主程序而论,可以以ASP.NET,EXE,WPF,Windows Forms,NT Service,COM+作为宿主(Host)。WCF可以支持的协议包括TCP,HTTP,跨进程以及自定义,安全模式则包括SAML, Kerberos,X509,用户/密码,自定义等多种标准与模式。也就是说,在WCF框架下,开发基于SOA的分布式系统变得容易了,微软将所有与此相关的技术要素都包含在内,掌握了WCF,就相当于掌握了叩开SOA大门的钥匙。(MSDN)(WCF分布式开发步步为赢(1):WCF分布式框架基础概念

      
     
    如果你想对WCF学习系统化一些,必须向对如Enterprise Sevices(COM+).Net Remoting、Web Service(ASMX)、WSE3.0和MSMQ消息队列也有个详细的认识的话,你可以看看我的博客,在此之前我对WCF学习相关的知识都系统的进行了整理。这个是文章目录:老徐的博客:文章目录  。
       还有一点就是,很多人对WCF学习感兴趣,当初我也是,直接奔WCF而来,其实在后来的学习中感觉吃力,因为WCF宣称的很多特性和优势,我们无法理解,更无法体会。文中提到了很多微软的早期技术如果都没有接触过,这些对比我们就无法有深刻的体会。
      
       建议先从基础开始,然后在关注一些WCF较高级的应用或者概念,循序渐进。网上也有很多WCF学习的资料,等有了一定基础以后可以看看付中凯大哥的讲座,这个需要一定的基础。


    Frank.Xu Lei--谦卑若愚,好学若饥
    专注于.NET平台下分布式应用系统开发和企业应用系统集成
    Focus on Distributed Applications Development and EAI based on .NET
    老徐的博客:http://frank_xl.cnblogs.com
    hehe
    Frank Xu Lei--谦卑若愚,好学若饥
    专注于.NET平台下分布式应用系统开发和企业应用系统集成
    Focus on Distributed Applications Development and EAI based on .NET
    欢迎访问老徐的博客:Welcome to My Technical Blog
    欢迎访问老徐的网站:Welcome to My Website
    欢迎访问微软WCF中文技术论坛:Welcome to Microsoft Chinese WCF Forum
    欢迎访问微软WCF英文技术论坛:Welcome to Microsoft English WCF Forum
    2010年5月12日 15:21
    版主
  • 那么WCF提供的服务怎么样以Web Service的方式提供呢?我们现在有个项目,用户要求这么做,不知道如何做才能达到目的呢?谢谢


    web service 要求是以 http 为传输协议,以 soap 为应用协议的 API 接口.

    WCF 作为一种开发 Web Service 的框架(当然,并不仅仅用于开发Web Service应用),默认采用Soap应用协议,通过配置basicHttpBinding,wsHttpBinding(支持WS.*)以提供对无安全和有安全保证的Web Servcie调用的支持.

    为了与非 Wcf 平台开发的服务端或客户端程序交互,必须注意以下几点:

    1,了解序列化后的 soap 消息格式,可以使用 Fillder 抓取 http 包,以查看 soap 消息内容,这在调试阶段非常利于你通过定制序列化行为以满足非 Wcf 平台开发的服务端或客户端程序所要求的 xml 结构;

    2,当要确保通讯安全时,始终使用传输层安全而非消息安全,传输安全将非常容易实现,而消息安全则非常复杂,wsHttpBinding的消息安全并不能保证和所有平台正常交互.

    3,了解你的服务宿主平台(IIS,Tomcat之类),诸如 expect100Continue 等与平台相关的 http 标头设置,将使你调用他人服务或提供服务给他人调用时产生"意想不到"的错误;这里错误无法从异常中获取到正确的提示,你必须分析正确的 http 数据包和错误的 http 数据包之间的差别以发现这些不同之处.所有,我额外的推荐你一个sopa工具:soapui,这个工具在生成客户端代理方面,有着比 wcftestclient 更好的兼容性.

    2010年5月13日 1:46