乐观 发表于 2015-1-18 11:26:55

ASP.NET网页编程之总结WCF中截获动静的几种体例仓酷云

如果需要重新编写代码,几乎任何一门计算机语言都可以跨平台了,还用得着net网页编程嘛,而且像PHP/C#等语言不需要修改代码都可以跨Windows/Linux。WCF是基于动静机制的,一些功效的完成如寻址,加密等在动静中城市表现的极尽描摹,WCF中的通道就像车间的流水线,而动静就作为这个流水线上待加工的产物。每经由一个处置地位,响应的通道城市抵消息对分歧的操纵处置。明晰的把握动静的加工历程对WCF的事情道理,调试跟踪,自界说扩大,功能平安都能十分好的实际意义。而要完成截获动静的目标,一般能够有以下几种举措:
1路由截获法
2自界说Binding法
3完成IMessageInspector接口法
4跟踪诊断法
四种办法,完成的难度和失掉的效果不尽不异。上面一一论述完成体例。
1路由截获法
此种办法,有能够分为两种
a)接纳现有tcp动静跟踪工具。
b)使用wcf中的路由功效做自界说的路由。
个中罕见的现成tcp动静跟踪工具,我所经常使用的是以下两个:
a)tcpTrace
b)soaptoolkit3.0中所带工具soaptraceutility
两款工具事情道理分歧,都以下图所示:

<br>
经由过程这两个工具截获Message的办法,良多伴侣们已纯熟利用。好比很早的时分Artech就在其blog文章中先容过tcpTrace的利用,文章为:[原创]我的WCF之旅(9):怎样在WCF中利用tcpTrace来举行SoapTrace。以是详细利用办法,我就不再赘述。只总结一点,在利用tcpTrace大概soaptraceutility的时分,listenport指定的是路由的监听地点,同时也应当是client端设置的via地点。而destinationport要设置的服务的监听地点。在下面的途中,listenport应当为8019,而Destinationport为8020
除利用现成的工具来做路由,WCF自己也撑持路由功效。完成道理和上图分歧。独一分歧的是两头的路由器能够由本人用WCF手艺编写。如许一来就更天真一些。做了一个十分复杂的demo,次要合用于request/reply的交互形式。
demo中有五个项目,他们分离为:
Jillzhang.Wcf.MessageInspectors.Contracts
Jillzhang.Wcf.MessageInspectors.Services
Jillzhang.Wcf.MessageInspectors.Host
Jillzhang.Wcf.MessageInspectors.Client
Jillzhang.Wcf.MessageInspectors.Rounter
后面四个是创立了一个十分复杂的WCF服务和客户端,构成了一个散布式体系。最关头的是Jillzhang.Wcf.MessageInspectors.Rounter这个项目,经由过程将ServiceContract的Action和ReplyAction设置为*,同时将其ServiceBehavior的AddressFilterMode设置为Any,就可以吸收到一切的动静,而不合错误动静的action大概动静体等举行任何选择。详细代码我不贴了,假如感乐趣能够下载demo示例代码。
好了,路由截获法的两种办法都以论述终了,那末此种办法有它的长处和弱点,它们分离是:
长处:
1)路由剖析法不必过量修正原客户端和服务真个代码,和本来架构的耦合度也对照低。
2)路由剖析法可以表现WCF中壮大的路由功效。
弱点:
路由剖析法弱点也十分明显:
1)它只能截获到已发送的哀求动静却不克不及截获响应的呼应。
2)路由法是在通信过程当中增添了节点,如许一来就没法利用高效的传输平安包管信息的平安性了。

2自界说Binding法
记得在上篇文章说说WCF中的可托赖会话中,已经谈到过Binding的构造布局。下面的形貌中,我们分歧夸大WCF是基于动静的通信体例,最主要观点的就是通道,再打一个例如,看上面一张食品消化历程图:

<br>
我们能够把动静看作成下面这幅图总的食品,而好比口腔,食道,胃,年夜肠,小肠,肛门等能够看作是对食品的举行加工的通道,他们各司其职,按次对食品举行处置。在WCF的通道(Channel)中,Channel也能对Message做林林总总的处置,好比加密,解密,编码,解码,刷选,删除,增添,修正等。我再画一张图来显现动静在通道中的处置历程:

<br>
动静会按次通道Binding中的每个BindingElement中的通道,如许我们能够完成一个自界说的Channel专门用于纪录Message.这即是在完成自界说Binding截获动静的实际根据和完成思绪。也经由过程实践编码完成了这类设法:
起首,先来懂得一下Channel的完成办法。在WCF中,Channel被构造到了System.ServiceModel.Channels的定名空间下。一切的Channel均要完成System.ServiceModel.Channels.IChannel接口。IChannel接口现实上只界说了Open,Close,Abort三各种范例的操纵,这些操纵都是基于Socket,因而每种操纵城市同步和异步的辨别。体系中还给出了上面几个经常使用的Channel接口界说:
1)IRequestChannel
在WCF中,只要完成了IRequestChannel的通道,才干成为哀求/复兴(Request/Reply)通信的哀求端。并且IRequestChannel界说了Request,这个操纵卖力将哀求动静Message发送进来,能在这个操纵中检察动静内容。别的增添了RemoteAddress和Via,分离用于暗示动静发送的远程地点和动静发送哀求的传输地点。
2)IReplyChannel
IReplyChannel和IRequestChannel绝对应,只要完成了IReplyChannel的通道才干作为Request/Reply的呼应端,而且增添了ReceiveRequest的操纵,这个操纵卖力吸收哀求,能购在这个操纵中检察动静内容。
3)IDuplexSessionChannel
这个通道界说了双工通道预会话联系关系,供应了Send,Receive的操纵,在这两个操纵中,都能检察动静内容。而且能够经由过程Session举行将IDuplexChannel与ISessionChannel举行联系关系。
其他的另有良多罕见Channel,好比IInputChannel,IOutputChannel,IDuplexChannel等,具体信息能够查阅msdn,不再赘述。但下面三个非常主要。下面两个IRequestChannel和IReplyChannel能够用在利用了HttpTransportBindingElement的Binding下面,而IDuplexSessionChannel能够用在利用了TcpTransportBindingElement的Binding下面。
经由过程Channel的可以检察动静的指定地位上log动静内容,然后完成自界说Binding,即可以完成截获动静的目标。
在完成的demo中,次要包括以下文件:
LogRequestChannel.cs:完成了IRequestChannel,用于哀求端
LogReplyChannel.cs完成了IReplyChannel,用于呼应方
LogDuplexSessionChannel.cs完成了IDuplexSessionChannel
LogChannelListerner.cs完成了IChanelListener,是服务端对通道的监听者
LogChannelFactory.cs完成了IChanelFactory,是客户端通道的办理者
LogHttpBinding.cs用于http体例的自界说的可以log动静的绑定
LogTcpBinding.cs用于tcp体例的自界说的可以log动静的绑定
检察一下最初的效果,接纳LogHttpBinding的时分的最终效果:
服务端:

<br>
客户端:

<br>
而接纳LogTcpBinding时分的最终效果:
服务端:

<br>
客户端:

<br>
从下面几幅图中,我们看出扩大Binding也能够截获到动静内容
那末这类办法有甚么优弱点呢?
长处是:
1)能截获到哀求和呼应两方面的动静
2)能了局到通道中失掉动静
3)截取地位十分天真
弱点是完成起来对照庞大
四种举措,先说这两种,上面两种留作下一篇吧,篇幅有些长,写着真累。
示例项目:http://files.cnblogs.com/jillzhang/Jillzhang.Wcf.MessageInspector.rar
本文出自:http://www.ckuyun.com/jillzhang/archive/2008/10/24/1319065.html
因为各系统的API不同,代码调用API编写程序就会遇到很多不兼容的地方,比如net网页编程改写后的Serv-U就不能在手机上执行,手机的游戏也不能直接在微机上执行。

第二个灵魂 发表于 2015-1-21 06:58:29

主流网站开发语言之JSP:JSP和Servlet要放在一起讲,是因为它们都是Sun公司的J2EE(Java2platformEnterpriseEdition)应用体系中的一部分。

简单生活 发表于 2015-1-30 10:18:19

主流网站开发语言之ASP:ASP是微软(Microsoft)所开发的一种后台脚本语言,它的语法和VisualBASIC类似,可以像SSI(ServerSideInclude)那样把后台脚本代码内嵌到HTML页面中。虽然ASP简单易用,但是它自身存在着许多缺陷,最重要的就是安全性问题。

蒙在股里 发表于 2015-2-2 17:17:06

可以通过在现有ASP应用程序中逐渐添加ASP.NET功能,随时增强ASP应用程序的功能。ASP.NET是一个已编译的、基于.NET的环境,可以用任何与.NET兼容的语言(包括VisualBasic.NET、C#和JScript.NET.)创作应用程序。另外,任何ASP.NET应用程序都可以使用整个.NETFramework。开发人员可以方便地获得这些技术的优点,其中包括托管的公共语言运行库环境、类型安全、继承等等。

深爱那片海 发表于 2015-2-4 01:04:07

CGI程序在运行的时候,首先是客户向服务器上的CGI程序发送一个请求,服务器接收到客户的请求后,就会打开一个新的Process(进程)来执行CGI程序,处理客户的请求。CGI程序最后将执行的结果(HTML页面代码)传回给客户。

分手快乐 发表于 2015-2-10 02:10:36

众所周知,Windows以易用而出名,也因此占据不少的服务器市场。

若相依 发表于 2015-2-23 13:23:16

弱类型造成潜在的出错可能:尽管弱数据类型的编程语言使用起来回方便一些,但相对于它所造成的出错几率是远远得不偿失的。

admin 发表于 2015-3-4 00:18:15

那么,ASP.Net有哪些改进呢?

活着的死人 发表于 2015-3-6 07:34:23

代码的可重用性差:由于是面向结构的编程方式,并且混合html,所以可能页面原型修改一点,整个程序都需要修改,更别提代码重用了。

不帅 发表于 2015-3-11 14:39:48

业务逻辑代码都不必做任何改动;继承性和多态性使得代码的可重用性大大提高,你可以通过继承已有的对象最大限度保护你以前的投资。并且C#和C++、Java一样提供了完善的调试/纠错体系。

谁可相欹 发表于 2015-3-18 19:46:43

我觉得什么语言,精通就好,你要做的就是比其他80%的人都厉害,你就能得到只有20%的人才能得到的高薪。

再见西城 发表于 2015-3-26 12:45:53

目前在微软的.net战略中新推出的ASP.net借鉴了Java技术的优点,使用CSharp(C#)语言作为ASP.net的推荐语言,同时改进了以前ASP的安全性差等缺点。但是,使用ASP/ASP.net仍有一定的局限性,因为从某种角度来说它们只能在微软的WindowsNT/2000/XP+IIS的服务器平台上良好运行(虽然像ChilliSoft提供了在UNIX/Linux上运行ASP的解决方案.
页: [1]
查看完整版本: ASP.NET网页编程之总结WCF中截获动静的几种体例仓酷云