﻿<?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>博客园-Teddy's Knowledge Base</title><link>http://www.cnblogs.com/teddyma/</link><description /><language>zh-cn</language><lastBuildDate>Sat, 04 Jul 2009 00:15:50 GMT</lastBuildDate><pubDate>Sat, 04 Jul 2009 00:15:50 GMT</pubDate><ttl>60</ttl><item><title>EF上海再次急招2个.NET Developer，有意者请和我联系</title><link>http://www.cnblogs.com/teddyma/archive/2009/06/29/1512956.html</link><dc:creator>Teddy's Knowledge Base</dc:creator><author>Teddy's Knowledge Base</author><pubDate>Mon, 29 Jun 2009 01:28:00 GMT</pubDate><guid>http://www.cnblogs.com/teddyma/archive/2009/06/29/1512956.html</guid><wfw:comment>http://www.cnblogs.com/teddyma/comments/1512956.html</wfw:comment><comments>http://www.cnblogs.com/teddyma/archive/2009/06/29/1512956.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnblogs.com/teddyma/comments/commentRss/1512956.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/teddyma/services/trackbacks/1512956.html</trackback:ping><description><![CDATA[<p><font color="#000080" face="Arial" size="4"><span style="font-size: 15px;">有意者请在<a href="http://www.cnblogs.com/teddyma/contact.aspx?id=1"><strong style="color: red; ">这里</strong></a>给我留言。</span></font></p>
<p>两个Position：</p>
<p class="MsoNormal"><strong style="mso-bidi-font-weight:normal"><em><span lang="EN-US" style="font-family:&quot;Verdana&quot;,&quot;sans-serif&quot;;mso-fareast-font-family:SimSun;
color:black">Senior Software Engineer</span></em></strong><strong style="mso-bidi-font-weight:normal"><span lang="EN-US" style="font-family:&quot;Verdana&quot;,&quot;sans-serif&quot;;
mso-fareast-font-family:SimSun;color:black"><o:p></o:p></span></strong></p>
<p class="MsoNormal"><span lang="EN-US" style="font-size:10.0pt;font-family:&quot;Verdana&quot;,&quot;sans-serif&quot;;
mso-fareast-font-family:SimSun;color:black">(full-time position, based in
Shanghai)<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US" style="font-size:10.0pt;font-family:&quot;Verdana&quot;,&quot;sans-serif&quot;;
mso-fareast-font-family:SimSun;color:black"><br />
* Bachelors degree in computer science, Master&#8217;s desirable<br />
* Over 4 years solid working experience on software developing <br />
* Good skill on Visual Studio, client-side scripting, Java, ASP.NET (VB), C#<br />
* Strong SQL Server,&nbsp;</span><span lang="EN-US" style="font-size:10.0pt;
font-family:&quot;Arial&quot;,&quot;sans-serif&quot;;mso-fareast-font-family:SimSun;color:blue">&nbsp;</span><span lang="EN-US" style="font-size:10.0pt;font-family:&quot;Arial&quot;,&quot;sans-serif&quot;;mso-fareast-font-family:
SimSun;color:black">J</span><span lang="EN-US" style="font-size:10.0pt;
font-family:&quot;Verdana&quot;,&quot;sans-serif&quot;;mso-fareast-font-family:SimSun;color:black">avaScript,
HTML, XML, XSLT, CSS., webservices.<br />
* Good communication skill and good teamwork sprit<br />
* Can work under pressure and be willing to meet the challenge<o:p></o:p></span></p>
<p><span  style="font-family: Verdana; font-size: 13px; ">* Fluency in English, both on
speaking and writing</span></p>
<p>&nbsp;</p>
<p class="MsoNormal"><span lang="EN-US" style="font-size:11.0pt;font-family:&quot;Arial&quot;,&quot;sans-serif&quot;;color:navy"><strong>Software
Engineer</strong></span></p>
<p class="MsoNormal" style="layout-grid-mode:char"><span lang="EN-US" style="font-size:11.0pt;font-family:&quot;Arial&quot;,&quot;sans-serif&quot;;color:navy">Candidate
should have thorough knowledge of design, development, and deployment of
large-scale web-based solutions using the Microsoft platform (IIS, ASP.NET,
MSSQL).&nbsp; Desirable experience includes: Multi-tiered web applications,
database administration, e-commerce, e-learning <o:p></o:p></span></p>
<p class="MsoNormal" style="layout-grid-mode:char"><span lang="EN-US" style="font-size:11.0pt;font-family:&quot;Arial&quot;,&quot;sans-serif&quot;;color:navy">Responsibilities
will include:<o:p></o:p></span></p>
<p class="MsoNormal" style="margin-left:75.0pt;text-indent:-21.0pt;mso-list:l1 level1 lfo2;
tab-stops:list 75.0pt;layout-grid-mode:char"><span lang="EN-US" style="font-size:11.0pt;font-family:Wingdings;mso-fareast-font-family:
Wingdings;mso-bidi-font-family:Wingdings;color:navy"><span style="mso-list:
Ignore">l<span style="font:7.0pt &quot;Times New Roman&quot;">&nbsp; </span></span></span><span lang="EN-US" style="font-size:11.0pt;font-family:&quot;Arial&quot;,&quot;sans-serif&quot;;color:navy">Port
existing code-base to .NET<o:p></o:p></span></p>
<p class="MsoNormal" style="margin-left:75.0pt;text-indent:-21.0pt;mso-list:l1 level1 lfo2;
tab-stops:list 75.0pt;layout-grid-mode:char"><span lang="EN-US" style="font-size:11.0pt;font-family:Wingdings;mso-fareast-font-family:
Wingdings;mso-bidi-font-family:Wingdings;color:navy"><span style="mso-list:
Ignore">l<span style="font:7.0pt &quot;Times New Roman&quot;">&nbsp; </span></span></span><span lang="EN-US" style="font-size:11.0pt;font-family:&quot;Arial&quot;,&quot;sans-serif&quot;;color:navy">create
new applications with .NET<o:p></o:p></span></p>
<p class="MsoNormal" style="margin-left:75.0pt;text-indent:-21.0pt;mso-list:l1 level1 lfo2;
tab-stops:list 75.0pt;layout-grid-mode:char"><span lang="EN-US" style="font-size:11.0pt;font-family:Wingdings;mso-fareast-font-family:
Wingdings;mso-bidi-font-family:Wingdings;color:navy"><span style="mso-list:
Ignore">l<span style="font:7.0pt &quot;Times New Roman&quot;">&nbsp; </span></span></span><span lang="EN-US" style="font-size:11.0pt;font-family:&quot;Arial&quot;,&quot;sans-serif&quot;;color:navy">Design/Develop/Test/Deploy
web applications</span></p>
<p class="MsoNormal"><span lang="EN-US" style="font-size:11.0pt;font-family:&quot;Arial&quot;,&quot;sans-serif&quot;;color:navy"><strong>Qualifications:</strong></span></p>
<p class="MsoNormal" style="margin-left:22.45pt;text-indent:-21.0pt;mso-list:
l0 level1 lfo1;tab-stops:list 22.45pt;layout-grid-mode:char"><span lang="EN-US" style="font-size:11.0pt;font-family:Wingdings;mso-fareast-font-family:
Wingdings;mso-bidi-font-family:Wingdings;color:navy"><span style="mso-list:
Ignore">l<span style="font:7.0pt &quot;Times New Roman&quot;">&nbsp; </span></span></span><span lang="EN-US" style="font-size:11.0pt;font-family:&quot;Arial&quot;,&quot;sans-serif&quot;;color:navy">Bachelors
degree in computer science<o:p></o:p></span></p>
<p class="MsoNormal" style="margin-left:22.45pt;text-indent:-21.0pt;mso-list:
l0 level1 lfo1;tab-stops:list 22.45pt;layout-grid-mode:char"><span lang="EN-US" style="font-size:11.0pt;font-family:Wingdings;mso-fareast-font-family:
Wingdings;mso-bidi-font-family:Wingdings;color:navy"><span style="mso-list:
Ignore">l<span style="font:7.0pt &quot;Times New Roman&quot;">&nbsp; </span></span></span><span lang="EN-US" style="font-size:11.0pt;font-family:&quot;Arial&quot;,&quot;sans-serif&quot;;color:navy">Over
3 years solid working experience on software developing of .NET <span style="mso-spacerun:yes">&nbsp;</span><o:p></o:p></span></p>
<p class="MsoNormal" style="margin-left:22.45pt;text-indent:-21.0pt;mso-list:
l0 level1 lfo1;tab-stops:list 22.45pt;layout-grid-mode:char"><span lang="EN-US" style="font-size:11.0pt;font-family:Wingdings;mso-fareast-font-family:
Wingdings;mso-bidi-font-family:Wingdings;color:navy"><span style="mso-list:
Ignore">l<span style="font:7.0pt &quot;Times New Roman&quot;">&nbsp; </span></span></span><span lang="EN-US" style="font-size:11.0pt;font-family:&quot;Arial&quot;,&quot;sans-serif&quot;;color:navy">Good
skill on Visual Studio, Javascript, C#<o:p></o:p></span></p>
<p class="MsoNormal" style="margin-left:22.45pt;text-indent:-21.0pt;mso-list:
l0 level1 lfo1;tab-stops:list 22.45pt;layout-grid-mode:char"><span lang="EN-US" style="font-size:11.0pt;font-family:Wingdings;mso-fareast-font-family:
Wingdings;mso-bidi-font-family:Wingdings;color:navy"><span style="mso-list:
Ignore">l<span style="font:7.0pt &quot;Times New Roman&quot;">&nbsp; </span></span></span><span lang="EN-US" style="font-size:11.0pt;font-family:&quot;Arial&quot;,&quot;sans-serif&quot;;color:navy">Be
good at XML, XSLT, Web services, SQL<o:p></o:p></span></p>
<p class="MsoNormal" style="margin-left:22.45pt;text-indent:-21.0pt;mso-list:
l0 level1 lfo1;tab-stops:list 22.45pt;layout-grid-mode:char"><span lang="EN-US" style="font-size:11.0pt;font-family:Wingdings;mso-fareast-font-family:
Wingdings;mso-bidi-font-family:Wingdings;color:navy"><span style="mso-list:
Ignore">l<span style="font:7.0pt &quot;Times New Roman&quot;">&nbsp; </span></span></span><span lang="EN-US" style="font-size:11.0pt;font-family:&quot;Arial&quot;,&quot;sans-serif&quot;;color:navy">Good
communication skill and good teamwork sprit<o:p></o:p></span></p>
<p class="MsoNormal" style="margin-left:22.45pt;text-indent:-21.0pt;mso-list:
l0 level1 lfo1;tab-stops:list 22.45pt;layout-grid-mode:char"><span lang="EN-US" style="font-size:11.0pt;font-family:Wingdings;mso-fareast-font-family:
Wingdings;mso-bidi-font-family:Wingdings;color:navy"><span style="mso-list:
Ignore">l<span style="font:7.0pt &quot;Times New Roman&quot;">&nbsp; </span></span></span><span lang="EN-US" style="font-size:11.0pt;font-family:&quot;Arial&quot;,&quot;sans-serif&quot;;color:navy">Can
work under pressure and be willing to meet the challenge <o:p></o:p></span></p>
<p class="MsoNormal" style="margin-left:22.45pt;text-indent:-21.0pt;mso-list:
l0 level1 lfo1;tab-stops:list 22.45pt;layout-grid-mode:char"><span lang="EN-US" style="font-size:11.0pt;font-family:Wingdings;mso-fareast-font-family:
Wingdings;mso-bidi-font-family:Wingdings;color:navy"><span style="mso-list:
Ignore">l<span style="font:7.0pt &quot;Times New Roman&quot;">&nbsp; </span></span></span><span lang="EN-US" style="font-size:11.0pt;font-family:&quot;Arial&quot;,&quot;sans-serif&quot;;color:navy">Self-Learning
capability<o:p></o:p></span></p>
<p class="MsoNormal" style="margin-left:22.45pt;text-indent:-21.0pt;mso-list:
l0 level1 lfo1;tab-stops:list 22.45pt;layout-grid-mode:char"><span lang="EN-US" style="font-size:11.0pt;font-family:Wingdings;mso-fareast-font-family:
Wingdings;mso-bidi-font-family:Wingdings;color:navy"><span style="mso-list:
Ignore">l<span style="font:7.0pt &quot;Times New Roman&quot;">&nbsp; </span></span></span><span lang="EN-US" style="font-size:11.0pt;font-family:&quot;Arial&quot;,&quot;sans-serif&quot;;color:navy">CET
4, fluency in English, both on speaking and writing <o:p></o:p></span></p>
<p><span style="font-family: Arial; font-size: 15px; color: #000080; ">&nbsp;</span></p><img src ="http://www.cnblogs.com/teddyma/aggbug/1512956.html?type=1" width = "1" height = "1" /><br/><br/>--------------------------<br/>新闻：<a href="http://news.cnblogs.com/n/47965/" target="_blank">Google App Engine宕机6小时——云的安全在哪里？</a><br/>网站导航: <a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&nbsp;&nbsp;<a href="http://news.cnblogs.com" target="_blank">新闻</a>&nbsp;&nbsp;<a href="http://dotnet.cnblogs.com" target="_blank">.NET频道</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com" target="_blank">社区</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/q/" target="_blank">博问</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/ing/" target="_blank">闪存</a>&nbsp;&nbsp;<a href="http://zzk.cnblogs.com" target="_blank">找找看</a>]]></description></item><item><title>AdoNet vs LinqToSql vs NIntegrateQuery查询性能测试</title><link>http://www.cnblogs.com/teddyma/archive/2009/06/07/1497903.html</link><dc:creator>Teddy's Knowledge Base</dc:creator><author>Teddy's Knowledge Base</author><pubDate>Sat, 06 Jun 2009 17:45:00 GMT</pubDate><guid>http://www.cnblogs.com/teddyma/archive/2009/06/07/1497903.html</guid><wfw:comment>http://www.cnblogs.com/teddyma/comments/1497903.html</wfw:comment><comments>http://www.cnblogs.com/teddyma/archive/2009/06/07/1497903.html#Feedback</comments><slash:comments>9</slash:comments><wfw:commentRss>http://www.cnblogs.com/teddyma/comments/commentRss/1497903.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/teddyma/services/trackbacks/1497903.html</trackback:ping><description><![CDATA[摘要: AdoNet vs LinqToSql vs NIntegrateQuery查询性能测试.

