﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>博客园-Technological achievements dream</title><link>http://www.cnblogs.com/Henllyee/</link><description>技术成就梦想</description><language>zh-cn</language><lastBuildDate>Sun, 06 Jul 2008 16:35:08 GMT</lastBuildDate><pubDate>Sun, 06 Jul 2008 16:35:08 GMT</pubDate><ttl>60</ttl><item><title>WCF学习(三)-------数据契约1</title><link>http://www.cnblogs.com/Henllyee/archive/2008/07/03/1234584.html</link><dc:creator>Henllyee Cui</dc:creator><author>Henllyee Cui</author><pubDate>Thu, 03 Jul 2008 03:00:00 GMT</pubDate><guid>http://www.cnblogs.com/Henllyee/archive/2008/07/03/1234584.html</guid><wfw:comment>http://www.cnblogs.com/Henllyee/comments/1234584.html</wfw:comment><comments>http://www.cnblogs.com/Henllyee/archive/2008/07/03/1234584.html#Feedback</comments><slash:comments>11</slash:comments><wfw:commentRss>http://www.cnblogs.com/Henllyee/comments/commentRss/1234584.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/Henllyee/services/trackbacks/1234584.html</trackback:ping><description><![CDATA[摘要: WCF能够托管CLR类型，客户端能传递和处理CLR类型的数据（如：string和int），但是如果我们自己定义的类型（如：声明的Customer类）。其实WCF的传递CLR自己类型时，是因为已经把它序列化成了xml信息集，而我们自己定义的类型则需要自己去显示的声明序列化。序列化.net的序列化。.net是通过反射机制（反射机制参考文档）自动实现对象的序列化与反序列化。首先.net能够捕获对象每个字&nbsp;&nbsp;<a href='http://www.cnblogs.com/Henllyee/archive/2008/07/03/1234584.html'>阅读全文</a><img src ="http://www.cnblogs.com/Henllyee/aggbug/1234584.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/37549/" target="_blank">[新闻]阿里巴巴确立未来十年战略规划 修改自身定位</a>]]></description></item><item><title>简单工厂</title><link>http://www.cnblogs.com/Henllyee/archive/2008/07/01/1233318.html</link><dc:creator>Henllyee Cui</dc:creator><author>Henllyee Cui</author><pubDate>Tue, 01 Jul 2008 08:16:00 GMT</pubDate><guid>http://www.cnblogs.com/Henllyee/archive/2008/07/01/1233318.html</guid><wfw:comment>http://www.cnblogs.com/Henllyee/comments/1233318.html</wfw:comment><comments>http://www.cnblogs.com/Henllyee/archive/2008/07/01/1233318.html#Feedback</comments><slash:comments>3</slash:comments><wfw:commentRss>http://www.cnblogs.com/Henllyee/comments/commentRss/1233318.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/Henllyee/services/trackbacks/1233318.html</trackback:ping><description><![CDATA[摘要: 简单的工厂我的理解就是根据具体的情况，返回一个类型的具体类。一般时简单的工厂由：工厂、抽象产品、具体产品组成：1.抽象产品：定义了具体产品公共的特性。可以是一个abstract calss 或者一个 interface；2.具体产品：定义了工厂Create出来的具体产品。一般是一个具体实现的类继承与抽象产品；3.工 厂：客户端调用，用来根据不同的情况产生不同的产品。看一个现实中的例子：在一般的软件&nbsp;&nbsp;<a href='http://www.cnblogs.com/Henllyee/archive/2008/07/01/1233318.html'>阅读全文</a><img src ="http://www.cnblogs.com/Henllyee/aggbug/1233318.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/37548/" target="_blank">[新闻]微软高管：Wii用户最终会成为Xbox 360用户</a>]]></description></item><item><title>C# 反射机制（转）</title><link>http://www.cnblogs.com/Henllyee/archive/2008/07/01/1233246.html</link><dc:creator>Henllyee Cui</dc:creator><author>Henllyee Cui</author><pubDate>Tue, 01 Jul 2008 07:33:00 GMT</pubDate><guid>http://www.cnblogs.com/Henllyee/archive/2008/07/01/1233246.html</guid><wfw:comment>http://www.cnblogs.com/Henllyee/comments/1233246.html</wfw:comment><comments>http://www.cnblogs.com/Henllyee/archive/2008/07/01/1233246.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnblogs.com/Henllyee/comments/commentRss/1233246.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/Henllyee/services/trackbacks/1233246.html</trackback:ping><description><![CDATA[<p align="left"><span class="Code"><font color="#000000">1、 什么是反射<br />
2、 命名空间与装配件的关系<br />
3、 运行期得到类型信息有什么用<br />
4、 如何使用反射获取类型<br />
5、 如何根据类型来动态创建对象<br />
6、 如何获取方法以及动态调用方法<br />
7、 动态创建委托</font></span></p>
<p>&nbsp;1、什么是反射<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Reflection，中文翻译为反射。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 这是.Net中获取运行时类型信息的方式，.Net的应用程序由几个部分：&#8216;程序集(Assembly)&#8217;、&#8216;模块(Module)&#8217;、&#8216;类型(class)&#8217;组成，而反射提供一种编程的方式，让程序员可以在程序运行期获得这几个组成部分的相关信息，例如：</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Assembly类可以获得正在运行的装配件信息，也可以动态的加载装配件，以及在装配件中查找类型信息，并创建该类型的实例。<br />
Type类可以获得对象的类型信息，此信息包含对象的所有要素：方法、构造器、属性等等，通过Type类可以得到这些要素的信息，并且调用之。<br />
MethodInfo包含方法的信息，通过这个类可以得到方法的名称、参数、返回值等，并且可以调用之。<br />
诸如此类，还有FieldInfo、EventInfo等等，这些类都包含在System.Reflection命名空间下。</p>
<p>2、命名空间与装配件的关系<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 很多人对这个概念可能还是很不清晰，对于合格的.Net程序员，有必要对这点进行澄清。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 命名空间类似与Java的包，但又不完全等同，因为Java的包必须按照目录结构来放置，命名空间则不需要。</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 装配件是.Net应用程序执行的最小单位，编译出来的.dll、.exe都是装配件。</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 装配件和命名空间的关系不是一一对应，也不互相包含，一个装配件里面可以有多个命名空间，一个命名空间也可以在多个装配件中存在，这样说可能有点模糊，举个例子：<br />
装配件A：<br />
namespace&nbsp;&nbsp; N1<br />
{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public&nbsp;&nbsp; class&nbsp;&nbsp; AC1&nbsp;&nbsp; {&#8230;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public&nbsp;&nbsp; class&nbsp;&nbsp; AC2&nbsp;&nbsp; {&#8230;}<br />
}<br />
namespace&nbsp;&nbsp; N2<br />
{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public&nbsp;&nbsp; class&nbsp;&nbsp; AC3&nbsp;&nbsp; {&#8230;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public&nbsp;&nbsp; class&nbsp;&nbsp; AC4{&#8230;}<br />
}<br />
装配件B：<br />
namespace&nbsp;&nbsp; N1<br />
{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public&nbsp;&nbsp; class&nbsp;&nbsp; BC1&nbsp;&nbsp; {&#8230;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public&nbsp;&nbsp; class&nbsp;&nbsp; BC2&nbsp;&nbsp; {&#8230;}<br />
}<br />
namespace&nbsp;&nbsp; N2<br />
{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public&nbsp;&nbsp; class&nbsp;&nbsp; BC3&nbsp;&nbsp; {&#8230;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public&nbsp;&nbsp; class&nbsp;&nbsp; BC4{&#8230;}<br />
}</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 这两个装配件中都有N1和N2两个命名空间，而且各声明了两个类，这样是完全可以的，然后我们在一个应用程序中引用装配件A，那么在这个应用程序中，我们能看到N1下面的类为AC1和AC2，N2下面的类为AC3和AC4。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 接着我们去掉对A的引用，加上对B的引用，那么我们在这个应用程序下能看到的N1下面的类变成了BC1和BC2，N2下面也一样。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 如果我们同时引用这两个装配件，那么N1下面我们就能看到四个类：AC1、AC2、BC1和BC2。</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 到这里，我们可以清楚一个概念了，命名空间只是说明一个类型是那个族的，比如有人是汉族、有人是回族；而装配件表明一个类型住在哪里，比如有人住在北京、有人住在上海；那么北京有汉族人，也有回族人，上海有汉族人，也有回族人，这是不矛盾的。</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 上面我们说了，装配件是一个类型居住的地方，那么在一个程序中要使用一个类，就必须告诉编译器这个类住在哪儿，编译器才能找到它，也就是说必须引用该装配件。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 那么如果在编写程序的时候，也许不确定这个类在哪里，仅仅只是知道它的名称，就不能使用了吗？答案是可以，这就是反射了，就是在程序运行的时候提供该类型的地址，而去找到它。<br />
有兴趣的话，接着往下看吧。</p>
<p>3、运行期得到类型信息有什么用<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 有人也许疑问，既然在开发时就能够写好代码，干嘛还放到运行期去做，不光繁琐，而且效率也受影响。<br />
这就是个见仁见智的问题了，就跟早绑定和晚绑定一样，应用到不同的场合。有的人反对晚绑定，理由是损耗效率，但是很多人在享受虚函数带来的好处的时侯还没有意识到他已经用上了晚绑定。这个问题说开去，不是三言两语能讲清楚的，所以就点到为止了。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 我的看法是，晚绑定能够带来很多设计上的便利，合适的使用能够大大提高程序的复用性和灵活性，但是任何东西都有两面性，使用的时侯，需要再三衡量。</p>
<p>接着说，运行期得到类型信息到底有什么用呢？<br />
还是举个例子来说明，很多软件开发者喜欢在自己的软件中留下一些接口，其他人可以编写一些插件来扩充软件的功能，比如我有一个媒体播放器，我希望以后可以很方便的扩展识别的格式，那么我声明一个接口：<br />
public&nbsp;&nbsp; interface&nbsp;&nbsp; IMediaFormat<br />
{<br />
string&nbsp;&nbsp; Extension&nbsp;&nbsp; {get;}<br />
Decoder&nbsp;&nbsp; GetDecoder();<br />
}<br />
这个接口中包含一个Extension属性，这个属性返回支持的扩展名，另一个方法返回一个解码器的对象（这里我假设了一个Decoder的类，这个类提供把文件流解码的功能，扩展插件可以派生之），通过解码器对象我就可以解释文件流。<br />
那么我规定所有的解码插件都必须派生一个解码器，并且实现这个接口，在GetDecoder方法中返回解码器对象，并且将其类型的名称配置到我的配置文件里面。<br />
这样的话，我就不需要在开发播放器的时侯知道将来扩展的格式的类型，只需要从配置文件中获取现在所有解码器的类型名称，而动态的创建媒体格式的对象，将其转换为IMediaFormat接口来使用。</p>
<p>这就是一个反射的典型应用。</p>
<p><br />
4、如何使用反射获取类型<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 首先我们来看如何获得类型信息。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 获得类型信息有两种方法，一种是得到实例对象<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 这个时侯我仅仅是得到这个实例对象，得到的方式也许是一个object的引用，也许是一个接口的引用，但是我并不知道它的确切类型，我需要了解，那么就可以通过调用System.Object上声明的方法GetType来获取实例对象的类型对象，比如在某个方法内，我需要判断传递进来的参数是否实现了某个接口，如果实现了，则调用该接口的一个方法：<br />
&#8230;<br />
public&nbsp;&nbsp; void&nbsp;&nbsp; Process(&nbsp;&nbsp; object&nbsp;&nbsp; processObj&nbsp;&nbsp; )<br />
{<br />
Type&nbsp;&nbsp; t&nbsp;&nbsp; =&nbsp;&nbsp; processsObj.GetType();<br />
if(&nbsp;&nbsp; t.GetInterface(&#8220;ITest&#8221;)&nbsp;&nbsp; !=null&nbsp;&nbsp; )<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &#8230;<br />
}<br />
&#8230;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 另外一种获取类型的方法是通过Type.GetType以及Assembly.GetType方法，如：<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Type&nbsp;&nbsp; t&nbsp;&nbsp; =&nbsp;&nbsp; Type.GetType(&#8220;System.String&#8221;);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 需要注意的是，前面我们讲到了命名空间和装配件的关系，要查找一个类，必须指定它所在的装配件，或者在已经获得的Assembly实例上面调用GetType。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 本装配件中类型可以只写类型名称，另一个例外是mscorlib.dll，这个装配件中声明的类型也可以省略装配件名称（.Net装配件编译的时候，默认都引用了mscorlib.dll，除非在编译的时候明确指定不引用它），比如：<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.String是在mscorlib.dll中声明的，上面的Type&nbsp;&nbsp; t&nbsp;&nbsp; =&nbsp;&nbsp; Type.GetType(&#8220;System.String&#8221;)是正确的<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.Data.DataTable是在System.Data.dll中声明的，那么：<br />
Type.GetType(&#8220;System.Data.DataTable&#8221;)就只能得到空引用。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 必须：<br />
Type&nbsp;&nbsp; t&nbsp;&nbsp; =&nbsp;&nbsp; Type.GetType("System.Data.DataTable,System.Data,Version=1.0.3300.0,&nbsp;&nbsp; Culture=neutral,&nbsp;&nbsp; PublicKeyToken=b77a5c561934e089");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 这样才可以，大家可以看下面这个帖子：<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <a href="http://expert.csdn.net/Expert/topic/2210/2210762.xml?temp=.1919977">http://expert.csdn.net/Expert/topic/2210/2210762.xml?temp=.1919977</a><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; qqchen的回答很精彩</p>
<p><br />
5、如何根据类型来动态创建对象<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.Activator提供了方法来根据类型动态创建对象，比如创建一个DataTable：</p>
<p>Type&nbsp;&nbsp; t&nbsp;&nbsp; =&nbsp;&nbsp; Type.GetType("System.Data.DataTable,System.Data,Version=1.0.3300.0,&nbsp;&nbsp; Culture=neutral,&nbsp;&nbsp; PublicKeyToken=b77a5c561934e089");</p>
<p>DataTable&nbsp;&nbsp; table&nbsp;&nbsp; =&nbsp;&nbsp; (DataTable)Activator.CreateInstance(t);</p>
<p>&nbsp;&nbsp;&nbsp; 例二：根据有参数的构造器创建对象<br />
namespace&nbsp;&nbsp; TestSpace&nbsp; <br />
&nbsp;{<br />
&nbsp; public&nbsp;&nbsp; class&nbsp;&nbsp; TestClass<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; private&nbsp;&nbsp; string&nbsp;&nbsp; _value;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public&nbsp;&nbsp; TestClass(string&nbsp;&nbsp; value)&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; _value=value;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp; }<br />
}<br />
&#8230;<br />
Type&nbsp;&nbsp; t&nbsp;&nbsp; =&nbsp;&nbsp; Type.GetType(&#8220;TestSpace.TestClass&#8221;);<br />
Object[]&nbsp;&nbsp; constructParms&nbsp;&nbsp; =&nbsp;&nbsp; new&nbsp;&nbsp; object[]&nbsp;&nbsp; {&#8220;hello&#8221;};&nbsp;&nbsp; //构造器参数<br />
TestClass&nbsp;&nbsp; obj&nbsp;&nbsp; =&nbsp;&nbsp; (TestClass)Activator.CreateInstance(t,constructParms);<br />
&#8230;<br />
把参数按照顺序放入一个Object数组中即可</p>
<p><br />
6、如何获取方法以及动态调用方法<br />
namespace&nbsp;&nbsp; TestSpace<br />
{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public&nbsp;&nbsp; class&nbsp;&nbsp; TestClass&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; private&nbsp;&nbsp; string&nbsp;&nbsp; _value;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public&nbsp;&nbsp; TestClass()&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public&nbsp;&nbsp; TestClass(string&nbsp;&nbsp; value)&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; _value&nbsp;&nbsp; =&nbsp;&nbsp; value;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public&nbsp;&nbsp; string&nbsp;&nbsp; GetValue(&nbsp;&nbsp; string&nbsp;&nbsp; prefix&nbsp;&nbsp; )&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(&nbsp;&nbsp; _value==null&nbsp;&nbsp; )<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return&nbsp;&nbsp; "NULL";<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; else<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return&nbsp;&nbsp; prefix+"&nbsp;&nbsp; :&nbsp;&nbsp; "+_value;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public&nbsp;&nbsp; string&nbsp;&nbsp; Value&nbsp;&nbsp; {<br />
set&nbsp;&nbsp; {<br />
_value=value;<br />
}<br />
get&nbsp;&nbsp; {<br />
if(&nbsp;&nbsp; _value==null&nbsp;&nbsp; )<br />
return&nbsp;&nbsp; "NULL";<br />
else<br />
return&nbsp;&nbsp; _value;<br />
}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
}</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 上面是一个简单的类，包含一个有参数的构造器，一个GetValue的方法，一个Value属性，我们可以通过方法的名称来得到方法并且调用之，如：</p>
<p>//获取类型信息<br />
Type&nbsp;&nbsp; t&nbsp;&nbsp; =&nbsp;&nbsp; Type.GetType("TestSpace.TestClass");<br />
//构造器的参数<br />
object[]&nbsp;&nbsp; constuctParms&nbsp;&nbsp; =&nbsp;&nbsp; new&nbsp;&nbsp; object[]{"timmy"};<br />
//根据类型创建对象<br />
object&nbsp;&nbsp; dObj&nbsp;&nbsp; =&nbsp;&nbsp; Activator.CreateInstance(t,constuctParms);<br />
//获取方法的信息<br />
MethodInfo&nbsp;&nbsp; method&nbsp;&nbsp; =&nbsp;&nbsp; t.GetMethod("GetValue");<br />
//调用方法的一些标志位，这里的含义是Public并且是实例方法，这也是默认的值<br />
BindingFlags&nbsp;&nbsp; flag&nbsp;&nbsp; =&nbsp;&nbsp; BindingFlags.Public&nbsp;&nbsp; |&nbsp;&nbsp; BindingFlags.Instance;<br />
//GetValue方法的参数<br />
object[]&nbsp;&nbsp; parameters&nbsp;&nbsp; =&nbsp;&nbsp; new&nbsp;&nbsp; object[]{"Hello"};<br />
//调用方法，用一个object接收返回值<br />
object&nbsp;&nbsp; returnValue&nbsp;&nbsp; =&nbsp;&nbsp; method.Invoke(dObj,flag,Type.DefaultBinder,parameters,null);</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 属性与方法的调用大同小异，大家也可以参考MSDN</p>
<p>7、动态创建委托<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 委托是C#中实现事件的基础，有时候不可避免的要动态的创建委托，实际上委托也是一种类型：System.Delegate，所有的委托都是从这个类派生的<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.Delegate提供了一些静态方法来动态创建一个委托，比如一个委托：</p>
<p>namespace&nbsp;&nbsp; TestSpace&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; delegate&nbsp;&nbsp; string&nbsp;&nbsp; TestDelegate(string&nbsp;&nbsp; value);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public&nbsp;&nbsp; class&nbsp;&nbsp; TestClass&nbsp;&nbsp; {<br />
public&nbsp;&nbsp; TestClass()&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public&nbsp;&nbsp; void&nbsp;&nbsp; GetValue(string&nbsp;&nbsp; value)&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return&nbsp;&nbsp; value;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
}</p>
<p>使用示例：<br />
TestClass&nbsp;&nbsp; obj&nbsp;&nbsp; =&nbsp;&nbsp; new&nbsp;&nbsp; TestClass();</p>
<p>//获取类型，实际上这里也可以直接用typeof来获取类型<br />
Type&nbsp;&nbsp; t&nbsp;&nbsp; =&nbsp;&nbsp; Type.GetType(&#8220;TestSpace.TestClass&#8221;);<br />
//创建代理，传入类型、创建代理的对象以及方法名称<br />
TestDelegate&nbsp;&nbsp; method&nbsp;&nbsp; =&nbsp;&nbsp; (TestDelegate)Delegate.CreateDelegate(t,obj,&#8221;GetValue&#8221;);</p>
<p>String&nbsp;&nbsp; returnValue&nbsp;&nbsp; =&nbsp;&nbsp; method(&#8220;hello&#8221;);</p>
 <img src ="http://www.cnblogs.com/Henllyee/aggbug/1233246.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/37548/" target="_blank">[新闻]微软高管：Wii用户最终会成为Xbox 360用户</a>]]></description></item><item><title>WCF学习（二）-------服务契约</title><link>http://www.cnblogs.com/Henllyee/archive/2008/06/30/1232284.html</link><dc:creator>Henllyee Cui</dc:creator><author>Henllyee Cui</author><pubDate>Mon, 30 Jun 2008 02:14:00 GMT</pubDate><guid>http://www.cnblogs.com/Henllyee/archive/2008/06/30/1232284.html</guid><wfw:comment>http://www.cnblogs.com/Henllyee/comments/1232284.html</wfw:comment><comments>http://www.cnblogs.com/Henllyee/archive/2008/06/30/1232284.html#Feedback</comments><slash:comments>4</slash:comments><wfw:commentRss>http://www.cnblogs.com/Henllyee/comments/commentRss/1232284.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/Henllyee/services/trackbacks/1232284.html</trackback:ping><description><![CDATA[<strong>一、服务契约介绍<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</strong>我个人理解服务契约是一组公开的操作，其中公开的操作(OperationContract)只能定义在方法(Method)上。对于我们要公开的服务我们可以在接口或者类上加上标识ServiceContract。但是我们一般情况下，会把ServiceContract定义在接口上而不是类上，这样有几个好处：<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1.方便契约的继承，不同的类型可以去实现相同的契约，重用性高。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;2.同一服务可以去实现多个契约。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;3.可以随时去修改服务类型，而不需去修改接口。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;下面定义一个服务的契约：&nbsp;&nbsp;&nbsp;
<div class="cnblogs_code"><img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" /><span style="color: #0000ff">using</span><span style="color: #000000">&nbsp;System;<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #0000ff">using</span><span style="color: #000000">&nbsp;System.Collections.Generic;<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #0000ff">using</span><span style="color: #000000">&nbsp;System.Linq;<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #0000ff">using</span><span style="color: #000000">&nbsp;System.Text;<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #0000ff">using</span><span style="color: #000000">&nbsp;System.ServiceModel;<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" /><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #0000ff">namespace</span><span style="color: #000000">&nbsp;Service<br />
<img id="Codehighlighter1_132_308_Open_Image" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_132_308_Open_Text').style.display='none'; document.getElementById('Codehighlighter1_132_308_Closed_Image').style.display='inline'; document.getElementById('Codehighlighter1_132_308_Closed_Text').style.display='inline';" alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_132_308_Closed_Image" style="display: none" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_132_308_Closed_Text').style.display='none'; document.getElementById('Codehighlighter1_132_308_Open_Image').style.display='inline'; document.getElementById('Codehighlighter1_132_308_Open_Text').style.display='inline';" alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif" align="top" /></span><span id="Codehighlighter1_132_308_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img alt="" src="http://www.cnblogs.com/Images/dot.gif" /></span><span id="Codehighlighter1_132_308_Open_Text"><span style="color: #000000">{<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;[ServiceContract(Name</span><span style="color: #000000">=</span><span style="color: #800000">"</span><span style="color: #800000">Service_Calucator</span><span style="color: #800000">"</span><span style="color: #000000">,Namespace</span><span style="color: #000000">=</span><span style="color: #800000">"</span><span style="color: #800000">Henllyee</span><span style="color: #800000">"</span><span style="color: #000000">)]<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">interface</span><span style="color: #000000">&nbsp;ICalucator<br />
<img id="Codehighlighter1_239_306_Open_Image" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_239_306_Open_Text').style.display='none'; document.getElementById('Codehighlighter1_239_306_Closed_Image').style.display='inline'; document.getElementById('Codehighlighter1_239_306_Closed_Text').style.display='inline';" alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_239_306_Closed_Image" style="display: none" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_239_306_Closed_Text').style.display='none'; document.getElementById('Codehighlighter1_239_306_Open_Image').style.display='inline'; document.getElementById('Codehighlighter1_239_306_Open_Text').style.display='inline';" alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span id="Codehighlighter1_239_306_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img alt="" src="http://www.cnblogs.com/Images/dot.gif" /></span><span id="Codehighlighter1_239_306_Open_Text"><span style="color: #000000">{<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[OperationContract]<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;Add(</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;x,&nbsp;</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;y);<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" /><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />}</span></span></div>
我们在上面首先定义了一个接口名称为：ICalucator，然后我们要将这个接口公开为服务契约在上面加上属性标识[ServiceContract]，其中Name可以为契约指定别名，这样的话，如果我们在客户端遇到相同的接口时可以通过Name来制定别名区别开来。公开的操作为Add方法，在上面标识[OperationContract]即可。<br />
<br />
<strong>二、方法的重载<br />
</strong>&nbsp;&nbsp;&nbsp;&nbsp;按照我们正常的方法去重载的话，只需要方法的参数不同（个数、类型）就可以实现方法的重载。但是我们在服务契约的定义的时候是不能怎样的，wdsl是编译同不过的如：<br />
<div class="cnblogs_code"><img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" /><span style="color: #0000ff">using</span><span style="color: #000000">&nbsp;System;<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #0000ff">using</span><span style="color: #000000">&nbsp;System.Collections.Generic;<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #0000ff">using</span><span style="color: #000000">&nbsp;System.Linq;<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #0000ff">using</span><span style="color: #000000">&nbsp;System.Text;<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #0000ff">using</span><span style="color: #000000">&nbsp;System.ServiceModel;<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" /><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #0000ff">namespace</span><span style="color: #000000">&nbsp;Service<br />
<img id="Codehighlighter1_132_376_Open_Image" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_132_376_Open_Text').style.display='none'; document.getElementById('Codehighlighter1_132_376_Closed_Image').style.display='inline'; document.getElementById('Codehighlighter1_132_376_Closed_Text').style.display='inline';" alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_132_376_Closed_Image" style="display: none" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_132_376_Closed_Text').style.display='none'; document.getElementById('Codehighlighter1_132_376_Open_Image').style.display='inline'; document.getElementById('Codehighlighter1_132_376_Open_Text').style.display='inline';" alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif" align="top" /></span><span id="Codehighlighter1_132_376_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img alt="" src="http://www.cnblogs.com/Images/dot.gif" /></span><span id="Codehighlighter1_132_376_Open_Text"><span style="color: #000000">{<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;[ServiceContract(Name</span><span style="color: #000000">=</span><span style="color: #800000">"</span><span style="color: #800000">Service_Calucator</span><span style="color: #800000">"</span><span style="color: #000000">,Namespace</span><span style="color: #000000">=</span><span style="color: #800000">"</span><span style="color: #800000">Henllyee</span><span style="color: #800000">"</span><span style="color: #000000">)]<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">interface</span><span style="color: #000000">&nbsp;ICalucator<br />
<img id="Codehighlighter1_239_374_Open_Image" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_239_374_Open_Text').style.display='none'; document.getElementById('Codehighlighter1_239_374_Closed_Image').style.display='inline'; document.getElementById('Codehighlighter1_239_374_Closed_Text').style.display='inline';" alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_239_374_Closed_Image" style="display: none" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_239_374_Closed_Text').style.display='none'; document.getElementById('Codehighlighter1_239_374_Open_Image').style.display='inline'; document.getElementById('Codehighlighter1_239_374_Open_Text').style.display='inline';" alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span id="Codehighlighter1_239_374_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img alt="" src="http://www.cnblogs.com/Images/dot.gif" /></span><span id="Codehighlighter1_239_374_Open_Text"><span style="color: #000000">{<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[OperationContract]<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;Add(</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;x,&nbsp;</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;y);<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" /><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[OperationContract]<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">double</span><span style="color: #000000">&nbsp;Add(</span><span style="color: #0000ff">double</span><span style="color: #000000">&nbsp;x,&nbsp;</span><span style="color: #0000ff">double</span><span style="color: #000000">&nbsp;y);<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />}</span></span><span style="color: #000000"><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" /></span></div>
上面的方法是编译不能通过的。但是我们有一种解决的办法可以去解决这样的问题，就是通过OperationContract的Name属性来设定方法的别名是实现方法的重载。如：<br />
<div class="cnblogs_code"><img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" /><span style="color: #0000ff">using</span><span style="color: #000000">&nbsp;System;<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #0000ff">using</span><span style="color: #000000">&nbsp;System.Collections.Generic;<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #0000ff">using</span><span style="color: #000000">&nbsp;System.Linq;<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #0000ff">using</span><span style="color: #000000">&nbsp;System.Text;<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #0000ff">using</span><span style="color: #000000">&nbsp;System.ServiceModel;<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" /><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #0000ff">namespace</span><span style="color: #000000">&nbsp;Service<br />
<img id="Codehighlighter1_132_409_Open_Image" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_132_409_Open_Text').style.display='none'; document.getElementById('Codehighlighter1_132_409_Closed_Image').style.display='inline'; document.getElementById('Codehighlighter1_132_409_Closed_Text').style.display='inline';" alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_132_409_Closed_Image" style="display: none" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_132_409_Closed_Text').style.display='none'; document.getElementById('Codehighlighter1_132_409_Open_Image').style.display='inline'; document.getElementById('Codehighlighter1_132_409_Open_Text').style.display='inline';" alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif" align="top" /></span><span id="Codehighlighter1_132_409_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img alt="" src="http://www.cnblogs.com/Images/dot.gif" /></span><span id="Codehighlighter1_132_409_Open_Text"><span style="color: #000000">{<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;[ServiceContract(Name</span><span style="color: #000000">=</span><span style="color: #800000">"</span><span style="color: #800000">Service_Calucator</span><span style="color: #800000">"</span><span style="color: #000000">,Namespace</span><span style="color: #000000">=</span><span style="color: #800000">"</span><span style="color: #800000">Henllyee</span><span style="color: #800000">"</span><span style="color: #000000">)]<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">interface</span><span style="color: #000000">&nbsp;ICalucator<br />
<img id="Codehighlighter1_239_407_Open_Image" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_239_407_Open_Text').style.display='none'; document.getElementById('Codehighlighter1_239_407_Closed_Image').style.display='inline'; document.getElementById('Codehighlighter1_239_407_Closed_Text').style.display='inline';" alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_239_407_Closed_Image" style="display: none" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_239_407_Closed_Text').style.display='none'; document.getElementById('Codehighlighter1_239_407_Open_Image').style.display='inline'; document.getElementById('Codehighlighter1_239_407_Open_Text').style.display='inline';" alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span id="Codehighlighter1_239_407_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img alt="" src="http://www.cnblogs.com/Images/dot.gif" /></span><span id="Codehighlighter1_239_407_Open_Text"><span style="color: #000000">{<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[OperationContract(Name</span><span style="color: #000000">=</span><span style="color: #800000">"</span><span style="color: #800000">IntAdd</span><span style="color: #800000">"</span><span style="color: #000000">)]<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;Add(</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;x,&nbsp;</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;y);<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" /><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[OperationContract(Name</span><span style="color: #000000">=</span><span style="color: #800000">"</span><span style="color: #800000">DoubleAdd</span><span style="color: #800000">"</span><span style="color: #000000">)]<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">double</span><span style="color: #000000">&nbsp;Add(</span><span style="color: #0000ff">double</span><span style="color: #000000">&nbsp;x,&nbsp;</span><span style="color: #0000ff">double</span><span style="color: #000000">&nbsp;y);<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />}</span></span><span style="color: #000000"><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" /></span></div>
<br />
下面我们通过数据元的方式来配置一个宿主主机，我们添加一个控制台的程序，通过配置App.Config来实现。<br />
在App.Config中：<br />
<div class="cnblogs_code"><img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" /><span style="color: #000000">&lt;?</span><span style="color: #000000">xml&nbsp;version</span><span style="color: #000000">=</span><span style="color: #800000">"</span><span style="color: #800000">1.0</span><span style="color: #800000">"</span><span style="color: #000000">&nbsp;encoding</span><span style="color: #000000">=</span><span style="color: #800000">"</span><span style="color: #800000">utf-8</span><span style="color: #800000">"</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">?&gt;</span><span style="color: #000000"><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #000000">&lt;</span><span style="color: #000000">configuration</span><span style="color: #000000">&gt;</span><span style="color: #000000"><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #000000">system.serviceModel</span><span style="color: #000000">&gt;</span><span style="color: #000000"><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #000000">services</span><span style="color: #000000">&gt;</span><span style="color: #000000"><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #000000">service&nbsp;name</span><span style="color: #000000">=</span><span style="color: #800000">"</span><span style="color: #800000">Service.Calucator</span><span style="color: #800000">"</span><span style="color: #000000">&nbsp;behaviorConfiguration</span><span style="color: #000000">=</span><span style="color: #800000">"</span><span style="color: #800000">mex</span><span style="color: #800000">"</span><span style="color: #000000">&gt;</span><span style="color: #000000"><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #000000">host</span><span style="color: #000000">&gt;</span><span style="color: #000000"><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #000000">baseAddresses</span><span style="color: #000000">&gt;</span><span style="color: #000000"><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #000000">add&nbsp;baseAddress</span><span style="color: #000000">=</span><span style="color: #800000">"</span><span style="color: #800000">http://localhost:8888</span><span style="color: #800000">"</span><span style="color: #000000">/&gt;</span><span style="color: #000000"><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">&lt;/</span><span style="color: #000000">baseAddresses</span><span style="color: #000000">&gt;</span><span style="color: #000000"><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">&lt;/</span><span style="color: #000000">host</span><span style="color: #000000">&gt;</span><span style="color: #000000"><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #000000">endpoint&nbsp;address</span><span style="color: #000000">=</span><span style="color: #800000">"</span><span style="color: #800000">Calucator</span><span style="color: #800000">"</span><span style="color: #000000">&nbsp;binding</span><span style="color: #000000">=</span><span style="color: #800000">"</span><span style="color: #800000">basicHttpBinding</span><span style="color: #800000">"</span><span style="color: #000000">&nbsp;contract</span><span style="color: #000000">=</span><span style="color: #800000">"</span><span style="color: #800000">Service.ICalucator</span><span style="color: #800000">"</span><span style="color: #000000">&gt;&lt;/</span><span style="color: #000000">endpoint</span><span style="color: #000000">&gt;</span><span style="color: #000000"><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">&lt;/</span><span style="color: #000000">service</span><span style="color: #000000">&gt;</span><span style="color: #000000"><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">&lt;/</span><span style="color: #000000">services</span><span style="color: #000000">&gt;</span><span style="color: #000000"><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #000000">behaviors</span><span style="color: #000000">&gt;</span><span style="color: #000000"><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #000000">serviceBehaviors</span><span style="color: #000000">&gt;</span><span style="color: #000000"><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #000000">behavior&nbsp;name</span><span style="color: #000000">=</span><span style="color: #800000">"</span><span style="color: #800000">mex</span><span style="color: #800000">"</span><span style="color: #000000">&gt;</span><span style="color: #000000"><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #000000">serviceMetadata&nbsp;httpGetEnabled</span><span style="color: #000000">=</span><span style="color: #800000">"</span><span style="color: #800000">true</span><span style="color: #800000">"</span><span style="color: #000000">/&gt;</span><span style="color: #000000"><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">&lt;/</span><span style="color: #000000">behavior</span><span style="color: #000000">&gt;</span><span style="color: #000000"><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">&lt;/</span><span style="color: #000000">serviceBehaviors</span><span style="color: #000000">&gt;</span><span style="color: #000000"><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">&lt;/</span><span style="color: #000000">behaviors</span><span style="color: #000000">&gt;</span><span style="color: #000000"><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;</span><span style="color: #000000">&lt;/</span><span style="color: #000000">system.serviceModel</span><span style="color: #000000">&gt;</span><span style="color: #000000"><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #000000">&lt;/</span><span style="color: #000000">configuration</span><span style="color: #000000">&gt;</span></div>
在主程序中：<br />
<div class="cnblogs_code"><img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" /><span style="color: #0000ff">using</span><span style="color: #000000">&nbsp;System;<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #0000ff">using</span><span style="color: #000000">&nbsp;System.Collections.Generic;<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #0000ff">using</span><span style="color: #000000">&nbsp;System.Linq;<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #0000ff">using</span><span style="color: #000000">&nbsp;System.Text;<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #0000ff">using</span><span style="color: #000000">&nbsp;System.ServiceModel;<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #0000ff">using</span><span style="color: #000000">&nbsp;Service;<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" /><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #0000ff">namespace</span><span style="color: #000000">&nbsp;Host<br />
<img id="Codehighlighter1_144_594_Open_Image" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_144_594_Open_Text').style.display='none'; document.getElementById('Codehighlighter1_144_594_Closed_Image').style.display='inline'; document.getElementById('Codehighlighter1_144_594_Closed_Text').style.display='inline';" alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_144_594_Closed_Image" style="display: none" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_144_594_Closed_Text').style.display='none'; document.getElementById('Codehighlighter1_144_594_Open_Image').style.display='inline'; document.getElementById('Codehighlighter1_144_594_Open_Text').style.display='inline';" alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif" align="top" /></span><span id="Codehighlighter1_144_594_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img alt="" src="http://www.cnblogs.com/Images/dot.gif" /></span><span id="Codehighlighter1_144_594_Open_Text"><span style="color: #000000">{<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">class</span><span style="color: #000000">&nbsp;Program<br />
<img id="Codehighlighter1_168_592_Open_Image" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_168_592_Open_Text').style.display='none'; document.getElementById('Codehighlighter1_168_592_Closed_Image').style.display='inline'; document.getElementById('Codehighlighter1_168_592_Closed_Text').style.display='inline';" alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_168_592_Closed_Image" style="display: none" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_168_592_Closed_Text').style.display='none'; document.getElementById('Codehighlighter1_168_592_Open_Image').style.display='inline'; document.getElementById('Codehighlighter1_168_592_Open_Text').style.display='inline';" alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span id="Codehighlighter1_168_592_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img alt="" src="http://www.cnblogs.com/Images/dot.gif" /></span><span id="Codehighlighter1_168_592_Open_Text"><span style="color: #000000">{<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">static</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;Main(</span><span style="color: #0000ff">string</span><span style="color: #000000">[]&nbsp;args)<br />
<img id="Codehighlighter1_218_586_Open_Image" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_218_586_Open_Text').style.display='none'; document.getElementById('Codehighlighter1_218_586_Closed_Image').style.display='inline'; document.getElementById('Codehighlighter1_218_586_Closed_Text').style.display='inline';" alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_218_586_Closed_Image" style="display: none" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_218_586_Closed_Text').style.display='none'; document.getElementById('Codehighlighter1_218_586_Open_Image').style.display='inline'; document.getElementById('Codehighlighter1_218_586_Open_Text').style.display='inline';" alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span id="Codehighlighter1_218_586_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img alt="" src="http://www.cnblogs.com/Images/dot.gif" /></span><span id="Codehighlighter1_218_586_Open_Text"><span style="color: #000000">{<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ServiceHost&nbsp;host&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">null</span><span style="color: #000000">;<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">try</span><span style="color: #000000"><br />
<img id="Codehighlighter1_285_498_Open_Image" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_285_498_Open_Text').style.display='none'; document.getElementById('Codehighlighter1_285_498_Closed_Image').style.display='inline'; document.getElementById('Codehighlighter1_285_498_Closed_Text').style.display='inline';" alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_285_498_Closed_Image" style="display: none" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_285_498_Closed_Text').style.display='none'; document.getElementById('Codehighlighter1_285_498_Open_Image').style.display='inline'; document.getElementById('Codehighlighter1_285_498_Open_Text').style.display='inline';" alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span id="Codehighlighter1_285_498_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img alt="" src="http://www.cnblogs.com/Images/dot.gif" /></span><span id="Codehighlighter1_285_498_Open_Text"><span style="color: #000000">{<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;host&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;ServiceHost(</span><span style="color: #0000ff">typeof</span><span style="color: #000000">(Calucator));<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;host.Open();<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" /><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Console.Write(</span><span style="color: #800000">"</span><span style="color: #800000">Host&nbsp;is&nbsp;opening&nbsp;now!&nbsp;Press&nbsp;any&nbsp;key&nbsp;to&nbsp;stop</span><span style="color: #800000">"</span><span style="color: #000000">);<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Console.Read();<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">finally</span><span style="color: #000000"><br />
<img id="Codehighlighter1_531_576_Open_Image" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_531_576_Open_Text').style.display='none'; document.getElementById('Codehighlighter1_531_576_Closed_Image').style.display='inline'; document.getElementById('Codehighlighter1_531_576_Closed_Text').style.display='inline';" alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_531_576_Closed_Image" style="display: none" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_531_576_Closed_Text').style.display='none'; document.getElementById('Codehighlighter1_531_576_Open_Image').style.display='inline'; document.getElementById('Codehighlighter1_531_576_Open_Text').style.display='inline';" alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span id="Codehighlighter1_531_576_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img alt="" src="http://www.cnblogs.com/Images/dot.gif" /></span><span id="Codehighlighter1_531_576_Open_Text"><span style="color: #000000">{<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;host.Close();<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />}</span></span><span style="color: #000000"><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" /></span></div>
然后我们启动主机，在浏览器中输入地址：<font face="Verdana"><font face="Verdana"><a href="http://localhost:8888/?wsdl">http://localhost:8888/?wsdl</a> 。我们可以看到：<br />
</font></font><img height="400" alt="" src="http://www.cnblogs.com/images/cnblogs_com/henllyee/se.JPG" width="679" border="0" /><br />
<br />
<br />
<br />
我们可以看到wsdl编译时已经将名称编译成为了我们Name中定义的别名。<br />
<br />
<img src ="http://www.cnblogs.com/Henllyee/aggbug/1232284.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/37547/" target="_blank">[新闻]遵守YouTube案裁定 谷歌将陷入隐私指控深渊</a>]]></description></item><item><title>wcf学习(一)：预览</title><link>http://www.cnblogs.com/Henllyee/archive/2008/06/05/1214164.html</link><dc:creator>Henllyee Cui</dc:creator><author>Henllyee Cui</author><pubDate>Thu, 05 Jun 2008 02:44:00 GMT</pubDate><guid>http://www.cnblogs.com/Henllyee/archive/2008/06/05/1214164.html</guid><wfw:comment>http://www.cnblogs.com/Henllyee/comments/1214164.html</wfw:comment><comments>http://www.cnblogs.com/Henllyee/archive/2008/06/05/1214164.html#Feedback</comments><slash:comments>11</slash:comments><wfw:commentRss>http://www.cnblogs.com/Henllyee/comments/commentRss/1214164.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/Henllyee/services/trackbacks/1214164.html</trackback:ping><description><![CDATA[<p>WCF的全称是：Windows Commnication Foundation.WCF，是微软对一系列产业标准定义的实现，是面向服务实现的比较好的途径。传统的三层结构模式一般为：数据访问层、业务逻辑层、客户层，但是这种模式下客户层与业务逻辑层的耦合较为紧密，而面向服务则使得客户层跟业务逻辑上实现松耦合。<br />
<strong>地址<br />
</strong>WCF的每个服务都需要有一个地址的，而且只能有一个，WCF支持多种传输：<br />
&nbsp;&nbsp;&nbsp;&nbsp;1.HTTP<br />
&nbsp;&nbsp;&nbsp;&nbsp;2.TCP<br />
&nbsp;&nbsp;&nbsp;&nbsp;3.对等网<br />
&nbsp;&nbsp;&nbsp;&nbsp;4.内部进程通信<br />
&nbsp;&nbsp;&nbsp;&nbsp;5.MSMQ<br />
通常的地址包括两个方面：1.服务位置、2.传输的协议。如基于tcp的地址：net.tcp://localhost:8800/Henllyee.Service，在这里net.tcp就是传输的协议，而后面就是告诉服务的位置。<br />
<br />
<strong>契约<br />
</strong>WCF所有的服务都是公开为契约，当你使用这个服务是就比约遵循一定的契约。契约的表示就想webservice里的表示，也是通过属性标签来标识的。WCF定义了四种契约类型：<br />
1.服务契约（Service Contract）：定义客户端能够执行的服务操作。<br />
2.数据契约（Data Contract）:定义于服务交互的数据类型。<br />
3.错误契约（Fault Contract）:定义抛出的错误。<br />
4.消息契约（Message Contract）:定义直接与服务交互的消息。<br />
服务契约是要广泛使用的，定义个服务契约是很简单的，只是在一些服务接口上进行标识即可。</p>
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" /><span style="color: #0000ff">namespace</span><span style="color: #000000">&nbsp;HenllyeeWCF.Service<br />
<img id="Codehighlighter1_30_406_Open_Image" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_30_406_Open_Text').style.display='none'; document.getElementById('Codehighlighter1_30_406_Closed_Image').style.display='inline'; document.getElementById('Codehighlighter1_30_406_Closed_Text').style.display='inline';" alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_30_406_Closed_Image" style="display: none" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_30_406_Closed_Text').style.display='none'; document.getElementById('Codehighlighter1_30_406_Open_Image').style.display='inline'; document.getElementById('Codehighlighter1_30_406_Open_Text').style.display='inline';" alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif" align="top" /></span><span id="Codehighlighter1_30_406_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img alt="" src="http://www.cnblogs.com/Images/dot.gif" /></span><span id="Codehighlighter1_30_406_Open_Text"><span style="color: #000000">{<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;[ServiceContract(Namespace</span><span style="color: #000000">=</span><span style="color: #800000">"</span><span style="color: #800000">http://henllyee.cnblogs.com</span><span style="color: #800000">"</span><span style="color: #000000">)]<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">interface</span><span style="color: #000000">&nbsp;IHello<br />
<img id="Codehighlighter1_127_203_Open_Image" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_127_203_Open_Text').style.display='none'; document.getElementById('Codehighlighter1_127_203_Closed_Image').style.display='inline'; document.getElementById('Codehighlighter1_127_203_Closed_Text').style.display='inline';" alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_127_203_Closed_Image" style="display: none" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_127_203_Closed_Text').style.display='none'; document.getElementById('Codehighlighter1_127_203_Open_Image').style.display='inline'; document.getElementById('Codehighlighter1_127_203_Open_Text').style.display='inline';" alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span id="Codehighlighter1_127_203_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img alt="" src="http://www.cnblogs.com/Images/dot.gif" /></span><span id="Codehighlighter1_127_203_Open_Text"><span style="color: #000000">{<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[OperationContract]<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">string</span><span style="color: #000000">&nbsp;SayHello(</span><span style="color: #0000ff">string</span><span style="color: #000000">&nbsp;strName);<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">class</span><span style="color: #000000">&nbsp;Hello:IHello<br />
<img id="Codehighlighter1_238_404_Open_Image" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_238_404_Open_Text').style.display='none'; document.getElementById('Codehighlighter1_238_404_Closed_Image').style.display='inline'; document.getElementById('Codehighlighter1_238_404_Closed_Text').style.display='inline';" alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_238_404_Closed_Image" style="display: none" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_238_404_Closed_Text').style.display='none'; document.getElementById('Codehighlighter1_238_404_Open_Image').style.display='inline'; document.getElementById('Codehighlighter1_238_404_Open_Text').style.display='inline';" alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span id="Codehighlighter1_238_404_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img alt="" src="http://www.cnblogs.com/Images/dot.gif" /></span><span id="Codehighlighter1_238_404_Open_Text"><span style="color: #000000">{<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">string</span><span style="color: #000000">&nbsp;SayHello(</span><span style="color: #0000ff">string</span><span style="color: #000000">&nbsp;strName)<br />
<img id="Codehighlighter1_295_398_Open_Image" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_295_398_Open_Text').style.display='none'; document.getElementById('Codehighlighter1_295_398_Closed_Image').style.display='inline'; document.getElementById('Codehighlighter1_295_398_Closed_Text').style.display='inline';" alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_295_398_Closed_Image" style="display: none" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_295_398_Closed_Text').style.display='none'; document.getElementById('Codehighlighter1_295_398_Open_Image').style.display='inline'; document.getElementById('Codehighlighter1_295_398_Open_Text').style.display='inline';" alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span id="Codehighlighter1_295_398_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img alt="" src="http://www.cnblogs.com/Images/dot.gif" /></span><span id="Codehighlighter1_295_398_Open_Text"><span style="color: #000000">{<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;String.Format(</span><span style="color: #800000">"</span><span style="color: #800000">{0}&nbsp;say&nbsp;hello&nbsp;at&nbsp;{1}</span><span style="color: #800000">"</span><span style="color: #000000">,&nbsp;strName,&nbsp;DateTime.Now.ToString());<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />}</span></span></div>
<p>首先我们要在接口或则类上标识为"ServiceContract",其中有两个可选的参数："Namespace"、"Name"，即指定命名空间跟类或则接口的名称。而即使是应用了ServiceContract，也不是类型的成员就是契约中的，还必须显示的用OperationContract来暴露操作，为了方便重载，OperationContract提供了可选参数：Name来指定暴露操作的另外的名称。<br />
注意点：服务契约只能定义在接口或者类上，OperationContract只能应用到方法上。建议服务契约定义在接口上面。<br />
<br />
<strong>托管</strong><br />
每个WCF的服务必须托管在进程中，每个托管进程可以托管多个服务，而每个服务也可以由多个进程托管。托管可以有几种：<br />
1.IIS托管。IIS托管可以在客户端请求是启动，不需一直启动，但它只能使用HTTP协议。<br />
2.自托管。必须手工通过程序来控制托管的启动跟关闭。<br />
3.WAS。只使用Vista,跟IIS托管一样，但并不局限于HTTP。<br />
下面写一个自托管的控制台程序：</p>
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" /><span style="color: #0000ff">namespace</span><span style="color: #000000">&nbsp;HenllyeeWCF.Host<br />
<img id="Codehighlighter1_27_431_Open_Image" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_27_431_Open_Text').style.display='none'; document.getElementById('Codehighlighter1_27_431_Closed_Image').style.display='inline'; document.getElementById('Codehighlighter1_27_431_Closed_Text').style.display='inline';" alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_27_431_Closed_Image" style="display: none" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_27_431_Closed_Text').style.display='none'; document.getElementById('Codehighlighter1_27_431_Open_Image').style.display='inline'; document.getElementById('Codehighlighter1_27_431_Open_Text').style.display='inline';" alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif" align="top" /></span><span id="Codehighlighter1_27_431_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img alt="" src="http://www.cnblogs.com/Images/dot.gif" /></span><span id="Codehighlighter1_27_431_Open_Text"><span style="color: #000000">{<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">class</span><span style="color: #000000">&nbsp;Program<br />
<img id="Codehighlighter1_51_429_Open_Image" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_51_429_Open_Text').style.display='none'; document.getElementById('Codehighlighter1_51_429_Closed_Image').style.display='inline'; document.getElementById('Codehighlighter1_51_429_Closed_Text').style.display='inline';" alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_51_429_Closed_Image" style="display: none" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_51_429_Closed_Text').style.display='none'; document.getElementById('Codehighlighter1_51_429_Open_Image').style.display='inline'; document.getElementById('Codehighlighter1_51_429_Open_Text').style.display='inline';" alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span id="Codehighlighter1_51_429_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img alt="" src="http://www.cnblogs.com/Images/dot.gif" /></span><span id="Codehighlighter1_51_429_Open_Text"><span style="color: #000000">{<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">static</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;Main(</span><span style="color: #0000ff">string</span><span style="color: #000000">[]&nbsp;args)<br />
<img id="Codehighlighter1_101_423_Open_Image" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_101_423_Open_Text').style.display='none'; document.getElementById('Codehighlighter1_101_423_Closed_Image').style.display='inline'; document.getElementById('Codehighlighter1_101_423_Closed_Text').style.display='inline';" alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_101_423_Closed_Image" style="display: none" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_101_423_Closed_Text').style.display='none'; document.getElementById('Codehighlighter1_101_423_Open_Image').style.display='inline'; document.getElementById('Codehighlighter1_101_423_Open_Text').style.display='inline';" alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span id="Codehighlighter1_101_423_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img alt="" src="http://www.cnblogs.com/Images/dot.gif" /></span><span id="Codehighlighter1_101_423_Open_Text"><span style="color: #000000">{<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">using</span><span style="color: #000000">&nbsp;(ServiceHost&nbsp;host&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;ServiceHost(</span><span style="color: #0000ff">typeof</span><span style="color: #000000">(HenllyeeWCF.Service.Hello)))<br />
<img id="Codehighlighter1_205_413_Open_Image" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_205_413_Open_Text').style.display='none'; document.getElementById('Codehighlighter1_205_413_Closed_Image').style.display='inline'; document.getElementById('Codehighlighter1_205_413_Closed_Text').style.display='inline';" alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_205_413_Closed_Image" style="display: none" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_205_413_Closed_Text').style.display='none'; document.getElementById('Codehighlighter1_205_413_Open_Image').style.display='inline'; document.getElementById('Codehighlighter1_205_413_Open_Text').style.display='inline';" alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span id="Codehighlighter1_205_413_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img alt="" src="http://www.cnblogs.com/Images/dot.gif" /></span><span id="Codehighlighter1_205_413_Open_Text"><span style="color: #000000">{<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;host.AddServiceEndpoint(</span><span style="color: #0000ff">typeof</span><span style="color: #000000">(HenllyeeWCF.Service.IHello),&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;NetTcpBinding(),&nbsp;</span><span style="color: #800000">"</span><span style="color: #800000">net.tcp://localhost:8000/Hello</span><span style="color: #800000">"</span><span style="color: #000000">);<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;host.Open();<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Console.Read();<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />}</span></span></div>
<p>WCF客户端跟服务器端的交互一般是采用EndPoint来交互的，每个EndPoint是由Address(地址)、Binding(绑定)、Contract(契约)组成的。而服务器端是通过暴露EndPoint来交互的。在程序中首先我们定义了一个ServiceHost,同时指定了服务为我们已经定义的HenllyeeWCF.Service.Hello，同时跟host添加一个终节点，然后打开host,等待用户取消进程。<br />
<br />
<strong>客户端</strong><br />
首先，入门启动host后可以通过，在客户端添加服务应用的方式来实现服务的调用。也可以自己编程的方式来实现。<br />
</p>
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" /><span style="color: #0000ff">namespace</span><span style="color: #000000">&nbsp;HenllyeeWCF.Client<br />
<img id="Codehighlighter1_29_554_Open_Image" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_29_554_Open_Text').style.display='none'; document.getElementById('Codehighlighter1_29_554_Closed_Image').style.display='inline'; document.getElementById('Codehighlighter1_29_554_Closed_Text').style.display='inline';" alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_29_554_Closed_Image" style="display: none" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_29_554_Closed_Text').style.display='none'; document.getElementById('Codehighlighter1_29_554_Open_Image').style.display='inline'; document.getElementById('Codehighlighter1_29_554_Open_Text').style.display='inline';" alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif" align="top" /></span><span id="Codehighlighter1_29_554_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img alt="" src="http://www.cnblogs.com/Images/dot.gif" /></span><span id="Codehighlighter1_29_554_Open_Text"><span style="color: #000000">{<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;[ServiceContract(Namespace&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #800000">"</span><span style="color: #800000">http://henllyee.cnblogs.com</span><span style="color: #800000">"</span><span style="color: #000000">)]<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">interface</span><span style="color: #000000">&nbsp;IHello<br />
<img id="Codehighlighter1_128_204_Open_Image" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_128_204_Open_Text').style.display='none'; document.getElementById('Codehighlighter1_128_204_Closed_Image').style.display='inline'; document.getElementById('Codehighlighter1_128_204_Closed_Text').style.display='inline';" alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_128_204_Closed_Image" style="display: none" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_128_204_Closed_Text').style.display='none'; document.getElementById('Codehighlighter1_128_204_Open_Image').style.display='inline'; document.getElementById('Codehighlighter1_128_204_Open_Text').style.display='inline';" alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span id="Codehighlighter1_128_204_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img alt="" src="http://www.cnblogs.com/Images/dot.gif" /></span><span id="Codehighlighter1_128_204_Open_Text"><span style="color: #000000">{<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[OperationContract]<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">string</span><span style="color: #000000">&nbsp;SayHello(</span><span style="color: #0000ff">string</span><span style="color: #000000">&nbsp;strName);<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" /><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">class</span><span style="color: #000000">&nbsp;Program<br />
<img id="Codehighlighter1_228_552_Open_Image" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_228_552_Open_Text').style.display='none'; document.getElementById('Codehighlighter1_228_552_Closed_Image').style.display='inline'; document.getElementById('Codehighlighter1_228_552_Closed_Text').style.display='inline';" alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_228_552_Closed_Image" style="display: none" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_228_552_Closed_Text').style.display='none'; document.getElementById('Codehighlighter1_228_552_Open_Image').style.display='inline'; document.getElementById('Codehighlighter1_228_552_Open_Text').style.display='inline';" alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span id="Codehighlighter1_228_552_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img alt="" src="http://www.cnblogs.com/Images/dot.gif" /></span><span id="Codehighlighter1_228_552_Open_Text"><span style="color: #000000">{<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">static</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;Main(</span><span style="color: #0000ff">string</span><span style="color: #000000">[]&nbsp;args)<br />
<img id="Codehighlighter1_278_546_Open_Image" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_278_546_Open_Text').style.display='none'; document.getElementById('Codehighlighter1_278_546_Closed_Image').style.display='inline'; document.getElementById('Codehighlighter1_278_546_Closed_Text').style.display='inline';" alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_278_546_Closed_Image" style="display: none" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_278_546_Closed_Text').style.display='none'; document.getElementById('Codehighlighter1_278_546_Open_Image').style.display='inline'; document.getElementById('Codehighlighter1_278_546_Open_Text').style.display='inline';" alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span id="Codehighlighter1_278_546_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img alt="" src="http://www.cnblogs.com/Images/dot.gif" /></span><span id="Codehighlighter1_278_546_Open_Text"><span style="color: #000000">{<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;IHello&nbsp;proxy&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;ChannelFactory</span><span style="color: #000000">&lt;</span><span style="color: #000000">IHello</span><span style="color: #000000">&gt;</span><span style="color: #000000">.CreateChannel(</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;NetTcpBinding(),<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;EndpointAddress(</span><span style="color: #800000">"</span><span style="color: #800000">net.tcp://localhost:8000/Hello</span><span style="color: #800000">"</span><span style="color: #000000">));<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" /><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Console.WriteLine(proxy.SayHello(</span><span style="color: #800000">"</span><span style="color: #800000">Henllyee&nbsp;Cui</span><span style="color: #800000">"</span><span style="color: #000000">));<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Console.Read();<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />}</span></span><span style="color: #000000"><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" /></span></div>
<p>首先我针对服务定义了完全相同的接口，然后通过使用通道ChannelFactory来实现代理，指定绑定、跟EndPoint的地址就可以了。<br />
整个解决方案的体系结构如图：<br />
<img style="width: 695px; height: 435px" height="435" alt="" src="http://www.cnblogs.com/images/cnblogs_com/henllyee/wcf2.JPG" width="695" border="0" /><br />
然后我们首先来运行下Host,在运行Client端出现效果图：<br />
<img height="400" alt="" src="http://www.cnblogs.com/images/cnblogs_com/henllyee/1.JPG" width="640" border="0" /><br />
程序下载地址：<a href="http://files.cnblogs.com/henllyee/henllyeewcf.rar"><font face="Verdana">http://files.cnblogs.com/henllyee/henllyeewcf.rar</font></a><br />
<br />
</p> <img src ="http://www.cnblogs.com/Henllyee/aggbug/1214164.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/37546/" target="_blank">[新闻]iPhone入华在即 中国手机产业生存面临考验</a>]]></description></item><item><title>asp.net 控件开发(三)------处理标签间内容</title><link>http://www.cnblogs.com/Henllyee/archive/2008/05/27/1208518.html</link><dc:creator>Henllyee Cui</dc:creator><author>Henllyee Cui</author><pubDate>Tue, 27 May 2008 08:24:00 GMT</pubDate><guid>http://www.cnblogs.com/Henllyee/archive/2008/05/27/1208518.html</guid><wfw:comment>http://www.cnblogs.com/Henllyee/comments/1208518.html</wfw:comment><comments>http://www.cnblogs.com/Henllyee/archive/2008/05/27/1208518.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.cnblogs.com/Henllyee/comments/commentRss/1208518.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/Henllyee/services/trackbacks/1208518.html</trackback:ping><description><![CDATA[<p>asp.net控件标签间的内容有的时候处理成节点有的时候处理成子控件。如：&lt;asp:TextBox&gt;&lt;/asp:TextBox&gt;间的节点就会处理成属性Text的值，而如Panel这样的控件则就是将其处理成子控件。首先看如何处理成属性的。<br />
<strong>一、处理成为属性<br />
</strong>对于控件标签间的内容我们可以通过类System.Web.UI.ParseChildrenAttribute类控制控件对其内容的解析行为。<br />
ParseChildrenAttribute是一个类级别的属性标识，有四个构造函数<br />
1.ParseChildrenAttribute(),ChildrenAsProperties属性设置为false,就是不解析成控件。<br />
2.ParseChildrenAttribute(Boolean),指定解析成控件属性。<br />
3.ParseChildrenAttribute(Type),控件标签中的内容解析成控件Type类型的控件。<br />
4.ParseChildrenAttribute(Boolean,String)指定ChildrenAsProperties的值，同时指定默认解析的属性(DefaultProperty)。<br />
默认情况下，Control将内容解析成子控件，而WebControl因为可以标识了[ParseChildren(true,"Text")],所以默认解析为属性.对于简单的属性如TextBox,只需要表示为[ParseChildren(true,"Text"),DefaultProperty("Text")]即可，而对于DropDownList控件的Items属性，如果只是标识了[ParseChildren(true,"Item"),DefaultProperty("Items")]，那么Items内部如何解析呢？所以肯定要告诉属性对应的解析方式。<br />
System.Web.UI.PersistenceModeAttribute用于控制控件属性的保存方式。接收的参数为PersistenceMode枚举的值，共四种类型：<br />
Attribute:指定属性 (Property) 或事件保持为属性 (Attribute);<br />
EncodedInnerDefaultProperty:指定属性作为 ASP.NET 服务器控件的唯一内部文本而进行保持。属性值是 HTML 编码的。只能对字符串做这种指定;<br />
InnerDefaultProperty:指定属性在 ASP.NET 服务器控件中保持为内部文本。还指示将该属性定义为元素的默认属性。只能指定一个属性为默认属性;<br />
InnerProperty:指定属性在 ASP.NET 服务器控件中保持为嵌套标记。这通常用于复杂对象，它们具有自己的持久性属性。<br />
所以我们可以看到DropDownList的Items属性上的标识为:[PersistenceMode(PersistenceMode.InnerProperty)],然后在ListItem的Text属性上标识为[PersistenceMode[PersistenceMode.EncodedInnerDefaultProperty]]。解释下，因为Items属性为复杂属性，存在标签的嵌套，所以我们可以肯定的是标识类型为InnerProperty，而Text作为Items的属性，也是默认文本中的内容为Text所以标识为EncodedInnerDefaultProperty。<br />
<br />
<strong>二、处理为子控件<br />
</strong>上面介绍了处理为属性的一些大体的方法，而有的时候我们需要将Tag中的节点处理为子控件，比如：Control控件。一般我们将标签中的内容解析成子控件有两中方法：1.使用Control.AddParseSubObjec()方法，2.通过构建新的ControlBuilder类别。<br />
AddParseSubObject()在子对象已经被分析出来之后才调用，通知服务器控件某个元素（XML 或 HTML）已经过语法分析，并将该元素添加到服务器控件的 ControlCollection 对象。<br />
但是如果我们要在没有加载时就进行一些分析只是依靠AddParseSubObjec()是不行的，如：我们要在分析出来之前剔除一些非法的字符串，就不行了。所以我们可以创建自己的ControlBuilder类来实现。只需要我们自己的ControlBuilder类继承于ControlBuilder类即可准确的解析。<br />
示例：</p>
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" /><span style="color: #008000">//</span><span style="color: #008000">&nbsp;Custom&nbsp;ControlBuilder&nbsp;class.&nbsp;Interprets&nbsp;nested&nbsp;tag&nbsp;name&nbsp;"myitem"&nbsp;as&nbsp;a&nbsp;textbox.&nbsp;</span><span style="color: #008000"><br />
<img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">class</span><span style="color: #000000">&nbsp;MyControlBuilder&nbsp;:&nbsp;ControlBuilder&nbsp;<br />
<img id="Codehighlighter1_131_392_Open_Image" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_131_392_Open_Text').style.display='none'; document.getElementById('Codehighlighter1_131_392_Closed_Image').style.display='inline'; document.getElementById('Codehighlighter1_131_392_Closed_Text').style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_131_392_Closed_Image" style="display: none" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_131_392_Closed_Text').style.display='none'; document.getElementById('Codehighlighter1_131_392_Open_Image').style.display='inline'; document.getElementById('Codehighlighter1_131_392_Open_Text').style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif" align="top"  alt="" /></span><span id="Codehighlighter1_131_392_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.cnblogs.com/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_131_392_Open_Text"><span style="color: #000000">{<br />
<img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">override</span><span style="color: #000000">&nbsp;Type&nbsp;GetChildControlType(String&nbsp;tagName,<br />
<img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;IDictionary&nbsp;attributes)<br />
<img id="Codehighlighter1_259_390_Open_Image" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_259_390_Open_Text').style.display='none'; document.getElementById('Codehighlighter1_259_390_Closed_Image').style.display='inline'; document.getElementById('Codehighlighter1_259_390_Closed_Text').style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_259_390_Closed_Image" style="display: none" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_259_390_Closed_Text').style.display='none'; document.getElementById('Codehighlighter1_259_390_Open_Image').style.display='inline'; document.getElementById('Codehighlighter1_259_390_Open_Text').style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;</span><span id="Codehighlighter1_259_390_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.cnblogs.com/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_259_390_Open_Text"><span style="color: #000000">{<br />
<img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">&nbsp;(String.Compare(tagName,&nbsp;</span><span style="color: #800000">"</span><span style="color: #800000">myitem</span><span style="color: #800000">"</span><span style="color: #000000">,&nbsp;</span><span style="color: #0000ff">true</span><span style="color: #000000">)&nbsp;</span><span style="color: #000000">==</span><span style="color: #000000">&nbsp;</span><span style="color: #800080">0</span><span style="color: #000000">)&nbsp;<br />
<img id="Codehighlighter1_324_366_Open_Image" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_324_366_Open_Text').style.display='none'; document.getElementById('Codehighlighter1_324_366_Closed_Image').style.display='inline'; document.getElementById('Codehighlighter1_324_366_Closed_Text').style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_324_366_Closed_Image" style="display: none" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_324_366_Closed_Text').style.display='none'; document.getElementById('Codehighlighter1_324_366_Open_Image').style.display='inline'; document.getElementById('Codehighlighter1_324_366_Open_Text').style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span id="Codehighlighter1_324_366_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.cnblogs.com/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_324_366_Open_Text"><span style="color: #000000">{<br />
<img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">typeof</span><span style="color: #000000">(TextBox);<br />
<img src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">null</span><span style="color: #000000">;<br />
<img src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align="top"  alt="" />}</span></span><span style="color: #000000"><br />
<img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
<img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" />[&nbsp;<br />
<img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" />ControlBuilderAttribute(</span><span style="color: #0000ff">typeof</span><span style="color: #000000">(MyControlBuilder))&nbsp;<br />
<img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" />]<br />
<img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">class</span><span style="color: #000000">&nbsp;MyControl&nbsp;:&nbsp;Control<br />
<img id="Codehighlighter1_483_1085_Open_Image" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_483_1085_Open_Text').style.display='none'; document.getElementById('Codehighlighter1_483_1085_Closed_Image').style.display='inline'; document.getElementById('Codehighlighter1_483_1085_Closed_Text').style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_483_1085_Closed_Image" style="display: none" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_483_1085_Closed_Text').style.display='none'; document.getElementById('Codehighlighter1_483_1085_Open_Image').style.display='inline'; document.getElementById('Codehighlighter1_483_1085_Open_Text').style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif" align="top"  alt="" /></span><span id="Codehighlighter1_483_1085_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.cnblogs.com/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_483_1085_Open_Text"><span style="color: #000000">{<br />
<img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;Store&nbsp;all&nbsp;the&nbsp;controls&nbsp;specified&nbsp;as&nbsp;nested&nbsp;tags.</span><span style="color: #008000"><br />
<img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">private</span><span style="color: #000000">&nbsp;ArrayList&nbsp;items&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;ArrayList();<br />
<img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" /><br />
<img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;This&nbsp;function&nbsp;is&nbsp;internally&nbsp;invoked&nbsp;by&nbsp;IParserAccessor.AddParsedSubObject(Object).</span><span style="color: #008000"><br />
<img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">protected</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">override</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;AddParsedSubObject(Object&nbsp;obj)&nbsp;<br />
<img id="Codehighlighter1_738_812_Open_Image" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_738_812_Open_Text').style.display='none'; document.getElementById('Codehighlighter1_738_812_Closed_Image').style.display='inline'; document.getElementById('Codehighlighter1_738_812_Closed_Text').style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_738_812_Closed_Image" style="display: none" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_738_812_Closed_Text').style.display='none'; document.getElementById('Codehighlighter1_738_812_Open_Image').style.display='inline'; document.getElementById('Codehighlighter1_738_812_Open_Text').style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;</span><span id="Codehighlighter1_738_812_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.cnblogs.com/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_738_812_Open_Text"><span style="color: #000000">{<br />
<img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">&nbsp;(obj&nbsp;</span><span style="color: #0000ff">is</span><span style="color: #000000">&nbsp;TextBox)&nbsp;<br />
<img id="Codehighlighter1_773_807_Open_Image" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_773_807_Open_Text').style.display='none'; document.getElementById('Codehighlighter1_773_807_Closed_Image').style.display='inline'; document.getElementById('Codehighlighter1_773_807_Closed_Text').style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_773_807_Closed_Image" style="display: none" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_773_807_Closed_Text').style.display='none'; document.getElementById('Codehighlighter1_773_807_Open_Image').style.display='inline'; document.getElementById('Codehighlighter1_773_807_Open_Text').style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span id="Codehighlighter1_773_807_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.cnblogs.com/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_773_807_Open_Text"><span style="color: #000000">{<br />
<img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;items.Add(obj);<br />
<img src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" /><br />
<img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;Override&nbsp;'CreateChildControls'.&nbsp;</span><span style="color: #008000"><br />
<img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">protected</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">override</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;CreateChildControls()<br />
<img id="Codehighlighter1_905_1083_Open_Image" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_905_1083_Open_Text').style.display='none'; document.getElementById('Codehighlighter1_905_1083_Closed_Image').style.display='inline'; document.getElementById('Codehighlighter1_905_1083_Closed_Text').style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_905_1083_Closed_Image" style="display: none" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_905_1083_Closed_Text').style.display='none'; document.getElementById('Codehighlighter1_905_1083_Open_Image').style.display='inline'; document.getElementById('Codehighlighter1_905_1083_Open_Text').style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;</span><span id="Codehighlighter1_905_1083_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.cnblogs.com/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_905_1083_Open_Text"><span style="color: #000000">{<br />
<img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.Collections.IEnumerator&nbsp;myEnumerator&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;items.GetEnumerator();<br />
<img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">while</span><span style="color: #000000">(myEnumerator.MoveNext())<br />
<img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">this</span><span style="color: #000000">.Controls.Add((TextBox)myEnumerator.Current);<br />
<img src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align="top"  alt="" />}</span></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;<br />
<img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" /></span></div>
<p>（以上示例来自我msdn）<br />
我们通过重写ControlBuilder的GetChildControlType()方法来实现解析前的判断。<br />
<br />
<br />
</p>
 <img src ="http://www.cnblogs.com/Henllyee/aggbug/1208518.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/37545/" target="_blank">[新闻]阿里巴巴集团再向淘宝注资20亿元</a>]]></description></item><item><title>asp.net控件开发(二)--------简单属性</title><link>http://www.cnblogs.com/Henllyee/archive/2008/05/15/1197670.html</link><dc:creator>Henllyee Cui</dc:creator><author>Henllyee Cui</author><pubDate>Thu, 15 May 2008 01:30:00 GMT</pubDate><guid>http://www.cnblogs.com/Henllyee/archive/2008/05/15/1197670.html</guid><wfw:comment>http://www.cnblogs.com/Henllyee/comments/1197670.html</wfw:comment><comments>http://www.cnblogs.com/Henllyee/archive/2008/05/15/1197670.html#Feedback</comments><slash:comments>11</slash:comments><wfw:commentRss>http://www.cnblogs.com/Henllyee/comments/commentRss/1197670.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/Henllyee/services/trackbacks/1197670.html</trackback:ping><description><![CDATA[摘要: 我们开发出来的控件一般都需要跟使用控件的人编程人员交互，其中交互有两个途径：一个是属性还有就是事件。属性可能是简单的类型如：int、string等并不太复杂的类型，也有比较复杂的类型如：集合。一、属性实现交互我们还是沿用上面的例子来添加属性 PicShow示例：publicclassPicShow:Control{privatestring_imgUrl;//属性publicvirtualstri&nbsp;&nbsp;<a href='http://www.cnblogs.com/Henllyee/archive/2008/05/15/1197670.html'>阅读全文</a><img src ="http://www.cnblogs.com/Henllyee/aggbug/1197670.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/37544/" target="_blank">[新闻]56被关一月 危机的是整个视频业</a>]]></description></item><item><title>女人嫁IT的十大理由</title><link>http://www.cnblogs.com/Henllyee/archive/2008/05/14/1196659.html</link><dc:creator>Henllyee Cui</dc:creator><author>Henllyee Cui</author><pubDate>Wed, 14 May 2008 05:26:00 GMT</pubDate><guid>http://www.cnblogs.com/Henllyee/archive/2008/05/14/1196659.html</guid><wfw:comment>http://www.cnblogs.com/Henllyee/comments/1196659.html</wfw:comment><comments>http://www.cnblogs.com/Henllyee/archive/2008/05/14/1196659.html#Feedback</comments><slash:comments>11</slash:comments><wfw:commentRss>http://www.cnblogs.com/Henllyee/comments/commentRss/1196659.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/Henllyee/services/trackbacks/1196659.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1．不会饿死（生存需求可以得到保障，大家好象没听说IT男人的收入最低吧）<br />
