艾伟:WCF从理论到实践(2):决战紫禁之巅

本系列文章导航

WCF从理论到实践(1):揭开神秘面纱

WCF从理论到实践(2):决战紫禁之巅

WCF从理论到实践(3):八号当铺之黑色契约

WCF从理论到实践(4):路在何方

WCF从理论到实践(5):Binding细解

WCF从理论到实践(6):WCF架构

WCF从理论到实践(7):消息交换模式

WCF从理论到实践(8):事件广播

WCF从理论到实践(9):实例模式和对象生命周期

WCF从理论到实践(10):异常处理

WCF从理论到实践(11)-异步

WCF从理论到实践(12):事务

WCF从理论到实践(13):事务投票

WCF从理论到实践(14):WCF解决方案模板

WCF从理论到实践(15):响应变化

WCF从理论到实践(16):操作重载(带视频+ppt+源码)

WCF从理论到实践(17):OO大背离(带视频+ppt+源码)


本文的出发点

通过阅读本文,能解决如下问题:

  1. WCF与以往的分布式技术有何区别?
  2. WCF 在安全性方面做了哪些改进?
  3. WCF在性能方面有那些改进?
  4. WCF开发模型和以往的其他分布式技术有何区别?

     

本文适合的读者

有过分布式开发和SOA相关实施经验的开发人员

 

WCF与以往的分布式技术有何区别?

在上篇文章 WCF从理论到实践一:揭开神秘面纱 中曾经阐述过WCF的前生今世,说的比较概括,本文详细的说明WCF和以往的分布式技术的区别,目的是让大家更详细的了解WcF的应用场合,为日后系统的架构作铺垫。首先先看下面这张对比表格

WCF与其他分布式技术对比表

 

Xml Web Service

.Net Remoting

Enterprice Service

WSE

MSMQ

WCF

跨平台

    

.Net与.Net通讯

 

   

分布式事务

  

  

安全可靠性

   

 

消息队列

    

上面的表格参考了Bruchzhang文章中的对比图,原文地址: http://www.cnblogs.com/wayfarer/archive/2006/04/05/367474.html

从表格中我们可以看出,WCF似乎等于前面几项技术之和,但事实并非如此,它既整合了原来的多项技术,而且拥有着自己得天独厚的优点,如下

:  
  1. 统一性(Integration)
  2. 互操作性
  3. 安全可靠(Secure and Reliable)
  4. 兼容性


WCF 在安全性方面做了哪些改进?

为了保证数据通讯的安全,WCF提供了三种保护措施:1)机密性(Confidentiality)2)完整性(Integrity) 3)可验证性(Authentication),这三种措施联合起来被称为CIA。并且这些措施在WCF中是默认支持的。机密性能保证传输的数据是经过加密的,不被非法监听(eavesdrop),而完整性利用数字签名技术防止数据在传输过程中被注入(injected)或篡改(tampered),而验证(Authentication)可以采用灵活的策略来处理达到的客户端请求,比如用户名密码验证,客户端证书验证等。为了显示WCF在安全性方面的特点和优点,我制作了演示程序:Security_Compare方案,这个方案主要通过对比wcf和xml web service的消息来表现wcf在安全方面的改进,工程清单如下:

ProjectName(项目名称)

Remark(备注)

Wcf

WCF的服务端程序,默认创建,功能未经修改

WcfClient

WCF程序的客户端,用于调用Wcf

WebService

Xml Web Service服务程序,完成功能和Wcf一样

WsClient

是Xml Web Service的客户端,用于调用WebService

为了跟踪Web Service和WCF的消息,我们还需要了解一下两个工具:

  1. Microsoft SOAP Toolkit Version 3 中的 Trace Utility
  2. tcpTrace