先上测试结果:

AdoNetTest: 267ms
AdoNetCachedCommandTest: 182ms
LinqToSqlTest: 3191ms
LinqToSqlCompiledQueryTest: 386ms
NIntegrateQueryTest: 266ms &nbsp;&nbsp;<a href='http://www.cnblogs.com/teddyma/archive/2009/06/07/1497903.html'>阅读全文</a><img src ="http://www.cnblogs.com/teddyma/aggbug/1497903.html?type=1" width = "1" height = "1" /><br/><br/>--------------------------<br/>新闻：<a href="http://news.cnblogs.com/n/47961/" target="_blank">微软新推社交网站Windows Live Planet</a><br/>网站导航: <a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&nbsp;&nbsp;<a href="http://news.cnblogs.com" target="_blank">新闻</a>&nbsp;&nbsp;<a href="http://dotnet.cnblogs.com" target="_blank">.NET频道</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com" target="_blank">社区</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/q/" target="_blank">博问</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/ing/" target="_blank">闪存</a>&nbsp;&nbsp;<a href="http://zzk.cnblogs.com" target="_blank">找找看</a>]]></description></item><item><title>EF上海急招Flex Developer, 待遇从优,有意者请和我联系(人已招到,Closed)</title><link>http://www.cnblogs.com/teddyma/archive/2009/06/04/1495924.html</link><dc:creator>Teddy's Knowledge Base</dc:creator><author>Teddy's Knowledge Base</author><pubDate>Thu, 04 Jun 2009 02:41:00 GMT</pubDate><guid>http://www.cnblogs.com/teddyma/archive/2009/06/04/1495924.html</guid><description><![CDATA[<p>要求Flex3.0开发经验,ASP.NET前端开发经验，本科，英语至少CET4最好CET6以上。</p>
<div>
<table vspace="0" align="left" cellpadding="0" cellspacing="0" hspace="0">
    <tr>
        <td style="padding: 5pt 9pt;" valign="top" align="left">
        <p class="MsoNormal"><strong><u style="text-decoration: none;"><span style="font-size: 10pt; font-family: Verdana,sans-serif;" lang="EN-US">Main
        responsibilities</span></u></strong></p>
        <p class="MsoNormal" style="margin-left: 36pt; text-align: justify; text-indent: -18pt;"><span style="font-size: 10pt; font-family: &quot;Verdana&quot;,&quot;sans-serif&quot;;" lang="EN-US">-</span><span style="font-size: 7pt;" lang="EN-US">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="font-size: 10pt; font-family: &quot;Verdana&quot;,&quot;sans-serif&quot;;" lang="EN-US">Develop
        front end components (<u2:city u3:st="on"><u2:place u3:st="on">Ajax</u2:place></u2:city>,
        javascript, HTML etc.) of Englishtown&#8217;s web-site<o:p></o:p></span></p>
        <p class="MsoNormal" style="margin-left: 36pt; text-align: justify; text-indent: -18pt;"><span style="font-size: 10pt; font-family: &quot;Verdana&quot;,&quot;sans-serif&quot;;" lang="EN-US">-</span><span style="font-size: 7pt;" lang="EN-US">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="font-size: 10pt; font-family: &quot;Verdana&quot;,&quot;sans-serif&quot;;" lang="EN-US">Work
        on Flash/Flex coding <o:p></o:p></span></p>
        <p class="MsoNormal" style="margin-left: 36pt; text-align: justify; text-indent: -18pt;"><span style="font-size: 10pt; font-family: &quot;Verdana&quot;,&quot;sans-serif&quot;;" lang="EN-US">-</span><span style="font-size: 7pt;" lang="EN-US">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="font-size: 10pt; font-family: &quot;Verdana&quot;,&quot;sans-serif&quot;;" lang="EN-US">Help
        designers on graphic slicing (convert PSD files to HTML files with CSS) <o:p></o:p></span></p>
        <p class="MsoNormal" style="margin-left: 18pt; text-align: justify;"><span style="font-size: 10pt; font-family: &quot;Verdana&quot;,&quot;sans-serif&quot;;" lang="EN-US"><o:p>&nbsp;</o:p></span></p>
        <p class="MsoNormal" style="text-align: justify;"><strong><u style="text-decoration: none;"><span style="font-size: 10pt; font-family: Verdana,sans-serif;" lang="EN-US">Requirements</span></u></strong></p>
        <p class="MsoNormal" style="margin-left: 36pt; text-indent: -18pt;"><span style="font-size: 10pt; font-family: &quot;Verdana&quot;,&quot;sans-serif&quot;;" lang="EN-US">-</span><span style="font-size: 7pt;" lang="EN-US">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
        </span><span style="font-size: 10pt; font-family: &quot;Verdana&quot;,&quot;sans-serif&quot;;" lang="EN-US">Rich
        experience in Flash/Flex, ActionScript3.<o:p></o:p></span></p>
        <p class="MsoNormal" style="margin-left: 36pt; text-indent: -18pt;"><span style="font-size: 10pt; font-family: &quot;Verdana&quot;,&quot;sans-serif&quot;;" lang="EN-US">-</span><span style="font-size: 7pt;" lang="EN-US">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
        </span><span style="font-size: 10pt; font-family: &quot;Verdana&quot;,&quot;sans-serif&quot;;" lang="EN-US">Experience
        in HTML, JavaScript and CSS.<o:p></o:p></span></p>
        <p class="MsoNormal" style="margin-left: 36pt; text-indent: -18pt;"><span style="font-size: 10pt; font-family: &quot;Verdana&quot;,&quot;sans-serif&quot;;" lang="EN-US">-</span><span style="font-size: 7pt;" lang="EN-US">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
        </span><span style="font-size: 10pt; font-family: &quot;Verdana&quot;,&quot;sans-serif&quot;;" lang="EN-US">Experience
        in Photoshop.<o:p></o:p></span></p>
        <p class="MsoNormal" style="margin-left: 36pt; text-indent: -18pt;"><span style="font-size: 10pt; font-family: &quot;Verdana&quot;,&quot;sans-serif&quot;;" lang="EN-US">-</span><span style="font-size: 7pt;" lang="EN-US">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
        </span><span style="font-size: 10pt; font-family: &quot;Verdana&quot;,&quot;sans-serif&quot;;" lang="EN-US">Solid
        coding skill on web-based application system with rich client experience.<o:p></o:p></span></p>
        <p class="MsoNormal" style="margin-left: 36pt; text-indent: -18pt;"><span style="font-size: 10pt; font-family: &quot;Verdana&quot;,&quot;sans-serif&quot;;" lang="EN-US">-</span><span style="font-size: 7pt;" lang="EN-US">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
        </span><u2:city u3:st="on"><u2:place u3:st="on"><span style="font-size: 10pt; font-family: &quot;Verdana&quot;,&quot;sans-serif&quot;;" lang="EN-US">AJAX</span></u2:place></u2:city>
        project experience is a plus.<o:p></o:p></p>
        <p class="MsoNormal" style="margin-left: 36pt; text-indent: -18pt;"><span style="font-size: 10pt; font-family: &quot;Verdana&quot;,&quot;sans-serif&quot;;" lang="EN-US">-</span><span style="font-size: 7pt;" lang="EN-US">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
        </span><span style="font-size: 10pt; font-family: &quot;Verdana&quot;,&quot;sans-serif&quot;;" lang="EN-US">1+
        year web application development and GUI design experience.<o:p></o:p></span></p>
        <p class="MsoNormal" style="margin-left: 36pt; text-indent: -18pt;"><span style="font-size: 10pt; font-family: &quot;Verdana&quot;,&quot;sans-serif&quot;;" lang="EN-US">-</span><span style="font-size: 7pt;" lang="EN-US">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
        </span><span style="font-size: 10pt; font-family: &quot;Verdana&quot;,&quot;sans-serif&quot;;" lang="EN-US">Good
        skills on Visual Studio .NET, client-side scripting, C#, VB.<o:p></o:p></span></p>
        <p class="MsoNormal" style="margin-left: 36pt; text-indent: -18pt;"><span style="font-size: 10pt; font-family: &quot;Verdana&quot;,&quot;sans-serif&quot;;" lang="EN-US">-</span><span style="font-size: 7pt;" lang="EN-US">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
        </span><span style="font-size: 10pt; font-family: &quot;Verdana&quot;,&quot;sans-serif&quot;;" lang="EN-US">Good
        skills on<span>&nbsp; </span>XML, XSLT, Web Service ,SQL.<o:p></o:p></span></p>
        <p class="MsoNormal" style="margin-left: 36pt; text-indent: -18pt;"><span style="font-size: 10pt; font-family: &quot;Verdana&quot;,&quot;sans-serif&quot;;" lang="EN-US">-</span><span style="font-size: 7pt;" lang="EN-US">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
        </span><span style="font-size: 10pt; font-family: &quot;Verdana&quot;,&quot;sans-serif&quot;;" lang="EN-US">Familiarity
        with VML, SVG is a plus.<o:p></o:p></span></p>
        <p class="MsoNormal" style="margin-left: 36pt; text-indent: -18pt;"><span style="font-size: 10pt; font-family: &quot;Verdana&quot;,&quot;sans-serif&quot;;" lang="EN-US">-</span><span style="font-size: 7pt;" lang="EN-US">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
        </span><span style="font-size: 10pt; font-family: &quot;Verdana&quot;,&quot;sans-serif&quot;;" lang="EN-US">Fluency
        in English, both on speaking and writing.<o:p></o:p></span></p>
        <p class="MsoNormal" style="margin-left: 36pt; text-indent: -18pt;"><span style="font-size: 10pt; font-family: &quot;Verdana&quot;,&quot;sans-serif&quot;;" lang="EN-US">-</span><span style="font-size: 7pt;" lang="EN-US">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
        </span><span style="font-size: 10pt; font-family: &quot;Verdana&quot;,&quot;sans-serif&quot;;" lang="EN-US">Strong
        problem solving and troubleshooting skills.</span></p>
        <p class="MsoNormal" style="margin-left: 36pt; text-indent: -18pt;"><span style="font-family: &quot;Verdana&quot;,&quot;sans-serif&quot;;" lang="EN-US">-</span><span style="font-size: 7pt;" lang="EN-US">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
        </span><span style="font-size: 10pt; font-family: &quot;Verdana&quot;,&quot;sans-serif&quot;;" lang="EN-US">Self-Learning
        capability.</span></p>
        </td>
    </tr>
