【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本身都是很纯粹的技术,合理运用不会有任何问题
分享到:
相关推荐
知攻善防-应急响应靶机-web2.z18
知攻善防-应急响应靶机-web2.z09
白色简洁风格的影视众筹平台整站网站源码下载.zip
内容概要:本文详细解析了HTTP请求的整个流程,包括用户请求发起、请求报文构建、服务器处理请求、响应报文生成、网络传输响应和浏览器接收响应六个阶段。每个阶段的内容均涵盖了关键步骤和技术细节,如DNS解析、TCP连接、缓存策略、HTTP/2性能提升、HTTPS加密等。通过这些内容,读者可以全面理解HTTP请求的完整流程。 适合人群:具备一定网络基础知识的前端、后端开发人员及IT运维人员。 使用场景及目标:适用于希望深入了解HTTP协议及其优化技术的技术人员,有助于提升系统的性能和安全性,优化用户体验。 阅读建议:本文内容详尽且涉及多个关键技术点,建议读者结合实际案例进行学习,逐步理解和掌握各个阶段的技术细节和优化方法。
白色简洁风格的电话通讯公司模板下载.zip
白色简洁风格的日历当日事件提醒整站网站源码下载.zip
一键制作 歌曲伴奏! 可以消人声 吉他 鼓 等 多轨道声音。相当好用。
知攻善防-应急响应靶机-web2.z04
NSDocumentError如何解决.md
白色宽屏风格的大气冲浪运动整站网站模板.rar
白色简洁风格的婴儿用品商城网站模板.zip
罗兰贝格2023未来营养趋势报告21页
预览地址:https://blog.csdn.net/qq_42431718/article/details/144749829 html+css 圣诞树代码html
1-100加减乘除出题生成器
白色简洁风格的网络实验室CSS模板.zip
白色简洁风格的企业产品展示整站网站源码下载.zip
内容概要:《etcd-metrics-latest.txt》文档记录了 etcd(一个分布式键值存储系统)的多个指标数据,包括但不限于集群版本、认证修订版、后端磁盘操作延时分布、租赁管理、键值操作统计、快照保存、网络通信、Go 运行时指标、gRPC 请求处理、操作系统资源使用以及进程资源使用等。这些指标提供了详细的性能监测数据,帮助运维人员和开发人员理解和优化 etcd 集群的运行状态。 适合人群:具有基础计算机科学知识的运维人员或开发人员,尤其是负责维护或开发基于 etcd 技术系统的专业人员。 使用场景及目标:主要用于监控 etcd 集群的健康状况,评估性能瓶颈,辅助故障排查,支持集群的持续优化和技术决策。 其他说明:文档中大量使用了指标和术语,建议读者对 etcd、Go 语言、gRPC 和操作系统基础知识有一定的了解,以便更好地解读文档中的数据。对于不熟悉这些技术的读者来说,可能需要额外查阅相关资料来辅助理解。
Java编写的计算器程序是一种基于Java编程语言实现的计算工具,常用于教学或个人项目中,以帮助用户执行基本的数学运算。在这个简单的计算器程序中,我们可能会遇到以下几个关键的Java知识点: 1. **基础语法与控制结构**:Java的基础语法包括变量声明、数据类型(如int、double等)、条件语句(if-else)和循环语句(for, while)。在计算器程序中,这些元素用于读取用户输入、判断操作类型以及重复执行某些计算过程。 2. **面向对象编程**:Java是一种面向对象的语言,因此计算器程序可能包含多个类,如Calculator类、Button类(模拟图形界面的按钮)和Display类(显示计算结果)。类之间可能存在继承关系,例如Button类可能继承自一个抽象的UIComponent类。 3. **输入/输出处理**:在命令行计算器中,Java的Scanner类用于获取用户输入,如数字和运算符。在图形用户界面(GUI)计算器中,可能使用事件监听器处理用户的点击事件,获取按钮上的文字信息。 4. **异常处理**:为了确保程序的健壮性,计算器可能包含异常处理代码,比如当
SystemExit.md
NavigationGuardError解决办法.md