`
gstarwd
  • 浏览: 1525415 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

轻松掌握WCF之专家聊天实录(张逸、赵劼)

阅读更多

【51CTO.com独家特稿】3月24日下午2:00到3:00,51CTO以及华章公司共同邀请张逸和赵劼两位老师,就“轻松掌握WCF 帮你找到入门砖”这一主题进行现场讨论,并回答网友在工作和学习中的难题。下面是本次嘉宾访谈的对话实录:

开场白

主持人: 现在两位老师已经来到了我们的聊天室,先给大家打个招呼!同时,也给大家先简单做下自我介绍吧!
张逸: 大家好!
张逸: 我是《WCF服务编程》的译者,对WCF有一定的经验,也曾利用WCF开发过一些项目,希望这次交流能够对大家学习WCF有一定的帮助。
赵劼: 大家好!我是个开发人员。平时对于.NET开发相关方面有比较大的兴趣,也投入了不少。主要“功绩”就在于写了一些技术文章。WCF目前已经是微软分布式通信的“事实标准”(已经有这个倾向了),对于这方面有需求的朋友了解一下WCF还是很重要的。

WCF简介

张逸:我先解释一下WCF是什么?
张逸: 严 格的说,WCF就是专门用于服务定制、发布与运行以及消息传递和处理的一组专门类的集合,也就是所谓的“类库”。这些类通过一定方式被组织起来,共同协 作,并为开发者提供了一个统一的编程模式。WCF之所以特殊,是在于它所应对的场景与普通的.NET类库不同,它主要用于处理进程间乃至于机器之间消息的 传递与处理,同时它引入了SOA的设计思想,以服务的方式公布并运行,以方便客户端跨进程和机器对服务进行调用。实际上,WCF就是微软对于分布式处理的 编程技术的集大成者,它将DCOM、Remoting、Web Service、WSE、MSMQ集成在一起,从而降低了分布式系统开发者的学习曲线,并统一了开发标准。

主持人:您接触WCF有多长时间了呢?

张逸: 应该说,我从WCF的前身indigo开始,就对其产生了极大的兴趣,毕竟我最初使用.NET Remotin开发了一些项目,对分布式开发比较热衷于了解。
张逸: 从 WCF所处的位置来看,它是包含在.NET 3.0(也包括.NET 3.5)之中的。我们注意比较.NET 3.0与.NET 2.0,其实唯一的区别就是.NET 3.0包含了WCF、WPF、WF(或者还有CardSpace)而已。因此,我们认为WCF是.NET框架的一部分,似乎并不为过。尤为关键的 是,WCF并不能脱离.NET框架而单独存在(但非WCF客户端可以调用WCF服务),因此,虽然WCF是微软用以应对SOA解决方案的开发需求而专门推 出的,但它并不是例如Spring、Struts那样的框架,也不是像EJB那样的容器或者服务器。微软真正符合SOA企业应用服务器角色的,我想应该是 Biztalk Server。

现场问题解答

1、网友提问:学习WCF需要什么知识背景吗?
张逸:
学习WCF并不难,其实掌握.NET的基本知识就可以入手WCF了。当然,如果多了解有关分布式开发和SOA的相关知识,会比较容易理解其中的一些概念。

2、 网友提问:我在xbap里想调用WCF,用的是TCP/IP协议,但是权限被沙箱锁了,有什么办法可以实现调用WCF服务!?xbap的部署是部署到 IIS里的!!我在xbap里想调用WCF,用的是TCP/IP协议,但是权限被沙箱锁了,有什么办法可以实现调用WCF服务!?xbap的部署是部署到 IIS里的!!

赵劼: 关于XBAP的权限问题,这个和AJAX一样,因为要保证性能问题,因此运行在一个Security Sandbox。解决方法也和AJAX一样,用服务器端作代理即可。
赵劼: 解决XBAP的砂箱限制的方法,就是使用服务器端作为代理来访问WCF服务。
张逸: 同意老赵的观点。微软的技术都是如此,应用简单,深入则困难。因为微软的设计师们有一套化繁为简的本事。但若要理解如何化繁为简的,就需要你深入研究了。
赵劼: 简单的说,就是让您的XBAP程序请求您自己的某个资源(比如某个HttpHandler或WCF service),然后您的后台程序接收到请求后,再去请求您的目标服务,然后您的后台程序把结果返回给XBAP。

3、网友提问:为什么要用WCF,我初学,WCF有什么好处?

赵劼: WCF目前已经是微软分布式通信的“事实标准”(已经有这个倾向了),对于这方面有需求的朋友了解一下WCF还是很重要的。
张逸: 简单说,WCF就是将你提到的所有这些与服务相关、与分布式开发相关的微软技术集成在一起了。你用WCF可以解决以前需要多种技术才能实现的问题。
赵劼: 如果您的工作需要(也就是需要在.NET平台下使用分布式通信),自然学习WCF是不二的选择。
张逸: 如果你不打算开发企业应用程序,并且不会碰到互操作性的问题,同时不考虑可扩展性的要求,以及解决企业系统之间信息孤岛的问题,我觉得自然不必学习WCF。反过来说,上述的这些场景正是WCF的用武之地。

4、网友提问:弱弱地问:WCF程序编写起来容易吗?需要掌握什么样的基础?

张逸: 编写WCF程序非常容易,如果你只是WCF的应用者,只需要掌握一些WCF特有的attribute就可以了。

主持人:可以举例说明吗?

张逸: 例如[ServiceContract]、[DataContract]等。因为WCF的编程模式与传统的编程模式区别不大。这也是微软的一个良苦用心(也可以说是险恶用心:-)),这样就降低了学习者的技术门槛。
张逸: WCF的服务编程自然还是基于Windows平台的。
赵劼: 当然,这是微软技术的一贯特点,使用简单。但是如果要深入的话,还是要投入不少精力的。.NET 3.0中的部件是用于处理企业级需求的,由于业务各不相同,灵活多变,因此WCF的高级部分必然也会引入相当的复杂度和灵活度。

5、网友提问:WCF里的remoting的性能比.net 2.0的remoting的性能好要很多吗?

张逸: 不知老赵有没有对性能进行过测试,坦白说,我没有对.NET Remoting和WCF进行性能的比对,这个问题不能贸然回答,呵呵!
赵劼: 我没有做过系统的性能测试,但是微软官方曾经发布过一篇白皮书,表示在同样(或类似)的协议下,WCF的性能普遍优于.NET之前的分布式通信解决方案。我相信NetTcpBinding性能优于.net Remoting。

6、网友提问:可否举一个现实中的例子来说明什么样的需求,使用WCF解决更好?

赵劼: 关于“什么样的需求,使用WCF解决更好”,感觉不是很好回答。
其实WCF其实也已经逐渐成为.NET下分布式通信的标准技术了。如果您有这方面需求自然需要学习。例如:对外释放Web Service。系统应用服务器对外交互,系统中基于MSMQ的异步操作,等等。

7、网友提问:可否给出编程中通用的事例Hello来进行讲解?

张逸: 其实,cool所说的例子,网上有很多。用WCF编写hello,很简单:

using System.ServiceModel; [ServiceContract] public interface IHello { [OperationContract] void SayHello(string msg); } public class Hello:IHello { public void SayHello(string msg) { Console.WriteLine(msg); } }

张逸: 呵呵!上述例子中除了几个Attribute之外,和普通编程没有太大区别。唯一不同的是,当我们开发了这个服务之后,还需要Host。

8、网友提问:请两位老师简单地说一下,您们认为WCF最大的优势在哪?

赵劼: 个 人认为WCF的最大优势在于统一和简化了分布式技术的运用。以前使用不同的分布式技术,写法大相径庭。而现在,往往只需要进行Attribute标记,再 加上配置就可以实现不同技术下的分布式通信了。这样让程序员把更多精力可以放在业务相关的逻辑上,而不会拘泥于技术实现本身。

9、网友提问:WCF最大的优点是不是就是在接口不变的情况下,可以修改通信方式?如果我暂时没有这样的需求是不是可以先不考虑使用WCF?换句话说,从remoting到WCF切换有什么风险?

赵劼: 从Remoting到WCF切换的风险主要还是在于工程上,而不是技术上。一般说来,Remoting能够实现的功能WCF都能够胜任,但是此类“移植”的工作也有很多与技术无关的问题,比如耗费的成本,移植后所带来的风险等等。
张逸: 如果仅局限于在局域网中的话,如果已经用Remoting开发了一个很稳定的系统,我并不建议草率地将其升级为WCF。

10、 主持人:利用WCF,不同系统之间可以进行通信,同时,层与层之间也可以基于WCF来进行通信。对于UI层与BLL层之间的通信,如果是基于WPF或 WinForm的C/S架构,那么基于WCF是非常方便的,但是如果是B/S的架构,ASP.NET页面与业务逻辑层可能部署在同一个IIS中,以前可以 直接基于API来调用业务逻辑层,现在有无必要也基于WCF来实现?

赵劼: “分布式 应用的第一条准则就是不分布式”,分布式通信相对于进程间通信的确会带来较为明显的性能降低,像您说的情况,比如ASP.NET的Web层和业务逻辑,很 可能就不应该使用WCF来通信。事实上,如果用Java一脉的技术来说,以前EJB远程访问横行,但是现在的互联网应用几乎都不太适用EJB了,而是使用 Struct、Spring等轻量级框架,因为远程通信代价很高。
张逸: 选择某种技术,首先要看其具体应用的 场景和需求,而不是觉得这门技术好或者新就选用。对于B/S系统而言,如果需求没有要求其他系统采用服务的方式调用该B/S系统,那就没有必要采用WCF 技术。最合理的方式是,在B/S系统中,专门设计一个服务层,体现所谓面向服务的特点,这个服务层中的服务相对粒度较粗一点,而且应该是其他系统可能会调 用的。我们可以事先考虑到这一层的设计。它并不一定是B/S系统内部调用,而是考虑未来的扩展。

11、网友提问:我还有一 个问题,我觉得WCF还是没有一个明显的应用服务器。如果部署在iis的,那其实就是web service了吧!不知道WCF是否会有一个真正的应用服务器,就好像com+和ejb的应用服务器那样,提供完整的组件管理,调度,负载均衡等功能。

张逸: 其 实BizTalk就是很好的一个应用服务器。当然,我们也可以利用WCF开发一个轻量级的应用服务器。网上有这方面的文章。 赵劼:当然,万事不能一概而论,对于一些企业应用,或者大规模的系统集成,很可能也是需要使用WCF将业务逻辑进行释放。这也就是为什么互联网应用大都不 需要单独的应用服务器,而企业应用很多都会有独立的应用层。

12、网友提问:WCF程序现在的稳定程度如何?可以大规模在企业开发中应用吗?

张逸: 目前WCF已经得到足够的发展,稳定性方面完全能够适用于企业开发。唯一美中不足的是,对于Internet场景,利用HttpBinding传输的方式,在性能上还存在一定的局限性。

13、网友提问:WCF有哪些扩展点?比如我自定义transfer sink,自己在传输链路中加入安全机制等?

赵劼: WCF提供了很灵活也很复杂的扩展。我没有理解您的意思,如果您只是说实现自己的安全机制,这个自然可以。但是如果您是指在TCP/IP协议级别(或类似的通信级别)的扩展,那么很明显WCF就无能为力了。

14、网友提问:WCF支持一个接口暴露成RSET服务吗?

赵劼: 在.NET 3.5中提供了WCF HTTP Service,专为释放RESTful接口而设计。
张逸: 目前WCF支持对绑定和行为的扩展。建议你阅读一下MSDN中Aaron Skonnard的文章,他对于这些内容已经做了很好的介绍。另外,WCF 3.5支持REST服务。您可以看看这篇文章:http://msdn.microsoft.com/msdnmag/issues/07/12/ServiceStation/Default.aspx?loc=zh

15、网友提问:有人说WCF是Vista的组成部分,确实是这样吗?它们之间有什么关系?

赵劼: Vista包含了WCF,但是WCF是个可以独立于Vista的组件,例如您也可以在Server 2003中安装使用。

16、网友提问:Ajax调用WCF,会不会加重服务器的承受能力?

赵劼: WCF本身不会对服务器增大压力,带来压力的一般都是业务本身。也就是说,WCF很难成为性能瓶颈。不会因为AJAX调用WCF而造成性能问题。

17、网友提问:Remoting有一种工厂方式的创建边界对象的方法使用还很广泛,WCF中好像没找到对应的方式。WCF里有Duplex消息交换模式,但还是不能解决remoting客户端从一个简单接口批量获取一群边界对象的问题,至少不能完全代替。
张逸: 不明白您所指,是否是说Remoting中采用Marshal方式创建对象呢?
张逸: 边界对象是说BoundObject?
网友提问: 就是说能调用远程方法的对象。就是说在服务端声明一个Marshalbyref的对象,然后用一个工厂方法去获取这个对象。当然这个工厂方法也要暴露为remoting接口,这样客户端就可以是用这个工厂方法一下获取好多远程对象来使用。
张逸: 我认为WCF包含的三种实例模式,完全涵盖了过去Remoting的三种激活模式。
张逸: 现在WCF对于客户端的增强,不仅仅体现在Deplex上,而且WCF对回调方法的强有力支持,已经加强了服务端与客户端的交互能力。
张逸: 我明白了您的问题了,这个问题我以前在学习Remoting的时候,提出过。实际上,现在利用WCF的ChannelFactory就能够实现这一目标。在《WCF服务编程》中也将其分为管理方式与编程方式两种。

18、网友提问:WCF如何使用linq to sql实现企业级应用!?

赵劼: LINQ to SQL和WCF其实没有必然联系,一个是数据访问技术,一个是分布式通信技术,可以随意搭配使用。当然,可能也有一点需要注意的地方,那就是LINQ to SQL的一些类型比如EntitySet,是不能被WCF序列化的,传输的时候转换成其他数据类型。
赵劼: AJAX调用WCF本身不会造成性能问题,性能问题往往是由程序开发引起的。WCF和AJAX本身都是很纯粹的技术,合理运用不会有任何问题

分享到:
评论

相关推荐

    WCF实现聊天通信程序

    **正文** WCF(Windows Communication Foundation)是微软.NET框架中的一种高级通信技术,它为构建分布式应用程序提供了全面的...掌握WCF不仅有助于提升.NET开发技能,还能够帮助你理解和实现跨平台、高安全性的服务。

    WCF 双工 实现聊天

    WCF 双工 实现聊天 注意要点,委托链, 静态变量 basehttp地址和tcp ip协议结合 VS2010

    基于WCF双工简单聊天

    **基于WCF双工简单聊天**的实现是一个高级的网络通信技术应用,它结合了Windows Communication Foundation (WCF) 的特性,提供了双向通信的能力,使得客户端和服务端可以同时进行消息的发送与接收,实现了类似即时...

    c#用wcf开发的仿QQ局域网聊天程序

    【标题】"c#用wcf开发的仿QQ局域网聊天程序" 是一个使用C#编程语言,基于Windows Communication Foundation (WCF) 技术实现的类似QQ的局域网聊天应用程序。WCF是微软.NET框架中的一种服务导向架构,用于构建分布式...

    WCF开发聊天工具

    **WCF开发聊天工具** Windows Communication Foundation (WCF) 是微软.NET Framework中的一种技术,用于构建可互操作的、安全的、可靠的服务。本项目利用WCF开发了一款聊天工具,旨在实现服务端与多个客户端之间的...

    WCF双工通讯聊天示例

    **WCF双工通讯聊天示例** Windows Communication Foundation(WCF)是微软.NET框架中用于构建分布式应用程序的服务模型。在WCF中,双工通信是一种高级的通信模式,它允许服务和客户端之间的双向通信,就像两个可以...

    WCF实现的聊天程序

    在这个“WCF实现的聊天程序”中,我们将探讨如何利用WCF技术来构建一个实时的聊天应用程序。 ### 一、WCF基础概念 1. **服务契约(Service Contract)**:定义服务提供的操作,即服务能做什么。在C#代码中,这通常...

    WCF & WPF 聊天程序源码

    WCF & WPF 聊天程序源码 For those that have read some of my other CodeProject articles you will probably know, that I am not shy about trying out new technologies. But one good thing about that is ...

    WCF聊天程序示例

    **WCF聊天程序示例详解** Windows Communication Foundation (WCF) 是微软.NET Framework中的一个核心组件,用于构建可互操作的、面向服务的应用程序。它为开发者提供了一种统一的编程模型,可以创建分布式系统中的...

    WCF 聊天代码,wcf Duplex

    本篇将深入讲解如何利用WCF Duplex实现一个简单的聊天功能。 首先,我们要理解WCF Duplex Contract的基本概念。在传统的WCF服务中,服务提供数据,客户端请求并接收数据。而在Duplex模式下,服务可以主动向客户端推...

    wcf+wpf 聊天室

    标题 "wcf+wpf 聊天室" 指的是一个利用Windows Communication Foundation (WCF) 和Windows Presentation Foundation (WPF) 技术构建的实时聊天应用程序。这个项目对于那些想要深入学习WCF服务和WPF界面设计的开发者...

    WCF 聊天室程序代码

    **WCF聊天室程序代码详解** Windows Communication Foundation (WCF) 是微软.NET Framework中的一个核心组件,用于构建可互操作的、面向服务的应用程序。在这个“WCF聊天室程序”中,我们将深入探讨如何利用WCF技术...

    WCF聊天工具,即时通信

    本文将深入探讨如何使用Windows Communication Foundation(WCF)技术来构建一个C#开发的即时通信聊天工具。WCF是.NET Framework的一部分,它为创建分布式应用程序提供了全面的服务模型,允许不同系统之间进行高效、...

    WCF + NetTcpBinding 聊天室应用程序

    **WCF(Windows Communication Foundation)**是微软推出的一种面向服务的通信框架,它提供了一种统一的方式...通过学习此示例,开发者可以深入理解如何构建基于WCF的实时通信应用,同时掌握服务端和客户端的实现细节。

    C# WCF 聊天

    通过深入研究并实践这个"C# WCF 聊天"项目,开发者不仅可以掌握C#编程语言,还能深入了解WCF的核心概念和技术,为构建自己的分布式应用程序打下坚实的基础。此外,该项目的源代码可以作为模板,帮助开发者快速搭建...

    WPF+WCF画板聊天程序

    【标题】"WPF+WCF画板聊天程序"是一个基于Windows Presentation Foundation (WPF) 和 Windows Communication Foundation (WCF) 的应用程序,它提供了一个实时的交互式画板和聊天功能,使得用户能够进行即时通讯。...

    WCF实现双工通讯聊天

    通过学习这个案例,你将掌握如何使用WCF实现双工通信,这对于开发实时应用,如聊天、股票交易系统等,非常有用。了解并实践这些概念将增强你的.NET开发技能,并为你的职业生涯增添亮点。 以上内容详细介绍了WCF双工...

    WCF实现聊天工具

    该工具为作者首次利用WCF实现网络通信,可以在同一局域网内实现异机通信,仅供参考,如有不足,请另寻贵资!

    WCF实现简单的文字聊天

    **WCF实现简单的文字聊天** Windows Communication Foundation (WCF) 是微软.NET框架中的一种服务导向架构,用于构建可互操作的分布式系统。本教程将基于WCF创建一个简单的文字聊天应用,适合初学者理解WCF的基本...

    用WCF实现绘图聊天

    用WCF实现绘图,同时可以聊天,通过web实现功能

Global site tag (gtag.js) - Google Analytics