</table>
</div>
<p>&nbsp;</p><img src ="http://www.cnblogs.com/teddyma/aggbug/1495924.html?type=1" width = "1" height = "1" /><br/><br/>--------------------------<br/>新闻：<a href="http://news.cnblogs.com/n/47960/" target="_blank">火狐3.5版被指推出太匆忙：存在50多个漏洞</a><br/>网站导航: <a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&nbsp;&nbsp;<a href="http://news.cnblogs.com" target="_blank">新闻</a>&nbsp;&nbsp;<a href="http://dotnet.cnblogs.com" target="_blank">.NET频道</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com" target="_blank">社区</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/q/" target="_blank">博问</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/ing/" target="_blank">闪存</a>&nbsp;&nbsp;<a href="http://zzk.cnblogs.com" target="_blank">找找看</a>]]></description></item><item><title>提前发布4/25上海俱乐部活动演讲&amp;ldquo;集中化WCF服务配置管理&amp;rdquo;示例程序</title><link>http://www.cnblogs.com/teddyma/archive/2009/04/21/1440086.html</link><dc:creator>Teddy's Knowledge Base</dc:creator><author>Teddy's Knowledge Base</author><pubDate>Mon, 20 Apr 2009 16:45:00 GMT</pubDate><guid>http://www.cnblogs.com/teddyma/archive/2009/04/21/1440086.html</guid><wfw:comment>http://www.cnblogs.com/teddyma/comments/1440086.html</wfw:comment><comments>http://www.cnblogs.com/teddyma/archive/2009/04/21/1440086.html#Feedback</comments><slash:comments>5</slash:comments><wfw:commentRss>http://www.cnblogs.com/teddyma/comments/commentRss/1440086.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/teddyma/services/trackbacks/1440086.html</trackback:ping><description><![CDATA[摘要: 本示例程序具体演示如下内容：
1) 基于SQL Server数据库的集中化WCF服务配置管理;
2) 集中化ConnectingString管理;
3) 集中化AppVariable管理;
4) 基于集中化配置管理的WCF ServiceHostFactory和WCF ServiceLocator;
5) 基于集中化配置管理的跨WCF的LINQ Style分页、排序查询及DataSource控件的使用;
6) 整合本地ServiceLocator的WCF服务发布和消费;&nbsp;&nbsp;<a href='http://www.cnblogs.com/teddyma/archive/2009/04/21/1440086.html'>阅读全文</a><img src ="http://www.cnblogs.com/teddyma/aggbug/1440086.html?type=1" width = "1" height = "1" /><br/><br/>--------------------------<br/>新闻：<a href="http://news.cnblogs.com/n/47959/" target="_blank">Google对手机搜索进行优化升级</a><br/>网站导航: <a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&nbsp;&nbsp;<a href="http://news.cnblogs.com" target="_blank">新闻</a>&nbsp;&nbsp;<a href="http://dotnet.cnblogs.com" target="_blank">.NET频道</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com" target="_blank">社区</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/q/" target="_blank">博问</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/ing/" target="_blank">闪存</a>&nbsp;&nbsp;<a href="http://zzk.cnblogs.com" target="_blank">找找看</a>]]></description></item><item><title>Apply SOA Design Patterns with WCF (5) WCF Based ASP.NET DataSouce Control (基于WCF的数据源控件)</title><link>http://www.cnblogs.com/teddyma/archive/2009/03/30/1424710.html</link><dc:creator>Teddy's Knowledge Base</dc:creator><author>Teddy's Knowledge Base</author><pubDate>Sun, 29 Mar 2009 16:03:00 GMT</pubDate><guid>http://www.cnblogs.com/teddyma/archive/2009/03/30/1424710.html</guid><wfw:comment>http://www.cnblogs.com/teddyma/comments/1424710.html</wfw:comment><comments>http://www.cnblogs.com/teddyma/archive/2009/03/30/1424710.html#Feedback</comments><slash:comments>3</slash:comments><wfw:commentRss>http://www.cnblogs.com/teddyma/comments/commentRss/1424710.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/teddyma/services/trackbacks/1424710.html</trackback:ping><description><![CDATA[摘要: 本文介绍如何实现一个基于WCF的ASP.NET数据源控件,从而使得跨WCF通信的数据库CRUD,尤其是复杂的分页排序更简单。&nbsp;&nbsp;<a href='http://www.cnblogs.com/teddyma/archive/2009/03/30/1424710.html'>阅读全文</a><img src ="http://www.cnblogs.com/teddyma/aggbug/1424710.html?type=1" width = "1" height = "1" /><br/><br/>--------------------------<br/>新闻：<a href="http://news.cnblogs.com/n/47958/" target="_blank">风声又起 Windows 7 RTM版7月13日完成</a><br/>网站导航: <a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&nbsp;&nbsp;<a href="http://news.cnblogs.com" target="_blank">新闻</a>&nbsp;&nbsp;<a href="http://dotnet.cnblogs.com" target="_blank">.NET频道</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com" target="_blank">社区</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/q/" target="_blank">博问</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/ing/" target="_blank">闪存</a>&nbsp;&nbsp;<a href="http://zzk.cnblogs.com" target="_blank">找找看</a>]]></description></item><item><title>Apply SOA Design Patterns with WCF (4) WCF Database Paging &amp; Sorting (数据库端分页和排序)</title><link>http://www.cnblogs.com/teddyma/archive/2009/03/28/1423780.html</link><dc:creator>Teddy's Knowledge Base</dc:creator><author>Teddy's Knowledge Base</author><pubDate>Fri, 27 Mar 2009 16:24:00 GMT</pubDate><guid>http://www.cnblogs.com/teddyma/archive/2009/03/28/1423780.html</guid><wfw:comment>http://www.cnblogs.com/teddyma/comments/1423780.html</wfw:comment><comments>http://www.cnblogs.com/teddyma/archive/2009/03/28/1423780.html#Feedback</comments><slash:comments>14</slash:comments><wfw:commentRss>http://www.cnblogs.com/teddyma/comments/commentRss/1423780.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/teddyma/services/trackbacks/1423780.html</trackback:ping><description><![CDATA[摘要: 本文提供一种支持跨WCF通讯的数据库端分页和排序(以及更多超过你预期的功能)方案。&nbsp;&nbsp;<a href='http://www.cnblogs.com/teddyma/archive/2009/03/28/1423780.html'>阅读全文</a><img src ="http://www.cnblogs.com/teddyma/aggbug/1423780.html?type=1" width = "1" height = "1" /><br/><br/>--------------------------<br/>新闻：<a href="http://news.cnblogs.com/n/47957/" target="_blank">乔布斯和埃利森</a><br/>网站导航: <a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&nbsp;&nbsp;<a href="http://news.cnblogs.com" target="_blank">新闻</a>&nbsp;&nbsp;<a href="http://dotnet.cnblogs.com" target="_blank">.NET频道</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com" target="_blank">社区</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/q/" target="_blank">博问</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/ing/" target="_blank">闪存</a>&nbsp;&nbsp;<a href="http://zzk.cnblogs.com" target="_blank">找找看</a>]]></description></item><item><title>Apply SOA Design Patterns with WCF (3) Automatic Service Locating (自动化服务定位)</title><link>http://www.cnblogs.com/teddyma/archive/2009/03/26/1422776.html</link><dc:creator>Teddy's Knowledge Base</dc:creator><author>Teddy's Knowledge Base</author><pubDate>Thu, 26 Mar 2009 15:57:00 GMT</pubDate><guid>http://www.cnblogs.com/teddyma/archive/2009/03/26/1422776.html</guid><wfw:comment>http://www.cnblogs.com/teddyma/comments/1422776.html</wfw:comment><comments>http://www.cnblogs.com/teddyma/archive/2009/03/26/1422776.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.cnblogs.com/teddyma/comments/commentRss/1422776.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/teddyma/services/trackbacks/1422776.html</trackback:ping><description><![CDATA[摘要: 本文提供一种在WCF服务消费应用程序中通过与服务提供应用程序共享WCF服务契约接口来自动化定位WCF服务实现的方案。&nbsp;&nbsp;<a href='http://www.cnblogs.com/teddyma/archive/2009/03/26/1422776.html'>阅读全文</a><img src ="http://www.cnblogs.com/teddyma/aggbug/1422776.html?type=1" width = "1" height = "1" /><br/><br/>--------------------------<br/>新闻：<a href="http://news.cnblogs.com/n/47956/" target="_blank">Xbox Live将投放Silverlight广告</a><br/>网站导航: <a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&nbsp;&nbsp;<a href="http://news.cnblogs.com" target="_blank">新闻</a>&nbsp;&nbsp;<a href="http://dotnet.cnblogs.com" target="_blank">.NET频道</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com" target="_blank">社区</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/q/" target="_blank">博问</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/ing/" target="_blank">闪存</a>&nbsp;&nbsp;<a href="http://zzk.cnblogs.com" target="_blank">找找看</a>]]></description></item><item><title>Apply SOA Design Patterns with WCF (2) WCF Automatic Deployment (自动化部署)</title><link>http://www.cnblogs.com/teddyma/archive/2009/03/25/1421892.html</link><dc:creator>Teddy's Knowledge Base</dc:creator><author>Teddy's Knowledge Base</author><pubDate>Wed, 25 Mar 2009 15:14:00 GMT</pubDate><guid>http://www.cnblogs.com/teddyma/archive/2009/03/25/1421892.html</guid><wfw:comment>http://www.cnblogs.com/teddyma/comments/1421892.html</wfw:comment><comments>http://www.cnblogs.com/teddyma/archive/2009/03/25/1421892.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.cnblogs.com/teddyma/comments/commentRss/1421892.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/teddyma/services/trackbacks/1421892.html</trackback:ping><description><![CDATA[摘要: 本文提供一种简化在多服务器和服务器群上自动化部署WCF服务的方案。&nbsp;&nbsp;<a href='http://www.cnblogs.com/teddyma/archive/2009/03/25/1421892.html'>阅读全文</a><img src ="http://www.cnblogs.com/teddyma/aggbug/1421892.html?type=1" width = "1" height = "1" /><br/><br/>--------------------------<br/>新闻：<a href="http://news.cnblogs.com/n/47951/" target="_blank">Debian无视GNU创始人警告 接受Mono</a><br/>网站导航: <a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&nbsp;&nbsp;<a href="http://news.cnblogs.com" target="_blank">新闻</a>&nbsp;&nbsp;<a href="http://dotnet.cnblogs.com" target="_blank">.NET频道</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com" target="_blank">社区</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/q/" target="_blank">博问</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/ing/" target="_blank">闪存</a>&nbsp;&nbsp;<a href="http://zzk.cnblogs.com" target="_blank">找找看</a>]]></description></item><item><title>Apply SOA Design Patterns with WCF (1) Configuration Centralization (配置集中管理)</title><link>http://www.cnblogs.com/teddyma/archive/2009/03/23/1419329.html</link><dc:creator>Teddy's Knowledge Base</dc:creator><author>Teddy's Knowledge Base</author><pubDate>Mon, 23 Mar 2009 15:11:00 GMT</pubDate><guid>http://www.cnblogs.com/teddyma/archive/2009/03/23/1419329.html</guid><wfw:comment>http://www.cnblogs.com/teddyma/comments/1419329.html</wfw:comment><comments>http://www.cnblogs.com/teddyma/archive/2009/03/23/1419329.html#Feedback</comments><slash:comments>17</slash:comments><wfw:commentRss>http://www.cnblogs.com/teddyma/comments/commentRss/1419329.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/teddyma/services/trackbacks/1419329.html</trackback:ping><description><![CDATA[<p><strong>Original (原创) by Teddy&#8217;s Knowledge Base</strong></p> <h3>Content (目录)</h3> <p>(1) <font color="#0000ff"><a href="http://www.cnblogs.com/teddyma/archive/2009/03/23/1419329.html">WCF Configuration Centralization (WCF配置集中管理)</a></font></p> <p>(2) <font color="#0000ff"><a href="http://www.cnblogs.com/teddyma/archive/2009/03/25/1421892.html">WCF Automatic Deployment (WCF自动化部署) </a></font></p> <p>(3) <font color="#0000ff"><a href="http://www.cnblogs.com/teddyma/archive/2009/03/26/1422776.html">WCF Automatic Service Locating (WCF自动化服务定位)</a></font></p> <p>(4) <font color="#0000ff"><a href="http://www.cnblogs.com/teddyma/archive/2009/03/28/1423780.html">WCF Database Paging &amp; Sorting (WCF数据库分页和排序)</a></font></p> <p>(5) <font color="#0000ff"><a href="http://www.cnblogs.com/teddyma/archive/2009/03/30/1424710.html">WCF Based ASP.NET DataSouce Control (基于WCF的数据源控件)</a></font></p> <p>(6) <font color="#0000ff"><a href="http://code.google.com/p/nintegrate/">1 + 2 + 3 + 4 + 5 = ?</a></font></p> <p><font color="#0000ff"><a href="http://www.dotnetjunkies.com/WebLog/teddy/archive/2009/03/23/588342.aspx"><strong>English Version</strong></a></font><br /></p> <h3>摘要</h3> <p>本文提供一种使用配置集中管理代替配置文件配置WCF服务的方案。</p> <h3>正文</h3> <p>WCF服务有两种配置方式：配置文件和编程方式。配置文件方式，我们大多都很熟悉了，但是，对于SOA，尤其是企业及的SOA，编程方式的配置管理更有利。最大的好处是，它使得配置中控更容易了。)</p> <h4>为什么要使用配置集中管理？</h4> <p>采用配置文件方式时，所有的服务行为和端点的配置都依赖注入的放在应用配置文件中，对于大多数小范围，数量有限的SOA用例来说是足够了。但是，对企业级的，存在部署在更多连通性各不相同的服务器和服务器群的不同绑定信道的服务这种规模的SOA来说，配置文件方式就太难管理了，服务的部署、监控，版本控制等等的成本，都将变得不可接受。</p> <h4>如何实现配置集中管理？</h4> <p>要实现配置集中管理，第一步是要决定所有的配置存储在哪里，可以放在数据库表，统一的分类文件系统目录或诸如SharePoint和DNN这样的特定的内容管理系统中。</p> <p>第二步是为服务的提供者和消费者定义一个一致的获取配置的API。一个典型的获取WCF服务端点配置的API可能会象下面这样：</p> <blockquote><div class="cnblogs_code"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #008080;"> 1</span>&nbsp;<span style="color: #0000ff;">public</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">sealed</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">class</span><span style="color: #000000;"> Endpoint<br /></span><span style="color: #008080;"> 2</span>&nbsp;<span style="color: #000000;">{<br /></span><span style="color: #008080;"> 3</span>&nbsp;<span style="color: #000000;">&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;"> Address { </span><span style="color: #0000ff;">get</span><span style="color: #000000;">; </span><span style="color: #0000ff;">set</span><span style="color: #000000;">; }<br /></span><span style="color: #008080;"> 4</span>&nbsp;<span style="color: #000000;">&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;"> ChannelType { </span><span style="color: #0000ff;">get</span><span style="color: #000000;">; </span><span style="color: #0000ff;">set</span><span style="color: #000000;">; }<br /></span><span style="color: #008080;"> 5</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp; </span><span style="color: #0000ff;">public</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">int</span><span style="color: #000000;">?</span><span style="color: #000000;"> CloseTimeout { </span><span style="color: #0000ff;">get</span><span style="color: #000000;">; </span><span style="color: #0000ff;">set</span><span style="color: #000000;">; }<br /></span><span style="color: #008080;"> 6</span>&nbsp;<span style="color: #000000;">&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;"> FarmAddress { </span><span style="color: #0000ff;">get</span><span style="color: #000000;">; </span><span style="color: #0000ff;">set</span><span style="color: #000000;">; }<br /></span><span style="color: #008080;"> 7</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp; </span><span style="color: #0000ff;">public</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">bool</span><span style="color: #000000;"> MexBindingEnabled { </span><span style="color: #0000ff;">get</span><span style="color: #000000;">; </span><span style="color: #0000ff;">set</span><span style="color: #000000;">; }<br /></span><span style="color: #008080;"> 8</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp; </span><span style="color: #0000ff;">public</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">bool</span><span style="color: #000000;">?</span><span style="color: #000000;"> IncludeExceptionDetailInFaults { </span><span style="color: #0000ff;">get</span><span style="color: #000000;">; </span><span style="color: #0000ff;">set</span><span style="color: #000000;">; }<br /></span><span style="color: #008080;"> 9</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp; </span><span style="color: #0000ff;">public</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">int</span><span style="color: #000000;">?</span><span style="color: #000000;"> ListenBacklog { </span><span style="color: #0000ff;">get</span><span style="color: #000000;">; </span><span style="color: #0000ff;">set</span><span style="color: #000000;">; }<br /></span><span style="color: #008080;">10</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp; </span><span style="color: #0000ff;">public</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">int</span><span style="color: #000000;">?</span><span style="color: #000000;"> MaxBufferPoolSize { </span><span style="color: #0000ff;">get</span><span style="color: #000000;">; </span><span style="color: #0000ff;">set</span><span style="color: #000000;">; }<br /></span><span style="color: #008080;">11</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp; </span><span style="color: #0000ff;">public</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">int</span><span style="color: #000000;">?</span><span style="color: #000000;"> MaxBufferSize { </span><span style="color: #0000ff;">get</span><span style="color: #000000;">; </span><span style="color: #0000ff;">set</span><span style="color: #000000;">; }<br /></span><span style="color: #008080;">12</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp; </span><span style="color: #0000ff;">public</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">int</span><span style="color: #000000;">?</span><span style="color: #000000;"> MaxConcurrentCalls { </span><span style="color: #0000ff;">get</span><span style="color: #000000;">; </span><span style="color: #0000ff;">set</span><span style="color: #000000;">; }<br /></span><span style="color: #008080;">13</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp; </span><span style="color: #0000ff;">public</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">int</span><span style="color: #000000;">?</span><span style="color: #000000;"> MaxConcurrentInstances { </span><span style="color: #0000ff;">get</span><span style="color: #000000;">; </span><span style="color: #0000ff;">set</span><span style="color: #000000;">; }<br /></span><span style="color: #008080;">14</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp; </span><span style="color: #0000ff;">public</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">int</span><span style="color: #000000;">?</span><span style="color: #000000;"> MaxConcurrentSessions { </span><span style="color: #0000ff;">get</span><span style="color: #000000;">; </span><span style="color: #0000ff;">set</span><span style="color: #000000;">; }<br /></span><span style="color: #008080;">15</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp; </span><span style="color: #0000ff;">public</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">int</span><span style="color: #000000;">?</span><span style="color: #000000;"> MaxConnections { </span><span style="color: #0000ff;">get</span><span style="color: #000000;">; </span><span style="color: #0000ff;">set</span><span style="color: #000000;">; }<br /></span><span style="color: #008080;">16</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp; </span><span style="color: #0000ff;">public</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">int</span><span style="color: #000000;">?</span><span style="color: #000000;"> MaxReceivedMessageSize { </span><span style="color: #0000ff;">get</span><span style="color: #000000;">; </span><span style="color: #0000ff;">set</span><span style="color: #000000;">; }<br /></span><span style="color: #008080;">17</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp; </span><span style="color: #0000ff;">public</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">int</span><span style="color: #000000;">?</span><span style="color: #000000;"> OpenTimeout { </span><span style="color: #0000ff;">get</span><span style="color: #000000;">; </span><span style="color: #0000ff;">set</span><span style="color: #000000;">; }<br /></span><span style="color: #008080;">18</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp; </span><span style="color: #0000ff;">public</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">bool</span><span style="color: #000000;"> PortSharingEnabled { </span><span style="color: #0000ff;">get</span><span style="color: #000000;">; </span><span style="color: #0000ff;">set</span><span style="color: #000000;">; }<br /></span><span style="color: #008080;">19</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp; </span><span style="color: #0000ff;">public</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">int</span><span style="color: #000000;">?</span><span style="color: #000000;"> ReceiveTimeout { </span><span style="color: #0000ff;">get</span><span style="color: #000000;">; </span><span style="color: #0000ff;">set</span><span style="color: #000000;">; }<br /></span><span style="color: #008080;">20</span>&nbsp;<span style="color: #000000;">&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;"> SecurityMode { </span><span style="color: #0000ff;">get</span><span style="color: #000000;">; </span><span style="color: #0000ff;">set</span><span style="color: #000000;">; }<br /></span><span style="color: #008080;">21</span>&nbsp;<span style="color: #000000;">&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;"> ClientCredentialTypeName { </span><span style="color: #0000ff;">get</span><span style="color: #000000;">; </span><span style="color: #0000ff;">set</span><span style="color: #000000;">; }<br /></span><span style="color: #008080;">22</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp; </span><span style="color: #0000ff;">public</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">int</span><span style="color: #000000;">?</span><span style="color: #000000;"> SendTimeout { </span><span style="color: #0000ff;">get</span><span style="color: #000000;">; </span><span style="color: #0000ff;">set</span><span style="color: #000000;">; }<br /></span><span style="color: #008080;">23</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp; </span><span style="color: #0000ff;">public</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">bool</span><span style="color: #000000;">?</span><span style="color: #000000;"> TransactionFlow { </span><span style="color: #0000ff;">get</span><span style="color: #000000;">; </span><span style="color: #0000ff;">set</span><span style="color: #000000;">; }<br /></span><span style="color: #008080;">24</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp; </span><span style="color: #0000ff;">public</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">int</span><span style="color: #000000;">?</span><span style="color: #000000;"> TransactionTimeout { </span><span style="color: #0000ff;">get</span><span style="color: #000000;">; </span><span style="color: #0000ff;">set</span><span style="color: #000000;">; }<br /></span><span style="color: #008080;">25</span>&nbsp;<span style="color: #000000;">&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;"> TransferMode { </span><span style="color: #0000ff;">get</span><span style="color: #000000;">; </span><span style="color: #0000ff;">set</span><span style="color: #000000;">; }<br /></span><span style="color: #008080;">26</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp; </span><span style="color: #0000ff;">public</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">bool</span><span style="color: #000000;">?</span><span style="color: #000000;"> ReliableSessionEnabled { </span><span style="color: #0000ff;">get</span><span style="color: #000000;">; </span><span style="color: #0000ff;">set</span><span style="color: #000000;">; }<br /></span><span style="color: #008080;">27</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp; </span><span style="color: #0000ff;">public</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">int</span><span style="color: #000000;">?</span><span style="color: #000000;"> ReliableSessionInactivityTimeout { </span><span style="color: #0000ff;">get</span><span style="color: #000000;">; </span><span style="color: #0000ff;">set</span><span style="color: #000000;">; }<br /></span><span style="color: #008080;">28</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp; </span><span style="color: #0000ff;">public</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">bool</span><span style="color: #000000;">?</span><span style="color: #000000;"> ReliableSessionOrdered { </span><span style="color: #0000ff;">get</span><span style="color: #000000;">; </span><span style="color: #0000ff;">set</span><span style="color: #000000;">; }<br /></span><span style="color: #008080;">29</span>&nbsp;<span style="color: #000000;">}<br /></span><span style="color: #008080;">30</span>&nbsp;<span style="color: #000000;"><br /></span><span style="color: #008080;">31</span>&nbsp;<span style="color: #000000;"></span><span style="color: #0000ff;">public</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">interface</span><span style="color: #000000;"> IEndpointProvider<br /></span><span style="color: #008080;">32</span>&nbsp;<span style="color: #000000;">{<br /></span><span style="color: #008080;">33</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp; IList</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">Endpoint</span><span style="color: #000000;">&gt;</span><span style="color: #000000;"> GetServerEndpoints(Type serviceContract);<br /></span><span style="color: #008080;">34</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp; IList</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">Endpoint</span><span style="color: #000000;">&gt;</span><span style="color: #000000;"> GetClientEndpoints(Type serviceContract);<br /></span><span style="color: #008080;">35</span>&nbsp;<span style="color: #000000;">} </span></div></blockquote>一个WCF服务提供者得到要发布的服务的端点的配置后，可以用类似下面的代码以编程方式构造一个用来发布服务的ServiceHost类的实例：<br /> <blockquote><div class="cnblogs_code"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #008080;"> 1</span>&nbsp;<span style="color: #000000;">var host </span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">new</span><span style="color: #000000;"> ServiceHost(serviceImplType, BuildBaseAddresses(serviceContracts));<br /></span><span style="color: #008080;"> 2</span>&nbsp;<span style="color: #000000;">var endpoints </span><span style="color: #000000;">=</span><span style="color: #000000;"> EndpointProvider.GetServerEndpoints(serviceContract);<br /></span><span style="color: #008080;"> 3</span>&nbsp;<span style="color: #000000;"></span><span style="color: #0000ff;">foreach</span><span style="color: #000000;"> (var endpoint </span><span style="color: #0000ff;">in</span><span style="color: #000000;"> endpoints)<br /></span><span style="color: #008080;"> 4</span>&nbsp;<span style="color: #000000;">{<br /></span><span style="color: #008080;"> 5</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp; var address </span><span style="color: #000000;">=</span><span style="color: #000000;"> WcfServiceHelper.BuildAddress(endpoint);<br /></span><span style="color: #008080;"> 6</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp; </span><span style="color: #0000ff;">if</span><span style="color: #000000;"> (address </span><span style="color: #000000;">==</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">default</span><span style="color: #000000;">(Uri)) </span><span style="color: #0000ff;">continue</span><span style="color: #000000;">;<br /></span><span style="color: #008080;"> 7</span>&nbsp;<span style="color: #000000;"><br /></span><span style="color: #008080;"> 8</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp; var binding </span><span style="color: #000000;">=</span><span style="color: #000000;"> WcfServiceHelper.BuildBinding(serviceContract, endpoint);<br /></span><span style="color: #008080;"> 9</span>&nbsp;<span style="color: #000000;"><br /></span><span style="color: #008080;">10</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp; </span><span style="color: #0000ff;">if</span><span style="color: #000000;"> (binding </span><span style="color: #000000;">==</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">null</span><span style="color: #000000;">) </span><span style="color: #0000ff;">continue</span><span style="color: #000000;">;<br /></span><span style="color: #008080;">11</span>&nbsp;<span style="color: #000000;"><br /></span><span style="color: #008080;">12</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp; </span><span style="color: #0000ff;">if</span><span style="color: #000000;"> (</span><span style="color: #000000;">!</span><span style="color: #000000;">IsBehaviorConfigured</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">ServiceMetadataBehavior</span><span style="color: #000000;">&gt;</span><span style="color: #000000;">(host))<br /></span><span style="color: #008080;">13</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp; {<br /></span><span style="color: #008080;">14</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; var smb </span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">new</span><span style="color: #000000;"> ServiceMetadataBehavior();<br /></span><span style="color: #008080;">15</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; host.Description.Behaviors.Add(smb);<br /></span><span style="color: #008080;">16</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp; }<br /></span><span style="color: #008080;">17</span>&nbsp;<span style="color: #000000;"><br /></span><span style="color: #008080;">18</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp; </span><span style="color: #0000ff;">if</span><span style="color: #000000;"> (endpoint.MexBindingEnabled)<br /></span><span style="color: #008080;">19</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp; {<br /></span><span style="color: #008080;">20</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; host.AddServiceEndpoint(</span><span style="color: #0000ff;">typeof</span><span style="color: #000000;"> (IMetadataExchange), </span><span style="color: #0000ff;">new</span><span style="color: #000000;"> CustomBinding(binding), </span><span style="color: #800000;">"</span><span style="color: #800000;">mex</span><span style="color: #800000;">"</span><span style="color: #000000;">);<br /></span><span style="color: #008080;">21</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp; }<br /></span><span style="color: #008080;">22</span>&nbsp;<span style="color: #000000;"><br /></span><span style="color: #008080;">23</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp; </span><span style="color: #0000ff;">if</span><span style="color: #000000;"> (</span><span style="color: #000000;">!</span><span style="color: #000000;">IsBehaviorConfigured</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">ServiceThrottlingBehavior</span><span style="color: #000000;">&gt;</span><span style="color: #000000;">(host))<br /></span><span style="color: #008080;">24</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp; {<br /></span><span style="color: #008080;">25</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; var serviceThrottle </span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">new</span><span style="color: #000000;"> ServiceThrottlingBehavior();<br /></span><span style="color: #008080;">26</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="color: #0000ff;">if</span><span style="color: #000000;"> (endpoint.MaxConcurrentCalls.HasValue)<br /></span><span style="color: #008080;">27</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; serviceThrottle.MaxConcurrentCalls </span><span style="color: #000000;">=</span><span style="color: #000000;"> endpoint.MaxConcurrentCalls.Value;<br /></span><span style="color: #008080;">28</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="color: #0000ff;">if</span><span style="color: #000000;"> (endpoint.MaxConcurrentInstances.HasValue)<br /></span><span style="color: #008080;">29</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; serviceThrottle.MaxConcurrentInstances </span><span style="color: #000000;">=</span><span style="color: #000000;"> endpoint.MaxConcurrentInstances.Value;<br /></span><span style="color: #008080;">30</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="color: #0000ff;">if</span><span style="color: #000000;"> (endpoint.MaxConcurrentSessions.HasValue)<br /></span><span style="color: #008080;">31</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; serviceThrottle.MaxConcurrentSessions </span><span style="color: #000000;">=</span><span style="color: #000000;"> endpoint.MaxConcurrentSessions.Value;<br /></span><span style="color: #008080;">32</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; host.Description.Behaviors.Add(serviceThrottle);<br /></span><span style="color: #008080;">33</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp; }<br /></span><span style="color: #008080;">34</span>&nbsp;<span style="color: #000000;"><br /></span><span style="color: #008080;">35</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp; </span><span style="color: #0000ff;">if</span><span style="color: #000000;"> (</span><span style="color: #000000;">!</span><span style="color: #000000;">IsBehaviorConfigured</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">ServiceDebugBehavior</span><span style="color: #000000;">&gt;</span><span style="color: #000000;">(host) </span><span style="color: #000000;">&amp;&amp;</span><span style="color: #000000;"> endpoint.IncludeExceptionDetailInFaults.HasValue </span><span style="color: #000000;">&amp;&amp;</span><span style="color: #000000;"> endpoint.IncludeExceptionDetailInFaults.Value)<br /></span><span style="color: #008080;">36</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp; {<br /></span><span style="color: #008080;">37</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; var serviceDebug </span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">new</span><span style="color: #000000;"> ServiceDebugBehavior<br /></span><span style="color: #008080;">38</span>&nbsp;<span style="color: #000000;">&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; {<br /></span><span style="color: #008080;">39</span>&nbsp;<span style="color: #000000;">&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; IncludeExceptionDetailInFaults </span><span style="color: #000000;">=</span><span style="color: #000000;"><br /></span><span style="color: #008080;">40</span>&nbsp;<span style="color: #000000;">&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; endpoint.IncludeExceptionDetailInFaults.Value<br /></span><span style="color: #008080;">41</span>&nbsp;<span style="color: #000000;">&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; };<br /></span><span style="color: #008080;">42</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; host.Description.Behaviors.Add(serviceDebug);<br /></span><span style="color: #008080;">43</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp; }<br /></span><span style="color: #008080;">44</span>&nbsp;<span style="color: #000000;"><br /></span><span style="color: #008080;">45</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp; host.AddServiceEndpoint(serviceContract, binding, address);<br /></span><span style="color: #008080;">46</span>&nbsp;<span style="color: #000000;">} </span></div></blockquote>类似的，一个WCF服务消费者可以用类似下面的代码构造一个服务代理的实例：<br /> <blockquote><div class="cnblogs_code"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #008080;"> 1</span>&nbsp;<span style="color: #000000;">var endpoints </span><span style="color: #000000;">=</span><span style="color: #000000;"> EndpointStore.GetClientEndpoints(</span><span style="color: #0000ff;">typeof</span><span style="color: #000000;">(T));<br /></span><span style="color: #008080;"> 2</span>&nbsp;<span style="color: #000000;"></span><span style="color: #0000ff;">if</span><span style="color: #000000;"> (endpoints.Count </span><span style="color: #000000;">&gt;</span><span style="color: #000000;">&nbsp;</span><span style="color: #800080;">0</span><span style="color: #000000;">)<br /></span><span style="color: #008080;"> 3</span>&nbsp;<span style="color: #000000;">{<br /></span><span style="color: #008080;"> 4</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp; var endpoint </span><span style="color: #000000;">=</span><span style="color: #000000;"> endpoints[</span><span style="color: #800080;">0</span><span style="color: #000000;">];<br /></span><span style="color: #008080;"> 5</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp; var binding </span><span style="color: #000000;">=</span><span style="color: #000000;"> WcfServiceHelper.BuildBinding(</span><span style="color: #0000ff;">typeof</span><span style="color: #000000;">(T), endpoint);<br /></span><span style="color: #008080;"> 6</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp; var address </span><span style="color: #000000;">=</span><span style="color: #000000;"> WcfServiceHelper.BuildAddress(endpoint);<br /></span><span style="color: #008080;"> 7</span>&nbsp;<span style="color: #000000;"><br /></span><span style="color: #008080;"> 8</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp; </span><span style="color: #0000ff;">if</span><span style="color: #000000;"> (binding </span><span style="color: #000000;">!=</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">null</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">&amp;&amp;</span><span style="color: #000000;"> address </span><span style="color: #000000;">!=</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">null</span><span style="color: #000000;">)<br /></span><span style="color: #008080;"> 9</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp; {<br /></span><span style="color: #008080;">10</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; var cf </span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">new</span><span style="color: #000000;"> ChannelFactory</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">T</span><span style="color: #000000;">&gt;</span><span style="color: #000000;">(binding, </span><span style="color: #0000ff;">new</span><span style="color: #000000;"> EndpointAddress(address));<br /></span><span style="color: #008080;">11</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="color: #0000ff;">return</span><span style="color: #000000;"> cf.CreateChannel();<br /></span><span style="color: #008080;">12</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp; }<br /></span><span style="color: #008080;">13</span>&nbsp;<span style="color: #000000;">}</span><br /></div></blockquote> <h4>提示 </h4> <ul> <li>一般，获取配置API可以实现为一个数据库存储过程包装类，或者本身就是一个WCF服务。  </li><li>不仅是WCF服务的元数据配置，其他包括数据库连接字串，策略，规则，流程和映射等都能像这样集中管理。  </li><li>对于服务的消费者，一定要记得关闭ChannelFactory实例，可以参考下面的最佳实践代码，确保ChannelFactoy实例和占用的信道资源得到释放：</li></ul> <blockquote> <p>&nbsp;</p> <div class="cnblogs_code"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #008080;"> 1</span>&nbsp;<span style="color: #008000;">//</span><span style="color: #008000;">close channel factory best practice<br /></span><span style="color: #008080;"> 2</span>&nbsp;<span style="color: #008000;"></span><span style="color: #008000;">//</span><span style="color: #008000;">refer to: </span><span style="color: #008000; text-decoration: underline;">http://bloggingabout.net/blogs/erwyn/archive/2006/12/09/WCF-Service-Proxy-Helper.aspx</span><span style="color: #008000;"><br /></span><span style="color: #008080;"> 3</span>&nbsp;<span style="color: #008000;"></span><span style="color: #0000ff;">try</span><span style="color: #000000;"><br /></span><span style="color: #008080;"> 4</span>&nbsp;<span style="color: #000000;">{<br /></span><span style="color: #008080;"> 5</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp; channelFactory.Close();<br /></span><span style="color: #008080;"> 6</span>&nbsp;<span style="color: #000000;">}<br /></span><span style="color: #008080;"> 7</span>&nbsp;<span style="color: #000000;"></span><span style="color: #0000ff;">catch</span><span style="color: #000000;"> (CommunicationException)<br /></span><span style="color: #008080;"> 8</span>&nbsp;<span style="color: #000000;">{<br /></span><span style="color: #008080;"> 9</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp; channelFactory.Abort();<br /></span><span style="color: #008080;">10</span>&nbsp;<span style="color: #000000;">}<br /></span><span style="color: #008080;">11</span>&nbsp;<span style="color: #000000;"></span><span style="color: #0000ff;">catch</span><span style="color: #000000;"> (TimeoutException)<br /></span><span style="color: #008080;">12</span>&nbsp;<span style="color: #000000;">{<br /></span><span style="color: #008080;">13</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp; channelFactory.Abort();<br /></span><span style="color: #008080;">14</span>&nbsp;<span style="color: #000000;">}<br /></span><span style="color: #008080;">15</span>&nbsp;<span style="color: #000000;"></span><span style="color: #0000ff;">catch</span><span style="color: #000000;"> (Exception)<br /></span><span style="color: #008080;">16</span>&nbsp;<span style="color: #000000;">{<br /></span><span style="color: #008080;">17</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp; channelFactory.Abort();<br /></span><span style="color: #008080;">18</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp; </span><span style="color: #0000ff;">throw</span><span style="color: #000000;">;<br /></span><span style="color: #008080;">19</span>&nbsp;<span style="color: #000000;">}</span><br /></div> <p>&nbsp;</p></blockquote> <h3>参考</h3> <p>(1) SOA Design Pattern Catalog: <a title="http://www.soapatterns.org/" href="http://www.soapatterns.org/">http://www.soapatterns.org/</a></p> <p>&nbsp;</p> <p><em>//我是结尾符，待续&#8230;</em></p><img src ="http://www.cnblogs.com/teddyma/aggbug/1419329.html?type=1" width = "1" height = "1" /><br/><br/>--------------------------<br/>新闻：<a href="http://news.cnblogs.com/n/47950/" target="_blank">iPhone 3GS首发日创AT&T多项纪录</a><br/>网站导航: <a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&nbsp;&nbsp;<a href="http://news.cnblogs.com" target="_blank">新闻</a>&nbsp;&nbsp;<a href="http://dotnet.cnblogs.com" target="_blank">.NET频道</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com" target="_blank">社区</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/q/" target="_blank">博问</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/ing/" target="_blank">闪存</a>&nbsp;&nbsp;<a href="http://zzk.cnblogs.com" target="_blank">找找看</a>]]></description></item><item><title>EF招聘Software Engineer for Support Team (已过期)</title><link>http://www.cnblogs.com/teddyma/archive/2009/02/10/1387642.html</link><dc:creator>Teddy's Knowledge Base</dc:creator><author>Teddy's Knowledge Base</author><pubDate>Tue, 10 Feb 2009 09:58:00 GMT</pubDate><guid>http://www.cnblogs.com/teddyma/archive/2009/02/10/1387642.html</guid><wfw:comment>http://www.cnblogs.com/teddyma/comments/1387642.html</wfw:comment><comments>http://www.cnblogs.com/teddyma/archive/2009/02/10/1387642.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnblogs.com/teddyma/comments/commentRss/1387642.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/teddyma/services/trackbacks/1387642.html</trackback:ping><description><![CDATA[<p><strong>Title:&nbsp; Support Engineer</strong><br><br><strong>Qualifications:</strong> </p>
<p>1. Bachelor’s degree in computer science<br>2. Over 2 years solid working experience in software developing <br>3. Good skills on Visual Studio, client-side scripting, C#, VB<br>4. Knowledge of XML, XSLT, webservices, SQL, Data Warehouse<br>5. Good communication skill and teamwork sprit<br>6. Can work under pressure and be willing to meet the challenge <br>7. Self-learning capability<br>8. CET 4, fluency in English, both on speaking and writing</p>
<p>工作地点上海，有意者可<a href="/teddyma/contact.aspx?id=1"><strong><font color="#0000ff">给我留言</font></strong></a>，有效期1个月。</p><img src ="http://www.cnblogs.com/teddyma/aggbug/1387642.html?type=1" width = "1" height = "1" /><br/><br/>--------------------------<br/>新闻：<a href="http://news.cnblogs.com/n/47949/" target="_blank">Silverlight开发大赛奖金高达10000美元</a><br/>网站导航: <a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&nbsp;&nbsp;<a href="http://news.cnblogs.com" target="_blank">新闻</a>&nbsp;&nbsp;<a href="http://dotnet.cnblogs.com" target="_blank">.NET频道</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com" target="_blank">社区</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/q/" target="_blank">博问</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/ing/" target="_blank">闪存</a>&nbsp;&nbsp;<a href="http://zzk.cnblogs.com" target="_blank">找找看</a>]]></description></item><item><title>NBear WebTest - 分享一个基于Web的UnitTest工具</title><link>http://www.cnblogs.com/teddyma/archive/2008/11/10/1330535.html</link><dc:creator>Teddy's Knowledge Base</dc:creator><author>Teddy's Knowledge Base</author><pubDate>Mon, 10 Nov 2008 07:57:00 GMT</pubDate><guid>http://www.cnblogs.com/teddyma/archive/2008/11/10/1330535.html</guid><wfw:comment>http://www.cnblogs.com/teddyma/comments/1330535.html</wfw:comment><comments>http://www.cnblogs.com/teddyma/archive/2008/11/10/1330535.html#Feedback</comments><slash:comments>15</slash:comments><wfw:commentRss>http://www.cnblogs.com/teddyma/comments/commentRss/1330535.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/teddyma/services/trackbacks/1330535.html</trackback:ping><description><![CDATA[摘要: 这是一个ASP.NET 3.5的Web Application程序，实现了类似NUnit的简单但实用的UnitTest功能。写这个小工具的目的是在NBear5的开发中需要方便的在完全真实的模拟环境中测试所有组件功能的在ASP.NET下，尤其是Partial Trust模式下的运行效果，现有的UnitTest工具中似乎对这方面的支持都比较有限，所以，自己花两天时间写了一个。相比NUnit，本工具提供的 UnitTest功能比较基础，但是，对一般的UnitTest来说应该完全够用了。如果您正在开发和测试一些ASP.NET下的Web组件，推荐一试。程序本身就是一个Web Application，所以，自然是包含了全部源代码的。源码对除.Net Framework 3.5之外的DLL没有任何依赖，也可以做成VS的Project Template方便重复使用。&nbsp;&nbsp;<a href='http://www.cnblogs.com/teddyma/archive/2008/11/10/1330535.html'>阅读全文</a><img src ="http://www.cnblogs.com/teddyma/aggbug/1330535.html?type=1" width = "1" height = "1" /><br/><br/>--------------------------<br/>新闻：<a href="http://news.cnblogs.com/n/47947/" target="_blank">微软告攒机商第一案胜诉</a><br/>网站导航: <a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&nbsp;&nbsp;<a href="http://news.cnblogs.com" target="_blank">新闻</a>&nbsp;&nbsp;<a href="http://dotnet.cnblogs.com" target="_blank">.NET频道</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com" target="_blank">社区</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/q/" target="_blank">博问</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/ing/" target="_blank">闪存</a>&nbsp;&nbsp;<a href="http://zzk.cnblogs.com" target="_blank">找找看</a>]]></description></item><item><title>急招 .NET Senior Software Engineer, 上海 EF，有兴趣请与我联系 (已过期)</title><link>http://www.cnblogs.com/teddyma/archive/2008/09/09/1287313.html</link><dc:creator>Teddy's Knowledge Base</dc:creator><author>Teddy's Knowledge Base</author><pubDate>Tue, 09 Sep 2008 01:39:00 GMT</pubDate><guid>http://www.cnblogs.com/teddyma/archive/2008/09/09/1287313.html</guid><wfw:comment>http://www.cnblogs.com/teddyma/comments/1287313.html</wfw:comment><comments>http://www.cnblogs.com/teddyma/archive/2008/09/09/1287313.html#Feedback</comments><slash:comments>9</slash:comments><wfw:commentRss>http://www.cnblogs.com/teddyma/comments/commentRss/1287313.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/teddyma/services/trackbacks/1287313.html</trackback:ping><description><![CDATA[<p class="MsoNormal" style=""><font color="black" size="3" face="Arial"><span style="font-size: 12pt; color: black; font-family: Arial;">Senior Software Engineer<o:p></o:p></span></font></p>
<p class="MsoNormal" style=""><font color="black" size="3" face="Arial"><span style="font-size: 12pt; color: black; font-family: Arial;"><o:p>&nbsp;</o:p></span></font></p>
<p class="MsoNormal" style=""><font color="black" size="3" face="Arial"><span style="font-size: 12pt; color: black; font-family: Arial;">Candidate should have thorough knowledge of design, development, and deployment of large-scale web-based solutions using the Microsoft platform (IIS, ASP, ASPX, MSSQL, COM, MTS, .NET).&nbsp; Desirable experience includes: Multi-tiered web applications, data base administration, server administration, e-commerce, e-learning, MTS, .NET, Data Warehouse and business integration. <o:p></o:p></span></font></p>
<p class="MsoNormal" style=""><font color="black" size="3" face="Arial"><span style="font-size: 12pt; color: black; font-family: Arial;"><o:p>&nbsp;</o:p></span></font></p>
<p class="MsoNormal" style=""><font size="3" face="Arial"><span style="font-size: 12pt; font-family: Arial;">Responsibilities will include:<o:p></o:p></span></font></p>
<p class="MsoNormal" style="margin-left: 73pt; text-indent: -19pt;"><font size="3" face="Symbol"><span style="font-size: 12pt; font-family: Symbol;">·</span></font><font size="1"><span style="font-size: 7pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></font><font face="Arial"><span style="font-family: Arial;">Manage components of Englishtown’s internal and external web application <o:p></o:p></span></font></p>
<p class="MsoNormal" style="margin-left: 73pt; text-indent: -19pt;"><font size="3" face="Symbol"><span style="font-size: 12pt; font-family: Symbol;">·</span></font><font size="1"><span style="font-size: 7pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></font><font face="Arial"><span style="font-family: Arial;">Maintain existing code-base with .NET<o:p></o:p></span></font></p>
<p class="MsoNormal" style="margin-left: 73pt; text-indent: -19pt;"><font size="3" face="Symbol"><span style="font-size: 12pt; font-family: Symbol;">·</span></font><font size="1"><span style="font-size: 7pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></font><font face="Arial"><span style="font-family: Arial;">Create new products with .NET<o:p></o:p></span></font></p>
<p class="MsoNormal" style="margin-left: 73pt; text-indent: -19pt;"><font size="3" face="Symbol"><span style="font-size: 12pt; font-family: Symbol;">·</span></font><font size="1"><span style="font-size: 7pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></font><font face="Arial"><span style="font-family: Arial;">Design/Develop/Test/Deploy web applications<o:p></o:p></span></font></p>
<p class="MsoNormal" style=""><font size="3" face="Arial"><span style="font-size: 12pt; font-family: Arial;"><o:p>&nbsp;</o:p></span></font></p>
<p class="MsoNormal" style=""><font size="3" face="Arial"><span style="font-size: 12pt; font-family: Arial;">Qualifications:<o:p></o:p></span></font></p>
<p class="MsoNormal" style=""><font size="3" face="Arial"><span style="font-size: 12pt; font-family: Arial;"><o:p>&nbsp;</o:p></span></font></p>
<p class="MsoNormal" style="margin-left: 22.45pt; text-indent: -21pt;"><font color="black" size="3" face="Wingdings"><span style="font-size: 12pt; color: black; font-family: Wingdings;"><span style="">l<font size="1" face="Times New Roman"><span style="font-family: 'Times New Roman'; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></font></span></span></font><font face="Arial"><span style="font-family: Arial;">Bachelors degree in computer science, Master’s desirable<font color="black"><span style="color: black;"><o:p></o:p></span></font></span></font></p>
<p class="MsoNormal" style="margin-left: 22.45pt; text-indent: -21pt;"><font color="black" size="3" face="Wingdings"><span style="font-size: 12pt; color: black; font-family: Wingdings;"><span style="">l<font size="1" face="Times New Roman"><span style="font-family: 'Times New Roman'; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></font></span></span></font><font color="black" face="Arial"><span style="color: black; font-family: Arial;">Over 4 years solid working experience on software developing <o:p></o:p></span></font></p>
<p class="MsoNormal" style="margin-left: 22.45pt; text-indent: -21pt;"><font size="3" face="Wingdings"><span style="font-size: 12pt; font-family: Wingdings;"><span style="">l<font size="1" face="Times New Roman"><span style="font-family: 'Times New Roman'; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></font></span></span></font><font face="Arial"><span style="font-family: Arial;">Good skill on Visual Studio, client-side scripting, C#, VB.NET<o:p></o:p></span></font></p>
<p class="MsoNormal" style="margin-left: 22.45pt; text-indent: -21pt;"><font size="3" face="Wingdings"><span style="font-size: 12pt; font-family: Wingdings;"><span style="">l<font size="1" face="Times New Roman"><span style="font-family: 'Times New Roman'; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></font></span></span></font><font face="Arial"><span style="font-family: Arial;">Be good at XML, XSLT, webservices, SQL Server, Data Warehouse<o:p></o:p></span></font></p>
<p class="MsoNormal" style="margin-left: 22.45pt; text-indent: -21pt;"><font color="black" size="3" face="Wingdings"><span style="font-size: 12pt; color: black; font-family: Wingdings;"><span style="">l<font size="1" face="Times New Roman"><span style="font-family: 'Times New Roman'; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></font></span></span></font><font color="black" face="Arial"><span style="color: black; font-family: Arial;">Good communication skill and good teamwork sprit<o:p></o:p></span></font></p>
<p class="MsoNormal" style="margin-left: 22.45pt; text-indent: -21pt;"><font size="3" face="Wingdings"><span style="font-size: 12pt; font-family: Wingdings;"><span style="">l<font size="1" face="Times New Roman"><span style="font-family: 'Times New Roman'; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></font></span></span></font><font face="Arial"><span style="font-family: Arial;">Can work under pressure and be willing to meet the challenge <o:p></o:p></span></font></p><img src ="http://www.cnblogs.com/teddyma/aggbug/1287313.html?type=1" width = "1" height = "1" /><br/><br/>--------------------------<br/>新闻：<a href="http://news.cnblogs.com/n/47946/" target="_blank">Mono这只猴子招惹了谁？</a><br/>网站导航: <a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&nbsp;&nbsp;<a href="http://news.cnblogs.com" target="_blank">新闻</a>&nbsp;&nbsp;<a href="http://dotnet.cnblogs.com" target="_blank">.NET频道</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com" target="_blank">社区</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/q/" target="_blank">博问</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/ing/" target="_blank">闪存</a>&nbsp;&nbsp;<a href="http://zzk.cnblogs.com" target="_blank">找找看</a>]]></description></item><item><title>一种高性能Hierarchical RBAC实现方案</title><link>http://www.cnblogs.com/teddyma/archive/2008/01/23/1050627.html</link><dc:creator>Teddy's Knowledge Base</dc:creator><author>Teddy's Knowledge Base</author><pubDate>Wed, 23 Jan 2008 13:29:00 GMT</pubDate><guid>http://www.cnblogs.com/teddyma/archive/2008/01/23/1050627.html</guid><wfw:comment>http://www.cnblogs.com/teddyma/comments/1050627.html</wfw:comment><comments>http://www.cnblogs.com/teddyma/archive/2008/01/23/1050627.html#Feedback</comments><slash:comments>24</slash:comments><wfw:commentRss>http://www.cnblogs.com/teddyma/comments/commentRss/1050627.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/teddyma/services/trackbacks/1050627.html</trackback:ping><description><![CDATA[<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><B style="mso-bidi-font-weight: normal"><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">背景</SPAN><SPAN lang=EN-US><?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /><o:p></o:p></SPAN></B></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US><o:p>&nbsp;</o:p></SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">框图</SPAN></P>
<P><IMG height=202 alt=h_rbac.GIF src="http://www.cnblogs.com/images/cnblogs_com/teddyma/h_rbac.GIF" width=396 border=0><BR></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">上图中，</SPAN><SPAN lang=EN-US>Role</SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">和被设置</SPAN><SPAN lang=EN-US>Permission</SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的</SPAN><SPAN lang=EN-US>Resource</SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">都是可以有任意层级继承关系的。</SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US><o:p>&nbsp;</o:p></SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><B style="mso-bidi-font-weight: normal"><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">举例</SPAN><SPAN lang=EN-US><o:p></o:p></SPAN></B></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US><o:p>&nbsp;</o:p></SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">举一个网站的例子来说：</SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US><o:p>&nbsp;</o:p></SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">如果，</SPAN><SPAN lang=EN-US>User</SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">表示网站用户；</SPAN><SPAN lang=EN-US>Role</SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">表示角色；</SPAN><SPAN lang=EN-US>Resource</SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">表示所有可访问的</SPAN><SPAN lang=EN-US>URL</SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">；</SPAN><SPAN lang=EN-US>Permission</SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">是对每一个</SPAN><SPAN lang=EN-US>URL</SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的某一个权限（如：查看，修改等）。</SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US><o:p>&nbsp;</o:p></SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US>Role</SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">可以有任意层级继承关系，如：用户角色可以分为</SPAN><SPAN lang=EN-US>Normal User</SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">和</SPAN><SPAN lang=EN-US>Admin User</SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">，</SPAN><SPAN lang=EN-US>Admin User</SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">下又可以分为</SPAN><SPAN lang=EN-US>Super Admin</SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">、</SPAN><SPAN lang=EN-US>Content Admin</SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">、</SPAN><SPAN lang=EN-US>Support Admin</SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">等。</SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US><o:p>&nbsp;</o:p></SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US>URL</SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">这种</SPAN><SPAN lang=EN-US>Resource</SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">也可以有任意层级继承关系的，如：对</SPAN><SPAN lang=EN-US><A href="http://abc.com/A/A1/A11/A111.aspx">http://abc.com/A/A1/A11/A111.aspx</A></SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">这样一个链接，可以认为</SPAN><SPAN lang=EN-US><A href="http://abc.com/A1">http://abc.com/A1</A></SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">是一个</SPAN><SPAN lang=EN-US>URL Resource</SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">，</SPAN><SPAN lang=EN-US><A href="http://abc.com/A/A1/A11">http://abc.com/A/A1/A11</A></SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">是他的一个子</SPAN><SPAN lang=EN-US>Resource</SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">，</SPAN><SPAN lang=EN-US><A href="http://abc.com/A/A1/A11/A111.aspx">http://abc.com/A/A1/A11/A111.aspx</A></SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">又是</SPAN><SPAN lang=EN-US><A href="http://abc.com/A/A1/A11">http://abc.com/A/A1/A11</A></SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的一个子</SPAN><SPAN lang=EN-US>Resource</SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">。</SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US><o:p>&nbsp;</o:p></SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">对某一个</SPAN><SPAN lang=EN-US>Role</SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">来说，他对某一个</SPAN><SPAN lang=EN-US>Resource – R1</SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的具体的</SPAN><SPAN lang=EN-US>Permissions</SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">，等于关联到这个</SPAN><SPAN lang=EN-US>Role</SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的</SPAN><SPAN lang=EN-US>Resource - R1</SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">及其所有父级</SPAN><SPAN lang=EN-US>Resource</SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的</SPAN><SPAN lang=EN-US>Permissions</SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的并集。</SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US><o:p>&nbsp;</o:p></SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">对于某一个</SPAN><SPAN lang=EN-US>User</SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">来说，他对某一个</SPAN><SPAN lang=EN-US>Resource</SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的</SPAN><SPAN lang=EN-US>Permissions</SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">，等于他所属的所有</SPAN><SPAN lang=EN-US>Roles</SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的</SPAN><SPAN lang=EN-US>Permissions</SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的并集。</SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US><o:p>&nbsp;</o:p></SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><B style="mso-bidi-font-weight: normal"><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">问题</SPAN><SPAN lang=EN-US><o:p></o:p></SPAN></B></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US><o:p>&nbsp;</o:p></SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">各元素之间的关系容易理解，关键的难点在于，因为</SPAN><SPAN lang=EN-US>Role</SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">和</SPAN><SPAN lang=EN-US>Resource</SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">都可以是有无限层级继承关系的，如何保证权限信息验证具有较高的性能呢？当继承关系较复杂时，递归检测的性能无疑是不可接受的。</SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US><o:p>&nbsp;</o:p></SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><B style="mso-bidi-font-weight: normal"><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">数据库表</SPAN><SPAN lang=EN-US><o:p></o:p></SPAN></B></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US><o:p>&nbsp;</o:p></SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US>User</SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">（</SPAN><SPAN lang=EN-US>ID</SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">，</SPAN><SPAN lang=EN-US>Name</SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">）</SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US>Role</SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">（</SPAN><SPAN lang=EN-US>ID</SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">，</SPAN><SPAN lang=EN-US>Name</SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">，</SPAN><SPAN lang=EN-US>ParentID</SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">，</SPAN><B style="mso-bidi-font-weight: normal"><SPAN lang=EN-US>LeftIndex</SPAN></B><B style="mso-bidi-font-weight: normal"><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">，</SPAN><SPAN lang=EN-US>RightIndex</SPAN></B><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">）</SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US>UsersInRoles</SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">（</SPAN><SPAN lang=EN-US>UserID</SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">，</SPAN><SPAN lang=EN-US>RoleID</SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">）</SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US>Resource</SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">（</SPAN><SPAN lang=EN-US>ID</SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">，</SPAN><SPAN lang=EN-US>Name</SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">，</SPAN><SPAN lang=EN-US>ParentID</SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">，</SPAN><B style="mso-bidi-font-weight: normal"><SPAN lang=EN-US>LeftIndex</SPAN></B><B style="mso-bidi-font-weight: normal"><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">，</SPAN><SPAN lang=EN-US>RightIndex</SPAN></B><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">）</SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US>PermissionsOfRole</SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">（</SPAN><SPAN lang=EN-US>PermissionsValue</SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">，</SPAN><SPAN lang=EN-US>ResourceID</SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">，</SPAN><SPAN lang=EN-US>RoleID</SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">）</SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US><o:p>&nbsp;</o:p></SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">这里简单起见，对于</SPAN><SPAN lang=EN-US>Permissions</SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">，使用一个二进制位表示一个具体的</SPAN><SPAN lang=EN-US>Permission</SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">。我们需要事先定义一个</SPAN><SPAN lang=EN-US>PermissionsValue</SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的每一个二进制位表示的</SPAN><SPAN lang=EN-US>Permission</SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">。例如：如果</SPAN><SPAN lang=EN-US>PermissionsValue</SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的二进制值为</SPAN><SPAN lang=EN-US>10101010</SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">，表示从低位到高位第</SPAN><SPAN lang=EN-US>2</SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">、</SPAN><SPAN lang=EN-US>4</SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">、</SPAN><SPAN lang=EN-US>6</SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">、</SPAN><SPAN lang=EN-US>8</SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">位所代表的权限的并集。</SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US><o:p>&nbsp;</o:p></SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">使用二进制位表示一个具体的</SPAN><SPAN lang=EN-US>Permission</SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的好处是，处理</SPAN><SPAN lang=EN-US>Permissions</SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的并操作可以转换为二进制的</SPAN><SPAN lang=EN-US>OR</SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">；缺点是，具体的</SPAN><SPAN lang=EN-US>Permission</SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">想不能特别多，因为多一个就意味着</SPAN><SPAN lang=EN-US>PermissionsValue</SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的最大值大一个</SPAN><SPAN lang=EN-US>2</SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的次方。</SPAN><SPAN lang=EN-US>8</SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">位二进制的最大值是</SPAN><SPAN lang=EN-US>2</SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的</SPAN><SPAN lang=EN-US>8</SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">次方，这不算很大，但是，</SPAN><SPAN lang=EN-US>1000</SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">位二进制的最大值是</SPAN><SPAN lang=EN-US>2</SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的</SPAN><SPAN lang=EN-US>1000</SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">次方，这就是个不可想象的巨大数字了。好在，一般来讲，具体的</SPAN><SPAN lang=EN-US>Permission</SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">项目不会特别多的。</SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US><o:p>&nbsp;</o:p></SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">该方案的关键，就在于</SPAN><SPAN lang=EN-US>Role</SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">和</SPAN><SPAN lang=EN-US>Resource</SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">表的</SPAN><SPAN lang=EN-US>LeftIndex</SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">和</SPAN><SPAN lang=EN-US>RightIndex</SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">这两个字段了，我们将使用这两个字段，在避免递归的情况下，实现较高性能的取某个继承节点的所有子元素或所有父元素的算法。</SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US><o:p>&nbsp;</o:p></SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><B style="mso-bidi-font-weight: normal"><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">算法</SPAN><SPAN lang=EN-US><o:p></o:p></SPAN></B></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US><o:p>&nbsp;</o:p></SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">我们以</SPAN><SPAN lang=EN-US>Role</SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">为例，首先</SPAN><SPAN lang=EN-US>Role</SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">表中有且只有一条记录存放所有</SPAN><SPAN lang=EN-US>Roles</SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的顶层父节点（</SPAN><SPAN lang=EN-US>1</SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">，“</SPAN><SPAN lang=EN-US>Root Role</SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">”，</SPAN><SPAN lang=EN-US>1</SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">，</SPAN><SPAN lang=EN-US>2</SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">）。当他没有子节点时，其</SPAN><SPAN lang=EN-US>LeftIndex</SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">和</SPAN><SPAN lang=EN-US>RightIndex</SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的值分别为</SPAN><SPAN lang=EN-US>1</SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">和</SPAN><SPAN lang=EN-US>2</SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">。当对其插入子节点时，</SPAN><SPAN lang=EN-US>LeftIndex</SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">和</SPAN><SPAN lang=EN-US>RightIndex</SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的值需要做相应的调整，调整的规则如下（括号中为</SPAN><SPAN lang=EN-US>LeftIndex</SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">和</SPAN><SPAN lang=EN-US>RightIndex</SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的值）：</SPAN></P>
<P><IMG height=199 alt=h_rbac_alg.GIF src="http://www.cnblogs.com/images/cnblogs_com/teddyma/h_rbac_alg.GIF" width=373 border=0><BR></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">按逆时针方向，大家能看出规则吗？</SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">按照这个规则，我们可以如下获取某一个节点的所有字节点或所有父结点（使用伪</SPAN><SPAN lang=EN-US>SQL</SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">代码表示）：</SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US><o:p>&nbsp;</o:p></SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">获取</SPAN><SPAN lang=EN-US>ID</SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">为</SPAN><SPAN lang=EN-US>3</SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的</SPAN><SPAN lang=EN-US>Role</SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">节点的所有的子结点包括本身：</SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US style="FONT-FAMILY: 'Courier New'">SELECT * FROM Role WHERE <o:p></o:p></SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US style="FONT-FAMILY: 'Courier New'">LeftIndex &gt;= (SELECT LeftIndex FROM Role WHERE ID = 3)<o:p></o:p></SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US style="FONT-FAMILY: 'Courier New'">AND<o:p></o:p></SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US style="FONT-FAMILY: 'Courier New'">RightIndex &lt;= (SELECT RightIndex FROM Role WHERE ID = 3)<o:p></o:p></SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">注：如果要不包括</SPAN><SPAN lang=EN-US>ID=3</SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的节点本身，只需要用</SPAN><SPAN lang=EN-US>&gt;</SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">和</SPAN><SPAN lang=EN-US>&lt;</SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">代替</SPAN><SPAN lang=EN-US>&gt;=</SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">和</SPAN><SPAN lang=EN-US>&lt;=</SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">。</SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US><o:p>&nbsp;</o:p></SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">获取</SPAN><SPAN lang=EN-US>ID</SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">为</SPAN><SPAN lang=EN-US>5</SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的</SPAN><SPAN lang=EN-US>Role</SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">节点的所有父节点包括本身：</SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US style="FONT-FAMILY: 'Courier New'">SELECT * FROM Role WHERE<o:p></o:p></SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US style="FONT-FAMILY: 'Courier New'">LeftIndex &lt;= (SELECT LeftIndex FROM Role WHERE ID = 3)<o:p></o:p></SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US style="FONT-FAMILY: 'Courier New'">AND<o:p></o:p></SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US style="FONT-FAMILY: 'Courier New'">RightIndex &gt;= (SELECT RightIndex FROM Role WHERE ID = 3)<o:p></o:p></SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">注：如果要不包括</SPAN><SPAN lang=EN-US>ID=5</SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的节点本身，只需要用</SPAN><SPAN lang=EN-US>&gt;</SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">和</SPAN><SPAN lang=EN-US>&lt;</SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">代替</SPAN><SPAN lang=EN-US>&gt;=</SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">和</SPAN><SPAN lang=EN-US>&lt;=</SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">。</SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US><o:p>&nbsp;</o:p></SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">大家可以根据上面的图验证一下算法的效果。完全不需要递归，只需要简单的判断</SPAN><SPAN lang=EN-US>LeftIndex</SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">和</SPAN><SPAN lang=EN-US>RightIndex</SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">就行，性能自然是非常好的。</SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US><o:p>&nbsp;</o:p></SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">我们甚至可以以非常简单的</SPAN><SPAN lang=EN-US>SQL</SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">语句获得某一个</SPAN><SPAN lang=EN-US>ID</SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">为</SPAN><SPAN lang=EN-US>2</SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的</SPAN><SPAN lang=EN-US>User</SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">对</SPAN><SPAN lang=EN-US>ID</SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">为</SPAN><SPAN lang=EN-US>6</SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的</SPAN><SPAN lang=EN-US>Resource</SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的</SPAN><SPAN lang=EN-US>PermissionsValue</SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">：</SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US><o:p>&nbsp;</o:p></SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US style="FONT-FAMILY: 'Courier New'">DECLARE @PermissionsValue int;<o:p></o:p></SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US style="FONT-FAMILY: 'Courier New'">SELECT @PermissionsValue = @PermissionsValue | PermissionsValue <o:p></o:p></SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US style="FONT-FAMILY: 'Courier New'">FROM PermissionsOfRole WHERE<o:p></o:p></SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US style="FONT-FAMILY: 'Courier New'">RoleID IN <o:p></o:p></SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US style="FONT-FAMILY: 'Courier New'">(<o:p></o:p></SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US style="FONT-FAMILY: 'Courier New'">SELECT ID FROM Role WHERE <o:p></o:p></SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US style="FONT-FAMILY: 'Courier New'">LeftIndex &gt;= (SELECT LeftIndex FROM Role WHERE ID IN <o:p></o:p></SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 10.5pt; mso-char-indent-count: 1.0"><SPAN lang=EN-US style="FONT-FAMILY: 'Courier New'">(SELECT RoleID FROM UsersInRoles WHERE UserID = 2))<o:p></o:p></SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US style="FONT-FAMILY: 'Courier New'">AND<o:p></o:p></SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US style="FONT-FAMILY: 'Courier New'">RightIndex &lt;= (SELECT RightIndex FROM Role WHERE ID IN<o:p></o:p></SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 10.5pt; mso-char-indent-count: 1.0"><SPAN lang=EN-US style="FONT-FAMILY: 'Courier New'">(SELECT RoleID FROM UsersInRoles WHERE UserID = 2))<o:p></o:p></SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US style="FONT-FAMILY: 'Courier New'">)<o:p></o:p></SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US style="FONT-FAMILY: 'Courier New'">AND<o:p></o:p></SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US style="FONT-FAMILY: 'Courier New'">ResourceID IN<o:p></o:p></SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US style="FONT-FAMILY: 'Courier New'">(<o:p></o:p></SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US style="FONT-FAMILY: 'Courier New'">SELECT ID FROM Resource WHERE<o:p></o:p></SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US style="FONT-FAMILY: 'Courier New'">LeftIndex &lt;= (SELECT LeftIndex FROM Resource WHERE ID = 6)<o:p></o:p></SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US style="FONT-FAMILY: 'Courier New'">AND<o:p></o:p></SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US style="FONT-FAMILY: 'Courier New'">RightIndex &gt;= (SELECT RightIndex FROM Resource WHERE ID = 6)<o:p></o:p></SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US style="FONT-FAMILY: 'Courier New'">);<o:p></o:p></SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US style="FONT-FAMILY: 'Courier New'">SELECT @PermissionsValue;<o:p></o:p></SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">上面的</SPAN><SPAN lang=EN-US>SQL</SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">虽然有不少嵌套的</SPAN><SPAN lang=EN-US>SELECT</SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">，但是，因为子查询基本上都是对主键字段的条件判断，</SPAN><SPAN lang=EN-US>LeftIndex</SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">和</SPAN><SPAN lang=EN-US>RightIndex</SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">我们也会加上索引，因此，实际上不会对性能造成太大影响。</SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US><o:p>&nbsp;</o:p></SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US>OK</SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">，查询性能很好，不过这是以新建或修改</SPAN><SPAN lang=EN-US>Role</SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">和</SPAN><SPAN lang=EN-US>Resource</SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的层级关系时的一定的性能损失为代价的。每次新增或修改</SPAN><SPAN lang=EN-US>Role</SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">或</SPAN><SPAN lang=EN-US>Resource</SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的层级关系时，必须按照前面所述的规则重置所有节点的</SPAN><SPAN lang=EN-US>LeftIndex</SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">和</SPAN><SPAN lang=EN-US>RightIndex</SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">值。不过，一般情况下，由于</SPAN><SPAN lang=EN-US>Role</SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">和</SPAN><SPAN lang=EN-US>Resource</SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的维护操作占系统整体操作的比例很小，几乎可以忽略，因此其性能损失也不是什么大问题。具体的重置所有节点</SPAN><SPAN lang=EN-US>LeftIndex</SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">和</SPAN><SPAN lang=EN-US>RightIndex</SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">值的伪代码我就不贴出来了，大家稍微花费几个脑细胞就能想出来了</SPAN><SPAN lang=EN-US>^-^</SPAN></P>
<P>//结束</P><img src ="http://www.cnblogs.com/teddyma/aggbug/1050627.html?type=1" width = "1" height = "1" /><br/><br/>--------------------------<br/>新闻：<a href="http://news.cnblogs.com/n/47945/" target="_blank">Firefox 3.5本月晚些时候即首次升级</a><br/>网站导航: <a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&nbsp;&nbsp;<a href="http://news.cnblogs.com" target="_blank">新闻</a>&nbsp;&nbsp;<a href="http://dotnet.cnblogs.com" target="_blank">.NET频道</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com" target="_blank">社区</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/q/" target="_blank">博问</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/ing/" target="_blank">闪存</a>&nbsp;&nbsp;<a href="http://zzk.cnblogs.com" target="_blank">找找看</a>]]></description></item><item><title>NBearLite PetShop 4.0示例源码</title><link>http://www.cnblogs.com/teddyma/archive/2008/01/09/1031975.html</link><dc:creator>Teddy's Knowledge Base</dc:creator><author>Teddy's Knowledge Base</author><pubDate>Wed, 09 Jan 2008 06:44:00 GMT</pubDate><guid>http://www.cnblogs.com/teddyma/archive/2008/01/09/1031975.html</guid><wfw:comment>http://www.cnblogs.com/teddyma/comments/1031975.html</wfw:comment><comments>http://www.cnblogs.com/teddyma/archive/2008/01/09/1031975.html#Feedback</comments><slash:comments>34</slash:comments><wfw:commentRss>http://www.cnblogs.com/teddyma/comments/commentRss/1031975.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/teddyma/services/trackbacks/1031975.html</trackback:ping><description><![CDATA[摘要: 该示例使用NBearLite v1.0.1.2，基于.Net PetShop 4.0的源码修改。使用NBearLite重写了等价功能的BLL、Profile、Membership模块的数据访问部分，去除了DALFacrory、IDAL等工程（因为基于NBearLite可以透明的在多种数据库源间进行无缝切换，无需修改代码），去除了Order的基于MSMQ的异步处理部分。本示例演示了使用NBearLite作为数据访问组件进行开发的常用方法。Web工程的Web.config中默认关闭了CaceDependency，并设置了Sqlite为默认数据库。&nbsp;&nbsp;<a href='http://www.cnblogs.com/teddyma/archive/2008/01/09/1031975.html'>阅读全文</a><img src ="http://www.cnblogs.com/teddyma/aggbug/1031975.html?type=1" width = "1" height = "1" /><br/><br/>--------------------------<br/>新闻：<a href="http://news.cnblogs.com/n/47944/" target="_blank">Google App Engine出现故障宕机6小时</a><br/>网站导航: <a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&nbsp;&nbsp;<a href="http://news.cnblogs.com" target="_blank">新闻</a>&nbsp;&nbsp;<a href="http://dotnet.cnblogs.com" target="_blank">.NET频道</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com" target="_blank">社区</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/q/" target="_blank">博问</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/ing/" target="_blank">闪存</a>&nbsp;&nbsp;<a href="http://zzk.cnblogs.com" target="_blank">找找看</a>]]></description></item><item><title>基于CodeGenerator的Emit代码生成辅助类源码及演示</title><link>http://www.cnblogs.com/teddyma/archive/2007/10/10/919449.html</link><dc:creator>Teddy's Knowledge Base</dc:creator><author>Teddy's Knowledge Base</author><pubDate>Wed, 10 Oct 2007 03:56:00 GMT</pubDate><guid>http://www.cnblogs.com/teddyma/archive/2007/10/10/919449.html</guid><wfw:comment>http://www.cnblogs.com/teddyma/comments/919449.html</wfw:comment><comments>http://www.cnblogs.com/teddyma/archive/2007/10/10/919449.html#Feedback</comments><slash:comments>14</slash:comments><wfw:commentRss>http://www.cnblogs.com/teddyma/comments/commentRss/919449.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/teddyma/services/trackbacks/919449.html</trackback:ping><description><![CDATA[摘要: 本文介绍一组NBearV4中的基于Emit动态生成代码的辅助类，部分概念在本人的blog之前的文章中或多或少都有介绍，这里包含最新的更新及演示、测试。主要是两个类：CodeGenerator和DynamicMethodFactory。前者提供了一种经过封装的，简化Emit方法（包括Emit DynamicMethod，Constructor，Method，get、set Method of Property）的方案；后者基于前者，实现了一种访问指定类（可以是第三方程序集的internal类）的方法或成员变量，实例化第三方程序集中的internal类型，高性能的以非泛型语法访问泛型方法的机制（通过DynamicMethod和Delegate实现）。&nbsp;&nbsp;<a href='http://www.cnblogs.com/teddyma/archive/2007/10/10/919449.html'>阅读全文</a><img src ="http://www.cnblogs.com/teddyma/aggbug/919449.html?type=1" width = "1" height = "1" /><br/><br/>--------------------------<br/>新闻：<a href="http://news.cnblogs.com/n/47943/" target="_blank">消息称Facebook今年营收将达5.5亿美元</a><br/>网站导航: <a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&nbsp;&nbsp;<a href="http://news.cnblogs.com" target="_blank">新闻</a>&nbsp;&nbsp;<a href="http://dotnet.cnblogs.com" target="_blank">.NET频道</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com" target="_blank">社区</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/q/" target="_blank">博问</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/ing/" target="_blank">闪存</a>&nbsp;&nbsp;<a href="http://zzk.cnblogs.com" target="_blank">找找看</a>]]></description></item><item><title>扩展Kevin McFarlane的C#版DesignByContract Framework</title><link>http://www.cnblogs.com/teddyma/archive/2007/10/05/914656.html</link><dc:creator>Teddy's Knowledge Base</dc:creator><author>Teddy's Knowledge Base</author><pubDate>Fri, 05 Oct 2007 07:01:00 GMT</pubDate><guid>http://www.cnblogs.com/teddyma/archive/2007/10/05/914656.html</guid><wfw:comment>http://www.cnblogs.com/teddyma/comments/914656.html</wfw:comment><comments>http://www.cnblogs.com/teddyma/archive/2007/10/05/914656.html#Feedback</comments><slash:comments>7</slash:comments><wfw:commentRss>http://www.cnblogs.com/teddyma/comments/commentRss/914656.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/teddyma/services/trackbacks/914656.html</trackback:ping><description><![CDATA[摘要: Kevin McFarlane的C#版DesignByContract Framework实现从02年在CodeProject发布至今，几乎成为C#开发中大多数朋友使用的事实标准。本文结合对该框架的使用经验，在Kevin的原始版本的基础上，使用Strategy Pattern对其进行进一步的扩展，对最常用的检查语义进行封装简化。本文改进的源码以Public Domain协议发布，也就是说，完全没有任何限制。&nbsp;&nbsp;<a href='http://www.cnblogs.com/teddyma/archive/2007/10/05/914656.html'>阅读全文</a><img src ="http://www.cnblogs.com/teddyma/aggbug/914656.html?type=1" width = "1" height = "1" /><br/><br/>--------------------------<br/>新闻：<a href="http://news.cnblogs.com/n/47937/" target="_blank">微软8月25日开始通过WSUS推送IE8</a><br/>网站导航: <a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&nbsp;&nbsp;<a href="http://news.cnblogs.com" target="_blank">新闻</a>&nbsp;&nbsp;<a href="http://dotnet.cnblogs.com" target="_blank">.NET频道</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com" target="_blank">社区</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/q/" target="_blank">博问</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/ing/" target="_blank">闪存</a>&nbsp;&nbsp;<a href="http://zzk.cnblogs.com" target="_blank">找找看</a>]]></description></item><item><title>发布NBearLite中文版完全参考手册 + NBearLite 10分钟入门教程 + NBearLite v1.0.0.7 beta</title><link>http://www.cnblogs.com/teddyma/archive/2007/07/29/835412.html</link><dc:creator>Teddy's Knowledge Base</dc:creator><author>Teddy's Knowledge Base</author><pubDate>Sun, 29 Jul 2007 07:12:00 GMT</pubDate><guid>http://www.cnblogs.com/teddyma/archive/2007/07/29/835412.html</guid><wfw:comment>http://www.cnblogs.com/teddyma/comments/835412.html</wfw:comment><comments>http://www.cnblogs.com/teddyma/archive/2007/07/29/835412.html#Feedback</comments><slash:comments>22</slash:comments><wfw:commentRss>http://www.cnblogs.com/teddyma/comments/commentRss/835412.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/teddyma/services/trackbacks/835412.html</trackback:ping><description><![CDATA[摘要: NBearLite是一个.NET 2.0开源(BSD协议)通用数据访问组件，支持SQL Server、Oracle、MS Access，MySQL，SQLite，PostgreSQL等多种数据库的透明切换（改变数据库类型时无需修改具体的查询代码）。NBearLite实现了一套类似LINQ的强类型数据库查询语法(支持从简单的CRUD查询到GroupBy、InnerJoin，Paging，SubQuery等常用复杂查询)。NBearLite提供的代码生成工具还可以为您自动生成所有的存储过程调用包装代码，可以让您像使用一个.NET类的方法一样访问存储过程（支持SQL Server，Oracle，MySQL，PostgreSQL数据库）。

