<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3c.org/TR/1999/REC-html401-19991224/loose.dtd">
<!-- saved from url=(0061)http://www.cnblogs.com/artech/archive/2008/07/08/1237902.html -->
<HTML xmlns="http://www.w3.org/1999/xhtml"><HEAD><TITLE>[原创]WCF后续之旅(1): WCF是如何通过Binding进行通信的 - Artech - 博客园</TITLE>
<META http-equiv=Content-Type content="text/html; charset=utf-8">
<META content=WCF,Binding,Channel,ChannelManager,ChannelListener,ChannelFactory
name=keywords>
<META
content="《我的WCF之旅》系列自开篇以来,得到了园子里很多朋友的厚爱,并荣登了博客园2007年度系列博文Top 10。由于工作原因,沉寂了几个月,今天开始WCF新的旅程。如果说《我的WCF之旅》主要是对WCF基本原理概括性介绍,而对于这个新的系列,我将和大家分享我对WCF的一些实现机制、设计原理的理解,以及我在实际的项目开发中的一些实践经验(比如在后续的一些文章中,我将介绍通过WCF Extension实现一些在真正的分布式项目开发中很有现实意义的功能)。"
name=description><LINK
href="[原创]WCF后续之旅(1) WCF是如何通过Binding进行通信的 - Artech - 博客园_files/common.css"
type=text/css rel=stylesheet><LINK id=MainCss
href="[原创]WCF后续之旅(1) WCF是如何通过Binding进行通信的 - Artech - 博客园_files/style.css"
type=text/css rel=stylesheet><LINK
href="[原创]WCF后续之旅(1) WCF是如何通过Binding进行通信的 - Artech - 博客园_files/common2.css"
type=text/css rel=stylesheet><LINK
href="[原创]WCF后续之旅(1) WCF是如何通过Binding进行通信的 - Artech - 博客园_files/customcss.css"
type=text/css rel=stylesheet><LINK title=RSS
href="http://www.cnblogs.com/artech/rss" type=application/rss+xml
rel=alternate><LINK title=RSD href="http://www.cnblogs.com/artech/rsd.xml"
type=application/rsd+xml rel=EditURI>
<SCRIPT src="[原创]WCF后续之旅(1) WCF是如何通过Binding进行通信的 - Artech - 博客园_files/jquery.js"
type=text/javascript></SCRIPT>
<SCRIPT src="[原创]WCF后续之旅(1) WCF是如何通过Binding进行通信的 - Artech - 博客园_files/common.js"
type=text/javascript></SCRIPT>
<SCRIPT
src="[原创]WCF后续之旅(1) WCF是如何通过Binding进行通信的 - Artech - 博客园_files/jquery.json-1.3.min.js"
type=text/javascript></SCRIPT>
<LINK href="[原创]WCF后续之旅(1) WCF是如何通过Binding进行通信的 - Artech - 博客园_files/shCore.css"
type=text/css rel=stylesheet><LINK
href="[原创]WCF后续之旅(1) WCF是如何通过Binding进行通信的 - Artech - 博客园_files/shThemeDefault.css"
type=text/css rel=stylesheet>
<META content="MSHTML 6.00.3790.3091" name=GENERATOR></HEAD>
<BODY>
<FORM id=Form1 name=Form1 action=1237902.html method=post>
<DIV><INPUT id=__EVENTTARGET type=hidden name=__EVENTTARGET> <INPUT
id=__EVENTARGUMENT type=hidden name=__EVENTARGUMENT> <INPUT
id=" __VIEWSTATE" type=hidden name=__VIEWSTATE> </DIV>
<SCRIPT type=text/javascript>
//<![CDATA[
var theForm = document.forms['Form1'];
if (!theForm) {
theForm = document.Form1;
}
function __doPostBack(eventTarget, eventArgument) {
if (!theForm.onsubmit || (theForm.onsubmit() != false)) {
theForm.__EVENTTARGET.value = eventTarget;
theForm.__EVENTARGUMENT.value = eventArgument;
theForm.submit();
}
}
//]]>
</SCRIPT>
<!--done-->
<DIV id=home>
<DIV id=header>
<DIV id=blogTitle><A id=lnkBlogLogo href="http://www.cnblogs.com/artech/"><IMG
id=blogLogo alt=返回主页
src="[原创]WCF后续之旅(1) WCF是如何通过Binding进行通信的 - Artech - 博客园_files/logo.gif"></A> <!--done-->
<H1><A class=headermaintitle id=Header1_HeaderTitle
href="http://www.cnblogs.com/artech/">Artech</A></H1>
<H2>Develop every application as an art using the most suitable
technologies!</H2></DIV><!--end: blogTitle 博客的标题和副标题 -->
<DIV id=navigator><!--done-->
<UL id=navList>
<LI><A class=menu id=MyLinks1_HomeLink href="http://www.cnblogs.com/">博客园</A>
</LI>
<LI><A class=menu id=MyLinks1_SpaceLink
href="http://space.cnblogs.com/">社区</A> </LI>
<LI><A class=menu id=MyLinks1_MyHomeLink
href="http://www.cnblogs.com/artech/">首页</A> </LI>
<LI><A class=menu id=MyLinks1_NewPostLink
href="http://www.cnblogs.com/artech/admin/EditPosts.aspx?opt=1">新随笔</A> </LI>
<LI><A class=menu id=MyLinks1_ContactLink accessKey=9
href="http://www.cnblogs.com/artech/contact.aspx?id=1">联系</A> </LI>
<LI><A class=menu id=MyLinks1_Admin
href="http://www.cnblogs.com/artech/admin/EditPosts.aspx">管理</A> </LI>
<LI><A class=menu id=MyLinks1_Syndication
href="http://www.cnblogs.com/artech/rss">订阅</A> <A class=aHeaderXML
id=MyLinks1_XMLLink href="http://www.cnblogs.com/artech/rss"><IMG
style="BORDER-TOP-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-RIGHT-WIDTH: 0px"
alt=订阅
src="[原创]WCF后续之旅(1) WCF是如何通过Binding进行通信的 - Artech - 博客园_files/rss.gif"></A>
</LI></UL>
<DIV class=blogStats><!--done-->随笔- 149 文章- 2 评论- 3505 </DIV><!--end: blogStats --></DIV><!--end: navigator 博客导航栏 --></DIV><!--end: header 头部 -->
<DIV id=main>
<DIV id=mainContent>
<DIV class=forFlow><!--done-->
<DIV id=topics>
<DIV class=post>
<H1 class=postTitle><A class=postTitle2 id=ctl04_TitleUrl
href="http://www.cnblogs.com/artech/archive/2008/07/08/1237902.html">[原创]WCF后续之旅(1):
WCF是如何通过Binding进行通信的</A> </H1>
<DIV class=clear></DIV>
<DIV class=postBody>
<P><FONT size=2><A
href="http://www.cnblogs.com/artech/archive/2007/09/15/893838.html"><FONT
size=2>《我的WCF之旅》</FONT></A>系列自开篇以来,得到了园子里很多朋友的厚爱,并荣登了博客园2007年度系列博文Top
10。由于工作原因,沉寂了几个月,今天开始WCF新的旅程。如果说《我的WCF之旅》主要是对WCF基本原理概括性介绍,而对于这个新的系列,我将和大家分享我对WCF的一些实现机制、设计原理的理解,以及我在实际的项目开发中的一些实践经验(比如在后续的一些文章中,我将介绍通过WCF
Extension实现一些在真正的分布式项目开发中很有现实意义的功能)。</FONT></P>
<P><FONT size=2>Windows Communication
Foundation,顾名思义,就是一个在Windows平台下进行如何进行Communication的基础构造(Infrastructure)。由于WCF的核心还是Communication,这个新的系列就先来讨论WCF如何进行Communication的。通过本篇文章,你将对WCF的通信机制有一个总体的认识,了解到一些和通信相关的概念,
比如:<STRONG>Communication</STRONG>、<STRONG>Channel</STRONG>、<STRONG>Channel
Listener</STRONG>、<STRONG>Channel
Factory</STRONG>、<STRONG>BindingElement,Channel
Shape</STRONG>等等。</FONT></P>
<P><FONT size=2>我们已经很清楚了,WCF的通信是通过Endpoint来完成的:Service Provider将WCF
service通过Endpoint暴露出来供Service consumer调用,而Service
consumer通过与之相匹配的Endpoint来调用service。"<STRONG>Endpoint=ABC</STRONG>”,大家一定也牢记于心。就Endpoint包含的这3个元素而言,Address解决了寻址的问题,代表如何定位和标识对应的Endpoint,而Contract在对Service提供的功能、操作(Service
Contract)以及数据(Data contract、Message contract和Fault
contract)的抽象表示。而真正实现了通信功能的则是<STRONG>Binding</STRONG>。</FONT></P>
<P><STRONG><FONT size=2>1、Binding实现了所有的通信细节</FONT></STRONG></P>
<P><FONT size=2>总体上讲, WCF主要有两个层次构成:<STRONG>Channel
Layer</