原来一直用Trace Utilty来跟踪xml web service的消息报文,非常好用,它能按包显示出Soap信息,看起来也非常方便。有关它的消息,请从http://www.microsoft.com/downloads/details.aspx?FamilyId=C943C0DD-CEEC-4088-9753-86F052EC8450&displaylang=en 上下载SOAP Toolkit 3.0,安装后,便出现了这个工具,在跟踪xml web service的消息报文的时候,这个工具很好用,但跟踪wcf的报文却不行,能截获到数据,但每个报文都是空的,可能也和wcf报文是经过加密的有关系吧, 搜索了一下,在artech的blog中发现这么一篇文章:[原创]我的WCF之旅(9):如何在WCF中使用tcpTrace来进行Soap Trace,解决了我不能跟踪wcf消息报文的难题,他也提到Trace Utilty不能跟踪wcf,同时建议大家使用tcpTrace,并且说明了使用方法,对tcpTrace不熟悉的同学可以到他的blog上学习,很实用,我在这里就不再赘述。

经过我的跟踪,我分别将Xml web Service的消息log到ws.txt中,将wcf的消息log到wcf.txt中,您可以从下面的本文相关文件下载中获取这两个文件,观察二者在消息上的不同。用于演示的示例解决方案您也在相关文件下载中获得。

 

WCF在性能方面有那些改进?

大家都知道,越复杂,结构层次越多的框架一般效率也越低,WCF是以往其他分布式技术的集成者,它结构相对复杂,且由于默认支持安全传输,在性能上应该不如Xml Web Service技术,更不用和.Net Remoting等比较,这是一个有框架设计经验和架构师们都明白的简单道理,但是事实怎么样呢?wcf比xml web service性能到底是高还是底,低要低多少?这些问题很值得大家的研究和讨论,其实已经有人在此方面做了很详细的对比,msdn上便有一篇专门介绍此方面知识的文章: WCF Performance Comparison ,对wcf性能感兴趣的同学,可以到这文章中学习。很详尽。限于条件的限制,我这里只在我一台机器上作一个简单的对比,仅供参考。分别测试循环1000次对wcf和xml web service相同功能方法的调用,得到如下的数据:
 

 

WCF

Web Service

第一次

9523ms

7561ms

第二次

9480ms

7465ms

第三次

9508ms

7708ms

第四次

9487ms

7900ms

经过四次测试数据,我们可以得出,wcf的性能和xml web service相比的确要低,但差别不大,肯定在一个数量级之上。有关测试性能的解决方案Perfermence_Compare您能在相关文件下载中获得。

 

WCF开发模型和以往的其他分布式技术有何区别?

WCF不仅仅在功能上集成了以往的分布式开发技术,而且在编程模型中充分吸取原来技术的优点,如xml web service的声明性编程(declareable),和.net remoting中的配置(configuration)和wse中的安全策略声明性配置方法,这样wcf虽然功能强大,而且学习简单,便于推广。在vs2008中还集成了WCF Test Client,开发服务的时候,甚至不需要再开发测试客户端就能用WCF Test Client来进行调用,简单之极,示例程序更是无需更改以行代码,便可以运行。

上面这些是说了wse编程的简单易学性,我总结出来,主要包括以下几种特性

  1. 基于声明性编程模型
  2. 充分利用配置来实现框架的灵活。
  3. 使用配置的同时,仍保留代码编程的模型,使得框架更加丰富,便于控制。
  4. 默认的CIA支持,极大地简化了安全控制

 

相关示例文件

  1. 安全对比示例解决方案Security_Compare: /Files/jillzhang/Security_Compare.rar
  2. 跟踪soap消息的工具tcpTrace: /Files/jillzhang/tcpTrace.rar
  3. 安全对比示例跟踪结果: /Files/jillzhang/wcf.txt  ,   /Files/jillzhang/ws.txt
  4. 性能测试解决方案Perfermence_Compare: /Files/jillzhang/Perfermence_Compare.rar

 

示例程序和本文对比测试的平台依据

windows xp sp2 + visual studio.net 2008 rtm

 

参考资料

  1. [原创]我的WCF之旅(9):如何在WCF中使用tcpTrace来进行Soap Trace
  2. WCF Performance Comparison 
  3. http://www.cnblogs.com/wayfarer/archive/2006/04/05/367474.html 