　　2．不用被淘汰（IT男人比较容易接受新技术，所以也比较容易接受你的衰老）<br />
　　3．大多IT男人单纯、可爱（技术型男人的基本特征，其实有时候傻得好可爱哦）<br />
　　4．大多IT男人执着、追求完美（比较专一，技术型嘛，不专一可有点混不下去的哦）<br />
　　5．大多IT男人比较浪漫（不理解他们的浪漫的除外，因为他们偶尔会用专业术语多点）<br />
　　6．大多IT男人懂生活（生活跟IT项目管理其实是一个道理，不懂请咨询我）<br />
　　7．大多IT男人专一（如果他不专一，那是他开始系统分析和设计没做好，因为实施一个系统后，他就知道维护一个系统是不容易的、长期的，不是短暂的，所以请记住，大多IT男人会用一生去维护你们的爱情）<br />
　　8．IT男人都知道关系型、网络、结点、链接、链路、网关......所以他也<br />
　　9．IT男人很帅（如果不帅，那就是你不懂得欣赏他！）<br />
　　10．总结：各位MM，给他一个点，他会给你整个世界！给他一片天，他会给你绘出美丽的彩虹，给他一个吻，他会给你整个人，给他一个家，他会用心去维护她！<img id="paperPicArea1" style="display: none; position: relative" src="http://imgcache.qq.com/ac/qzone_v4/b.gif"  alt="" /> 
<img src ="http://www.cnblogs.com/Henllyee/aggbug/1196659.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/37543/" target="_blank">[新闻]李开复：中文搜索是谷歌战略核心</a>]]></description></item><item><title>asp.net 控件开发（一）---显示控件内容</title><link>http://www.cnblogs.com/Henllyee/archive/2008/05/09/1189396.html</link><dc:creator>Henllyee Cui</dc:creator><author>Henllyee Cui</author><pubDate>Fri, 09 May 2008 01:24:00 GMT</pubDate><guid>http://www.cnblogs.com/Henllyee/archive/2008/05/09/1189396.html</guid><wfw:comment>http://www.cnblogs.com/Henllyee/comments/1189396.html</wfw:comment><comments>http://www.cnblogs.com/Henllyee/archive/2008/05/09/1189396.html#Feedback</comments><slash:comments>8</slash:comments><wfw:commentRss>http://www.cnblogs.com/Henllyee/comments/commentRss/1189396.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/Henllyee/services/trackbacks/1189396.html</trackback:ping><description><![CDATA[<p>asp.net控件的显示自然会离不开输出html、css、javascript等前台的显示内容，所以开发一个控件的时候第一件事就是要知道如何输出客户端要显示的内容。<br />
<strong>一、选择基类<br />
</strong>&nbsp;&nbsp;&nbsp;&nbsp;asp.net中所有的标准控件都可以拿过来作为基类，如果我们要开发的控件只是对原有的标准控件做一些功能上的加强的话（如：你对TreeView的CheckBox添加一些随动的功能），就可以直接拿标准控件过来作为基类。<br />
一般的如果开发的控件从标准里面找不到合适的，可以从三个类中来继承：<br />
&nbsp;&nbsp;&nbsp;&nbsp;System.Web.UI.Control<br />
&nbsp;&nbsp;&nbsp;&nbsp;System.Web.UI.WebControls.WebControl<br />
&nbsp;&nbsp;&nbsp;&nbsp;System.Web.UI.WebControls.CompositeControl<br />
下面介绍下这三个类的关系跟区别：<br />
&nbsp;&nbsp;&nbsp;&nbsp;Control:只提供简单的呈现，没有对css的支持。如：Literal控件<br />
&nbsp;&nbsp;&nbsp;&nbsp;WebControl:建立了对控件外观的支持。适合可视化的控件来继承&nbsp;，如：Button<br />
&nbsp;&nbsp;&nbsp;&nbsp;CompositeControl:是派生多个控件复合的。适合开发应用asp.net中的标准控件。<br />
&nbsp;&nbsp;&nbsp;&nbsp;三者的关系：Control是asp.net所有控件的基类&nbsp;，WebControl是从Control中继承而来，CompositeControl是从WebControl中继承而来。<br />
<br />
<strong>二、如何呈现</strong>&nbsp;&nbsp;<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;<strong>Control的呈现</strong>&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Control类中的呈现是通过方法Render来实现的。Render的原型：<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;protected internal virtual void Render(HtmlTextWriter writer){...}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;HtmlTextWriter writer 参数是在运行时有调用Render方法的框架所提供，所以我们可以同过重写Render方法来实现内容的呈现。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;HelloWorld示例：&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font face="Verdana">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font face="Verdana"></p>
<p><font face="Verdana"></p>
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" /><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">class</span><span style="color: #000000">&nbsp;HelloWorld&nbsp;:&nbsp;Control<br />
<img id="Codehighlighter1_42_178_Open_Image" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_42_178_Open_Text').style.display='none'; document.getElementById('Codehighlighter1_42_178_Closed_Image').style.display='inline'; document.getElementById('Codehighlighter1_42_178_Closed_Text').style.display='inline';" alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_42_178_Closed_Image" style="display: none" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_42_178_Closed_Text').style.display='none'; document.getElementById('Codehighlighter1_42_178_Open_Image').style.display='inline'; document.getElementById('Codehighlighter1_42_178_Open_Text').style.display='inline';" alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span id="Codehighlighter1_42_178_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img alt="" src="http://www.cnblogs.com/Images/dot.gif" /></span><span id="Codehighlighter1_42_178_Open_Text"><span style="color: #000000"