NBearLite不是一个ORM工具，它不涉及实体类，NBearLite的所有查询返回Scalar/DataSet/IDataReader等ADO.NET原生数据类型。

推荐在使用NBearLite的同时结合使用NBearMapping进行IDataReader/DataRow数据类型和自定义.NET类(如：实体类或业务类&nbsp;&nbsp;<a href='http://www.cnblogs.com/teddyma/archive/2007/07/29/835412.html'>阅读全文</a><img src ="http://www.cnblogs.com/teddyma/aggbug/835412.html?type=1" width = "1" height = "1" /><br/><br/>--------------------------<br/>新闻：<a href="http://news.cnblogs.com/n/47935/" target="_blank">暴风称新旧版更换完毕 总计超4000万用户换装</a><br/>网站导航: <a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&nbsp;&nbsp;<a href="http://news.cnblogs.com" target="_blank">新闻</a>&nbsp;&nbsp;<a href="http://dotnet.cnblogs.com" target="_blank">.NET频道</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com" target="_blank">社区</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/q/" target="_blank">博问</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/ing/" target="_blank">闪存</a>&nbsp;&nbsp;<a href="http://zzk.cnblogs.com" target="_blank">找找看</a>]]></description></item><item><title>再续NBear性能测试:ADO.NET, NBearV3, NHibernateV1, NBearLite, NBearLite+NBearMapping性能比较[2008/1/3修订：NBearLite更新至v1.0.1.0整合NBearMapping版地测试结果]</title><link>http://www.cnblogs.com/teddyma/archive/2007/07/26/831646.html</link><dc:creator>Teddy's Knowledge Base</dc:creator><author>Teddy's Knowledge Base</author><pubDate>Thu, 26 Jul 2007 00:15:00 GMT</pubDate><guid>http://www.cnblogs.com/teddyma/archive/2007/07/26/831646.html</guid><wfw:comment>http://www.cnblogs.com/teddyma/comments/831646.html</wfw:comment><comments>http://www.cnblogs.com/teddyma/archive/2007/07/26/831646.html#Feedback</comments><slash:comments>27</slash:comments><wfw:commentRss>http://www.cnblogs.com/teddyma/comments/commentRss/831646.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/teddyma/services/trackbacks/831646.html</trackback:ping><description><![CDATA[摘要: 本测试对ADO.NET, NBearV3, NHibernateV1, NBearLite, NBearLite+NBearMapping进行了常见的读写测试。本测试同时证实，NBearLite及NBearLite+NBearMapping的ORM方案，平均性能有很大改善。&nbsp;&nbsp;<a href='http://www.cnblogs.com/teddyma/archive/2007/07/26/831646.html'>阅读全文</a><img src ="http://www.cnblogs.com/teddyma/aggbug/831646.html?type=1" width = "1" height = "1" /><br/><br/>--------------------------<br/>新闻：<a href="http://news.cnblogs.com/n/47934/" target="_blank">3.5版既出 Firefox面临新挑战</a><br/>网站导航: <a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&nbsp;&nbsp;<a href="http://news.cnblogs.com" target="_blank">新闻</a>&nbsp;&nbsp;<a href="http://dotnet.cnblogs.com" target="_blank">.NET频道</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com" target="_blank">社区</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/q/" target="_blank">博问</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/ing/" target="_blank">闪存</a>&nbsp;&nbsp;<a href="http://zzk.cnblogs.com" target="_blank">找找看</a>]]></description></item><item><title>NBearMapping - 开源通用对象映射组件v1.0.0.2 beta - 支持枚举类型字段</title><link>http://www.cnblogs.com/teddyma/archive/2007/07/25/830863.html</link><dc:creator>Teddy's Knowledge Base</dc:creator><author>Teddy's Knowledge Base</author><pubDate>Wed, 25 Jul 2007 07:23:00 GMT</pubDate><guid>http://www.cnblogs.com/teddyma/archive/2007/07/25/830863.html</guid><wfw:comment>http://www.cnblogs.com/teddyma/comments/830863.html</wfw:comment><comments>http://www.cnblogs.com/teddyma/archive/2007/07/25/830863.html#Feedback</comments><slash:comments>17</slash:comments><wfw:commentRss>http://www.cnblogs.com/teddyma/comments/commentRss/830863.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/teddyma/services/trackbacks/830863.html</trackback:ping><description><![CDATA[摘要: NBearMapping是NBearV4框架的组件之一，可以独立使用。可用于任意类型对象、DataRow和DataReader对象间的透明映射。建议结合NBearLite使用。<br>主要功能：<br>1、任意类型对象、DataRow和DataReader对象间的透明映射；<br>2、支持.NET的Nullable类型；<br>3、较高的性能，性能比基于Reflection的等价转换快约50%，手动代码 vs NBearMapping vs Reflection对象转换的执行时间比大约为1:2.5:3.6，可参见源码中MappingTest.TestPerformance() 测试；&nbsp;&nbsp;<a href='http://www.cnblogs.com/teddyma/archive/2007/07/25/830863.html'>阅读全文</a><img src ="http://www.cnblogs.com/teddyma/aggbug/830863.html?type=1" width = "1" height = "1" /><br/><br/>--------------------------<br/>新闻：<a href="http://news.cnblogs.com/n/47930/" target="_blank">Bing首页将显示各国美景 顺推Silverlight</a><br/>网站导航: <a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&nbsp;&nbsp;<a href="http://news.cnblogs.com" target="_blank">新闻</a>&nbsp;&nbsp;<a href="http://dotnet.cnblogs.com" target="_blank">.NET频道</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com" target="_blank">社区</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/q/" target="_blank">博问</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/ing/" target="_blank">闪存</a>&nbsp;&nbsp;<a href="http://zzk.cnblogs.com" target="_blank">找找看</a>]]></description></item><item><title>发布NBearLite v1.0.0 beta - 全面支持SqlServer，Oracle，MySql，PostgreSql数据库存储过程调用代码生成（C#/VB.NET）</title><link>http://www.cnblogs.com/teddyma/archive/2007/07/23/828356.html</link><dc:creator>Teddy's Knowledge Base</dc:creator><author>Teddy's Knowledge Base</author><pubDate>Mon, 23 Jul 2007 07:08:00 GMT</pubDate><guid>http://www.cnblogs.com/teddyma/archive/2007/07/23/828356.html</guid><wfw:comment>http://www.cnblogs.com/teddyma/comments/828356.html</wfw:comment><comments>http://www.cnblogs.com/teddyma/archive/2007/07/23/828356.html#Feedback</comments><slash:comments>15</slash:comments><wfw:commentRss>http://www.cnblogs.com/teddyma/comments/commentRss/828356.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/teddyma/services/trackbacks/828356.html</trackback:ping><description><![CDATA[摘要: NBearLite 更新至v1.0.0.6 beta <br>全面支持SqlServer，Oracle，MySql，PostgreSql数据库存储过程调用代码生成（C#/VB.NET），支持输入、输出、返回等各种参数类型。<br>支持Sub Query。<br>支持Save DataTable/DataRow。&nbsp;&nbsp;<a href='http://www.cnblogs.com/teddyma/archive/2007/07/23/828356.html'>阅读全文</a><img src ="http://www.cnblogs.com/teddyma/aggbug/828356.html?type=1" width = "1" height = "1" /><br/><br/>--------------------------<br/>新闻：<a href="http://news.cnblogs.com/n/47929/" target="_blank">Gmail 的标签马上就会支持拖拽操作了</a><br/>网站导航: <a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&nbsp;&nbsp;<a href="http://news.cnblogs.com" target="_blank">新闻</a>&nbsp;&nbsp;<a href="http://dotnet.cnblogs.com" target="_blank">.NET频道</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com" target="_blank">社区</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/q/" target="_blank">博问</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/ing/" target="_blank">闪存</a>&nbsp;&nbsp;<a href="http://zzk.cnblogs.com" target="_blank">找找看</a>]]></description></item></channel></rss>