转载于:https://www.cnblogs.com/waw/archive/2011/08/29/2156926.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/548816.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

LeetCode——LCP 06.拿硬币

这个题简单到我觉得不用写思路&#xff0c;也没有啥坑。 class Solution {public int minCount(int[] coins) {int len coins.length;int count 0;for(int i0;i<len;i){countcoins[i]/2;if(coins[i]%20){continue;}else{count1;}}return count;} }

Linux 定时执行命令 crontab

语法介绍 使用权限 : root用户和crontab文件的所有者    crontab格式语法: crontab [-e [UserName]|-l [UserName]|-r [UserName]|-v [UserName]|File ]    说明 : crontab 是用来让使用者在固定时间或固定间隔执行程式之用&#xff0c;换句话说&#xff0c;也就是类似使用…

LeetCode——1710. 卡车上的最大单元数

力扣上提交的代码 class Solution {public int maximumUnits(int[][] boxTypes, int truckSize) {int res 0;//存储可以装载单元的最大总数//根据二维数组的第二列数据降序排列Arrays.sort(boxTypes,(o1, o2) -> o2[1]-o1[1]);for (int i 0; i<boxTypes.length &&…

黄聪:php中utf-8模板获取GB2312编码页面传递URL中文编码转换方法

$w中文参数; mb_convert_encoding($w, gb2312, utf-8)转载于:https://www.cnblogs.com/huangcong/archive/2011/09/03/2165339.html

狂神说JVM笔记

JVM探究 面试常见&#xff1a; 请你谈谈你对JVM的理解?java8虚拟机和之前的变化更新?什么是OOM&#xff0c;什么是栈溢出StackOverFlowError? 怎么分析?JVM的常用调优参数有哪些?内存快照如何抓取&#xff0c;怎么分析Dump文件&#xff1f;谈谈JVM中&#xff0c;类加载器…

敏捷开发与中医理论系列之二:古法教学(软件教育,松结对编程,师徒制度)...

由来 中国古代的很多技术或艺术&#xff0c;都是没有学校教授的&#xff0c;譬如中医&#xff0c;戏曲&#xff0c;民间艺术&#xff0c;食品&#xff0c;酿酒……但却不乏流传千古的名家和作品&#xff0c;唯一问题就是流传缓慢&#xff0c;传内不传外&#xff0c;传男不传女……

Xshell连接远程Linux服务器失败Could not connect to ‘192.xxx.xx.xxx‘ (port 22): Connection failed.

问题描述&#xff1a; 我将自己的一台Ubuntu系统笔记本作为服务器&#xff0c;然后使用另一台win10系统的Xshell去远程连接该服务器&#xff0c;始终不成功。 【备注】这个远程连接解决的是同一局域网中的远程&#xff0c;算不上真正的远程&#xff0c;在判断两者之间可否远程…

ajax 同步加载数据

var data $.ajax({url:"same.php",type:GET,async:false,cache:false}).responseText;主要是 async 参数

同局域网下的两台主机间互相ping不通是为什么

现象描述&#xff1a; 经过 ipconfig 命令&#xff08;Linux下 ifconfig 命令&#xff09;查询两台互相ping不通的主机的 ip 和网关&#xff0c;发现两台主机的路由网关都是192.168.0.1&#xff0c;但是他们之间互相ping不通&#xff0c;后面经过检查注意到&#xff0c;一台主…

HDU-3460 Ancient Printer 字典树

该题题意是求给定的字符串集用一个打字机来打出所有的字符串&#xff08;最后一个&#xff09;&#xff0c;顺序可以打乱&#xff0c;每次操作可以向打字机的末尾添加一个字符删除一个字符以及打印一个单词。这里有一个很强大的想法&#xff0c;那就是先假设每个单词都打印出来…

Linux下查看CPU个数(逻辑个数和物理个数)

CPU个数CPU颗数*CPU核数。 总逻辑CPU数 物理CPU个数 * 每颗物理CPU的核数 * 超线程数 //查询逻辑CPU总数 $ grep -c processor /proc/cpuinfo 4//查询物理CPU个数 $ cat /proc/cpuinfo| grep "physical id"| sort| uniq| wc -l 1//查询每颗物理CPU的核数 $ cat /pr…

【博客话题】坚持的背影--记我的入门老师

光阴似箭&#xff0c;一晃十年过去了&#xff0c;人生中又会有几个十年呢&#xff1f;只是记忆中那黑板前奋笔疾书坚持的背影依然那么清晰的出现在眼前&#xff0c;时时提醒我要学会坚持永不放弃。在第27个教师节即将来临之际&#xff0c;谨以此文敬献给我的恩师和所有在教育战…

XShell远程连接LInux服务器(地址端口映射方法)

所实现的功能&#xff1a; 这篇文章主要是记录我在非同一局域网下用win10系统的Xshell去连接Linux系统服务器。 环境&#xff1a;一台win10主机&#xff0c;已安装好Xshell7&#xff0c;局域网ip:192.168.0.132 一台Linux主机&#xff0c;将其作为远程服务器使用&#xff0c;…

如何评价个人在软件开发团队中的绩效

我认为一个有效评价手段应该达到以下目的&#xff1a; 1、 对团队&#xff1a;让整个团队进入愉快高效工作状态 2、 对“高手”&#xff1a;奖励干活多干活好的人 3、 对“低手”&#xff1a;从制度上杜绝磨洋工的现象 4、 对“中手”&#xff1a;提供工作认真但是水平有待…

IDEA部署Tomcat报错[RMI TCP Connection(6)-127.0.0.1]

> 严重 [RMI TCP Connection(6)-127.0.0.1] > org.apache.catalina.core.StandardContext.startInternal One or more Filters failed to start. Full details will be found in the appropriate container log file该错误出现的原因是Tomcat初始化失败。 一定一定要检查…

如何对SQL Server中的XML数据进行insert、update、delete .

SQL Server 2005/2008增加了对XML数据的支持&#xff0c;同时也新增了几种操作XML的方法&#xff0c;本文主要以SQL Server 2008为例介绍如何对XML数据进行insert、update、delete。 SQL Server中新增加了XML.Modify()方法&#xff0c;分别为xml.modify(insert),xml.modify(del…

maven仓库理解、下载及设置

1、对maven仓库的理解&#xff1a; 可以看萨姆大叔的maven知识整理 2、下载apach maven Download 或者复制地址&#xff1a;http://maven.apache.org/download.cgi 3、IDEA中maven的setting 第六步是本地资料库的目录设置&#xff0c;如果你解压出来的maven安装包没有reposit…

XenDesktop 5.5 – HDX RealTime TCP UDP Audio演示

我们可以看到&#xff0c;XenDesktop 5.5相比于XenDesktop 4以及5在低带宽与高延迟的情况下&#xff0c;对声音回放的支持效果要更好。 在1.5Mbps,140ms延迟的情况下的情形。而XenDesktop 5.5能够在600ms延迟&#xff0c;0.5%丢包的情况下&#xff0c;使用TCP交付的情况下&…

百万级PHP网站架构工具箱

在了解过世界最大的PHP站点&#xff0c;Facebook的后台技术后&#xff0c;今天我们来了解一个百万级PHP站点的网站架构&#xff1a;Poppen.de。Poppen.de是德国的一个社交网站&#xff0c;相对Facebook、Flickr来说是一个很小的网站&#xff0c;但它有一个很好的架构&#xff0…

Failed to load resource: the server responded with a status of 404 (Not Found)

现象描述&#xff1a; 从前端页面获取不到来自controller层的data数据&#xff0c;即前端页面和后台没有实现数据交互。 检查发现&#xff1a; 工程中的out目录下没有生成对应的.java文件&#xff0c;但是模块中的target中有 目录是空的&#xff01;&#xff01;&#xff…