﻿<?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>BlogJava-paulwong-随笔分类-WEBSERVICE</title><link>http://www.blogjava.net/paulwong/category/51272.html</link><description /><language>zh-cn</language><lastBuildDate>Sat, 19 Apr 2014 14:55:51 GMT</lastBuildDate><pubDate>Sat, 19 Apr 2014 14:55:51 GMT</pubDate><ttl>60</ttl><item><title>REST client 基于浏览器的测试工具</title><link>http://www.blogjava.net/paulwong/archive/2014/04/19/412688.html</link><dc:creator>paulwong</dc:creator><author>paulwong</author><pubDate>Sat, 19 Apr 2014 10:45:00 GMT</pubDate><guid>http://www.blogjava.net/paulwong/archive/2014/04/19/412688.html</guid><wfw:comment>http://www.blogjava.net/paulwong/comments/412688.html</wfw:comment><comments>http://www.blogjava.net/paulwong/archive/2014/04/19/412688.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/paulwong/comments/commentRss/412688.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/paulwong/services/trackbacks/412688.html</trackback:ping><description><![CDATA[<p style="margin: 0px 0px 15px; color: #666666; font-family: Tahoma, Arial, sans-serif; font-size: 13px; line-height: 20.799999237060547px; background-color: #ffffff; ">　　以前在开发webservice服务，都是自己基于HTTP协议，自己写一个测试程序来进行测试，最近在研究RestFul，对以前webservice服务进行了重构，总结了不少经验，今天就给大家介绍下几款Rest Client的测试工具。</p>
<h3 style="margin: 0px 0px 15px; font-family: 'Open Sans', sans-serif; line-height: 1.5em; color: #333333; text-rendering: optimizelegibility; font-size: 22px; background-color: #ffffff; ">REST介绍</h3>
<p style="margin: 0px 0px 15px; color: #666666; font-family: Tahoma, Arial, sans-serif; font-size: 13px; line-height: 20.799999237060547px; background-color: #ffffff; ">　　所谓REST，是Representational State Transfer，这个词汇的中文翻译很不统一，而且很晦涩，有叫&#8220;具象状态传输&#8221;，有叫&#8220;表象化状态转变&#8221;，等等。</p>
<p style="margin: 0px 0px 15px; color: #666666; font-family: Tahoma, Arial, sans-serif; font-size: 13px; line-height: 20.799999237060547px; background-color: #ffffff; ">　　REST风格的Web服务，是通过一个简洁清晰的URI来提供资源链接，客户端通过对URI发送HTTP请求获得这些资源，而获取和处理资源的过程让客户端应用的状态发生改变（不像那些远程过程调用那么直接地发生改变）。</p>
<p style="margin: 0px 0px 15px; color: #666666; font-family: Tahoma, Arial, sans-serif; font-size: 13px; line-height: 20.799999237060547px; background-color: #ffffff; ">　　常用的对资源进行CRUD（Create, Read, Update 和 Delete）的四种HTTP方法分别是POST, GET, PUT, DELETE。</p>
<h3 style="margin: 0px 0px 15px; font-family: 'Open Sans', sans-serif; line-height: 1.5em; color: #333333; text-rendering: optimizelegibility; font-size: 22px; background-color: #ffffff; ">基于浏览器的Rest Client工具</h3>
<p style="margin: 0px 0px 15px; color: #666666; font-family: Tahoma, Arial, sans-serif; font-size: 13px; line-height: 20.799999237060547px; background-color: #ffffff; ">　　在chrome或者firefox浏览器都有很多插件，我一般都是使用chrome浏览器，在chrome的webstore中可以搜索到自己想要的插件。这里就讲讲<a href="https://chrome.google.com/webstore/detail/advanced-rest-client/hgmloofddffdnphfgcellkdfbfbjeloo/details" style="color: #94c045; text-decoration: none;">Advance REST Client</a>,<a href="https://chrome.google.com/webstore/detail/postman-rest-client/fdmmgilgnpjigdojojpjoooidkmcomcm?utm_source=chrome-ntp-icon" style="color: #94c045; text-decoration: none;">Postman-REST Client</a>,<a href="https://chrome.google.com/webstore/detail/dev-http-client/aejoelaoggembcahagimdiliamlcdmfm?utm_source=chrome-ntp-icon" style="color: #94c045; text-decoration: none;">DEV HTTP CLIENT</a>,<a href="https://chrome.google.com/extensions/detail/fhjcajmcbmldlhcimfajhfbgofnpcjmb" style="color: #94c045; text-decoration: none;">Simple REST Client</a>，火狐下的<a href="https://addons.mozilla.org/zh-CN/firefox/addon/9780/" style="color: #94c045; text-decoration: none;">RESTClient插件</a>。</p>
<h3 style="margin: 0px 0px 15px; font-family: 'Open Sans', sans-serif; line-height: 1.5em; color: #333333; text-rendering: optimizelegibility; font-size: 22px; background-color: #ffffff; ">Advanced REST client</h3>
<p style="margin: 0px 0px 15px; color: #666666; font-family: Tahoma, Arial, sans-serif; font-size: 13px; line-height: 20.799999237060547px; background-color: #ffffff; ">　　网页开发者辅助程序来创建和测试自定义HTTP请求。它是一款非常强大，使用简单的客户端测试工具，得到了程序员的好评。每周超过50k的开发者使用此应用程序。如此多的人是不会错的！&nbsp;<img src="http://demi-panda.oss.aliyuncs.com/assets/images/web/advance-rest-client.jpg" width="580px" style="height: auto; max-width: 100%; vertical-align: middle; border: 0px; margin-bottom: 30px;" alt="" /></p>
<h4 style="margin: 0px 0px 15px; font-family: 'Open Sans', sans-serif; font-weight: 600; line-height: 1.5em; color: #333333; text-rendering: optimizelegibility; font-size: 18px; background-color: #ffffff; ">支持的功能</h4>
<ol style="padding: 0px; margin: 0px 0px 10px 25px; color: #666666; font-family: Tahoma, Arial, sans-serif; font-size: 13px; line-height: 20.799999237060547px; background-color: #ffffff; ">
     <li>Make a HTTP request (via XmlHttpRequest level 2)</li>
     <li>Debug socket (via web socket API).</li>
     <li>JSON response viewer</li>
     <li>XML response viewer</li>
     <li>set custom headers - even does not supported by XmlHttpRequest object</li>
     <li>help with filling HTTP headers (hint + code completion)</li>
     <li>add headers list as raw data or via form</li>
     <li>construct POST or PUT body via raw input, form or send file(s) with request</li>
     <li>set custom form encoding</li>
     <li>remember latest request (save current form state and restore on load)</li>
     <li>save (Ctrl+S) and open (Ctrl+O) saved request forms</li>
     <li>history support</li>
     <li>data import/export</li>
</ol>
<h3 style="margin: 0px 0px 15px; font-family: 'Open Sans', sans-serif; line-height: 1.5em; color: #333333; text-rendering: optimizelegibility; font-size: 22px; background-color: #ffffff; ">Postman -REST client</h3>
<p style="margin: 0px 0px 15px; color: #666666; font-family: Tahoma, Arial, sans-serif; font-size: 13px; line-height: 20.799999237060547px; background-color: #ffffff; ">　　Postman可以帮助你更有效的针对API工作。Postman是一个scratch-your-own-itch项目。它需要的是开发者有效的在项目中创建APIS，能够对API测试进行收藏保留。&nbsp;<img src="http://demi-panda.oss.aliyuncs.com/assets/images/web/postman-rest-client.jpg" width="580px" style="height: auto; max-width: 100%; vertical-align: middle; border: 0px; margin-bottom: 30px;" alt="" /></p>
<h4 style="margin: 0px 0px 15px; font-family: 'Open Sans', sans-serif; font-weight: 600; line-height: 1.5em; color: #333333; text-rendering: optimizelegibility; font-size: 18px; background-color: #ffffff; ">支持功能</h4>
<ol style="padding: 0px; margin: 0px 0px 10px 25px; color: #666666; font-family: Tahoma, Arial, sans-serif; font-size: 13px; line-height: 20.799999237060547px; background-color: #ffffff; ">
     <li>HTTP requests 支持文件上传</li>
     <li>格式化API响应的JSON and XML</li>
     <li>打开 responses 的HTML文件在一个新窗口展示</li>
     <li>支持REST准则的超媒体应用状态的引擎- HATEOS</li>
     <li>图像预览</li>
     <li>Request history</li>
     <li>基本oauth 1.0助手</li>
     <li>Autocomplete for URL and header values</li>
     <li>可以在URL参数中使用 key/value编辑添加参数或header值</li>
     <li>使用环境变量容易转移之间设置。可用于测试，生产，分期或本地设置。</li>
     <li>使用全局变量的值是在整个 APIs</li>
     <li>使用快速查找功能预览变量和它们的值使用状况</li>
     <li>键盘快捷方式，最大限度地提高您的生产力</li>
</ol>
<h3 style="margin: 0px 0px 15px; font-family: 'Open Sans', sans-serif; line-height: 1.5em; color: #333333; text-rendering: optimizelegibility; font-size: 22px; background-color: #ffffff; ">Simple REST Client</h3>
<p style="margin: 0px 0px 15px; color: #666666; font-family: Tahoma, Arial, sans-serif; font-size: 13px; line-height: 20.799999237060547px; background-color: #ffffff; ">　　<a href="https://chrome.google.com/extensions/detail/fhjcajmcbmldlhcimfajhfbgofnpcjmb" style="color: #94c045; text-decoration: none;">Simple REST Client插件</a>，提供了一个简单的表单进行各种HTTP操作，并可以看到返回的信息。构建自定义HTTP请求直接测试您的网络服务。&nbsp;<img src="http://demi-panda.oss.aliyuncs.com/assets/images/web/Simple-REST-Client-560x491.jpg" width="580px" style="height: auto; max-width: 100%; vertical-align: middle; border: 0px; margin-bottom: 30px;" alt="" /></p>
<h3 style="margin: 0px 0px 15px; font-family: 'Open Sans', sans-serif; line-height: 1.5em; color: #333333; text-rendering: optimizelegibility; font-size: 22px; background-color: #ffffff; ">Firefox下的RESTClient</h3>
<p style="margin: 0px 0px 15px; color: #666666; font-family: Tahoma, Arial, sans-serif; font-size: 13px; line-height: 20.799999237060547px; background-color: #ffffff; ">　　Firefox<a href="https://addons.mozilla.org/zh-CN/firefox/addon/9780/" style="color: #94c045; text-decoration: none;">RESTClient</a>的插件，这款插件由国人开发，功能上支持Basic和OAuth的登录header发送，并且对于返回的XML数据还可以高亮显示</p>
<p style="margin: 0px 0px 15px; color: #666666; font-family: Tahoma, Arial, sans-serif; font-size: 13px; line-height: 20.799999237060547px; background-color: #ffffff; "><img src="http://demi-panda.oss.aliyuncs.com/assets/images/web/RESTClient-560x420.jpg" width="580px" style="height: auto; max-width: 100%; vertical-align: middle; border: 0px; margin-bottom: 30px;" alt="" /></p>
<h3 style="margin: 0px 0px 15px; font-family: 'Open Sans', sans-serif; line-height: 1.5em; color: #333333; text-rendering: optimizelegibility; font-size: 22px; background-color: #ffffff; ">Linux常用的工具CURL</h3>
<p style="margin: 0px 0px 15px; color: #666666; font-family: Tahoma, Arial, sans-serif; font-size: 13px; line-height: 20.799999237060547px; background-color: #ffffff; ">　　CURL是一个很强大的支持各种协议的文件传输工具，用它来进行RESTful Web Services的测试简直是小菜一碟。</p>
<p style="margin: 0px 0px 15px; color: #666666; font-family: Tahoma, Arial, sans-serif; font-size: 13px; line-height: 20.799999237060547px; background-color: #ffffff; ">CURL的命令参数非常多，一般用于RESTful Web Services测试要用到下面四种参数：<br />
</p>
<ul style="padding: 0px; margin: 0px 0px 10px 25px; color: #666666; font-family: Tahoma, Arial, sans-serif; font-size: 13px; line-height: 20.799999237060547px; background-color: #ffffff; ">
     <li>-d/&#8211;data&nbsp;<data>：POST数据内容</data></li>
     <li>-X/&#8211;request&nbsp;<command></command>：指定请求的方法（使用-d时就自动设为POST了）</li>
     <li>-H/&#8211;header&nbsp;
     <line>：设定header信息</line>
     </li>
     <li>-I/&#8211;head：只显示返回的HTTP头信息</li>
</ul>
<h3 style="margin: 0px 0px 15px; font-family: 'Open Sans', sans-serif; line-height: 1.5em; color: #333333; text-rendering: optimizelegibility; font-size: 22px; background-color: #ffffff; ">Java GUI rest-client</h3>
<p style="margin: 0px 0px 15px; color: #666666; font-family: Tahoma, Arial, sans-serif; font-size: 13px; line-height: 20.799999237060547px; background-color: #ffffff; ">　　这是一个用Java写的测试小工具，<a href="http://code.google.com/p/rest-client/" style="color: #94c045; text-decoration: none;">项目主页</a>上提到它有命令行和GUI两种版本。为了方便操作我们选择GUI版本来看看。既然是一款软件，显然就比刚才介绍的浏览器插件功能更加强大。它支持应答正文的JSON和XML缩排和高亮，还可以一键搭建一个RESTful服务端，另外还提供了单元测试的功能。</p>
<p style="margin: 0px 0px 15px; color: #666666; font-family: Tahoma, Arial, sans-serif; font-size: 13px; line-height: 20.799999237060547px; background-color: #ffffff; "><img src="http://demi-panda.oss.aliyuncs.com/assets/images/web/RESTClient-Java-491x600.jpg" width="580px" style="height: auto; max-width: 100%; vertical-align: middle; border: 0px; margin-bottom: 30px;" alt="" /></p>
<div>格式化JSON数据</div>
<div><a href="https://chrome.google.com/webstore/detail/jsonview-jsonviewer-json/hdmbdioamgdkppmocchpkjhbpfmpjiei" target="_blank">https://chrome.google.com/webstore/detail/jsonview-jsonviewer-json/hdmbdioamgdkppmocchpkjhbpfmpjiei</a><br />
</div>
<img src ="http://www.blogjava.net/paulwong/aggbug/412688.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/paulwong/" target="_blank">paulwong</a> 2014-04-19 18:45 <a href="http://www.blogjava.net/paulwong/archive/2014/04/19/412688.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>JAX-RS客户端的测试工具，带UI</title><link>http://www.blogjava.net/paulwong/archive/2013/11/19/406537.html</link><dc:creator>paulwong</dc:creator><author>paulwong</author><pubDate>Tue, 19 Nov 2013 08:42:00 GMT</pubDate><guid>http://www.blogjava.net/paulwong/archive/2013/11/19/406537.html</guid><wfw:comment>http://www.blogjava.net/paulwong/comments/406537.html</wfw:comment><comments>http://www.blogjava.net/paulwong/archive/2013/11/19/406537.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/paulwong/comments/commentRss/406537.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/paulwong/services/trackbacks/406537.html</trackback:ping><description><![CDATA[<a href="https://code.google.com/p/rest-client/downloads/detail?name=restclient-ui-3.2.1-jar-with-dependencies.jar&amp;can=2&amp;q=" target="_blank">https://code.google.com/p/rest-client/downloads/detail?name=restclient-ui-3.2.1-jar-with-dependencies.jar&amp;can=2&amp;q=</a><img src ="http://www.blogjava.net/paulwong/aggbug/406537.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/paulwong/" target="_blank">paulwong</a> 2013-11-19 16:42 <a href="http://www.blogjava.net/paulwong/archive/2013/11/19/406537.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>让REST也支持分布式事务</title><link>http://www.blogjava.net/paulwong/archive/2012/04/24/376458.html</link><dc:creator>paulwong</dc:creator><author>paulwong</author><pubDate>Tue, 24 Apr 2012 05:14:00 GMT</pubDate><guid>http://www.blogjava.net/paulwong/archive/2012/04/24/376458.html</guid><wfw:comment>http://www.blogjava.net/paulwong/comments/376458.html</wfw:comment><comments>http://www.blogjava.net/paulwong/archive/2012/04/24/376458.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/paulwong/comments/commentRss/376458.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/paulwong/services/trackbacks/376458.html</trackback:ping><description><![CDATA[<a target="_blank" href="http://ajaxcn.iteye.com/blog/438237">http://ajaxcn.iteye.com/blog/438237</a><img src ="http://www.blogjava.net/paulwong/aggbug/376458.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/paulwong/" target="_blank">paulwong</a> 2012-04-24 13:14 <a href="http://www.blogjava.net/paulwong/archive/2012/04/24/376458.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>使用 WS-AtomicTransaction 和 JTA 的分布式事务</title><link>http://www.blogjava.net/paulwong/archive/2012/03/30/373014.html</link><dc:creator>paulwong</dc:creator><author>paulwong</author><pubDate>Thu, 29 Mar 2012 16:21:00 GMT</pubDate><guid>http://www.blogjava.net/paulwong/archive/2012/03/30/373014.html</guid><wfw:comment>http://www.blogjava.net/paulwong/comments/373014.html</wfw:comment><comments>http://www.blogjava.net/paulwong/archive/2012/03/30/373014.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/paulwong/comments/commentRss/373014.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/paulwong/services/trackbacks/373014.html</trackback:ping><description><![CDATA[<div id="cnblogs_post_body">
<div>
<p><a href="http://wenku.baidu.com/view/f3126425ccbff121dd3683b3.html">http://wenku.baidu.com/view/f3126425ccbff121dd3683b3.html</a><br /><br />在现在的企业应用程序的开发中，Web 服务已经越来越普遍。然而，从传统意义上来说，它们还没有达到和所支持的服务相同的水平。当构建 J2EE 应用程序，特别是事务服务的时候，企业依赖于这些服务。本文概述了事务服务是如何在一个使用 Java Transaction API 的 J2EE 环境中的 Web 服务事务的帮助下，与 Web 服务实现无缝连接的。 </p>
<p>本文简要地概述了这项新的 Web 服务技术和已被证实的传统的事务技术，解释了它们是如何能够跨分布式的 J2EE 环境甚至跨不同的事务体系结构来实现互操作的。 </p>
<p>本文假设您已经对事务服务的概念（例如，ACID properties、提交/回滚、事务划分，等等）的理解达到中级水平。要想了解事务服务的进一步信息，特别是 JTS，请参考文章 <em>Java theory and practice：Understanding JTS &#8212;&#8212; An introduction to transactions</em>。这篇文章可以在 developerWorks 上找到（请参阅 <a href="http://www.ibm.com/developerworks/cn/webservices/ws-transjta/#resources"><font color="#1a8bc8">参考资料</font></a>）。同样，我也想要推荐一本关于事务的更全面信息的好书，它就是由 Philip Bernstein 和 Eric Newcomer 合著的 <em>Principles of Transaction Processing</em>（请参阅 <a href="http://www.ibm.com/developerworks/cn/webservices/ws-transjta/#resources"><font color="#1a8bc8">参考资料</font></a>） </p>
<p ibm-back-to-top?=""><br /></p>
<p><a name="1">什么是 Java Transaction API（JTA）？</a></p>
<p>JTA 是事务服务的 J2EE 解决方案。本质上，它是描述事务接口（比如 <code>UserTransaction</code> 接口，开发人员直接使用该接口或者通过 J2EE 容器使用该接口来确保业务逻辑能够可靠地运行）的 J2EE 模型的一部分。 </p>
<p>JTA 具有的三个主要的接口分别是 <code>UserTransaction</code> 接口、 <code>TransactionManager</code> 接口和 <code>Transaction</code> 接口。这些接口共享公共的事务操作，例如 <code>commit()</code> 和 <code>rollback()</code> ， 但是也包含特殊的事务操作，例如 <code>suspend()</code> ， <code>resume()</code> 和 <code>enlist()</code> ，它们只出现在特定的接口上，以便在实现中允许一定程度的访问控制。例如， <code>UserTransaction</code> 能够执行事务划分和基本的事务操作，而 <code>TransactionManager</code> 能够执行上下文管理。本文仅仅需要您对 JTA 有一个基本的了解。 </p>
<p ibm-back-to-top?=""><br /></p>
<p><a name="2">JTA 的好处？</a></p>
<p>JTA 是一个定义明确的事务服务，向 J2EE 应用程序开发人员提供一种可以直接使用的服务。作为选择，一个应用程序也可能这样部署，容器将代替开发人员来管理事务行为。在后一种情况下，开发人员能够全神贯注于他们的应用程序的业务逻辑，同时由 J2EE 容器来负责事务逻辑。 </p>
<p>模型明确的事务服务的好处是对于每个单独的事务总是维持四个 ACID 特性。尽管这是一个实现相关的问题，WebSphere Application Server 提供为每个导入的或者导出的事务保护这些 ACID 特性的能力，而不管并发的事务数目是多少。</p>
<p ibm-back-to-top?=""><br /></p>
<p><a name="3">JTA 的限制？</a></p>
<p>经历过所有的事务体系结构，想要有效地将一组事务传送给其他并不共享同样模型的事务服务，同时保持原子的工作单元，是非常困难的。在我们的案例中，建模的 JTA 运行在 Java Transaction Service（JTS） 之上，JTS 处理输入和输出事务传送的请求。 </p>
<p>因为 JTS 是一种由 CORBA 定义的对象事务服务（OTS）的 Java 实现，它只能够与另一个 OTS 模型连接。因此， 一个事务只能传送给另一个 OTS-兼容的目标，典型地即另一个 J2EE 实现。因为 JTA 和 JTS 规范没有对这些接口的底层实现加以限制 （只要它们符合模型），事务可以安全地在两个 J2EE-兼容的应用程序服务器之间传送，而没有丢失它们的 ACID 特性的风险。然而，J2EE 服务器并不必须处理非 J2EE 调用。 </p>
<p>某些 J2EE 服务器可能是例外；例如，WebSphere Application Server 将正确地处理一个与 CORBA 兼容事务相关联的输入的 CORBA 请求，将这个事务传送给线程，然后在它的上下文里执行事务工作。然而，在大多数情况下，当您试图在事务模型之间移动的时候，您不得不超越 JTA 和 JTS，把目光投得更远，在这里 Web 服务出现了。</p>
<p ibm-back-to-top?=""><br /></p>
<p><a name="4">什么是 Web 服务？</a></p>
<p>Web 服务是一种能够作为应用程序一部分部署在可访问的服务器上供内部和外部客户使用的对象。Web 服务由它的 Web 服务描述语言（WSDL）来描述。它定义了一个使用基于 XML 调用（典型地使用 SOAP 协议）的 Web 服务的输入和输出参数的用法。例如，客户端可以查看已经由服务器发布的 WSDL，然后构造客户端代码来调用 Web 服务。一旦完成，它就能够通过将 SOAP 消息传递给 Web 服务的一个方法来调用它。在这条 SOAP 消息中包括诸如方法 名称的信息以及任何它所需要的参数。返回值将在另一条 SOAP 消息里被传送回来，再由客户提取出来。</p>
<p ibm-back-to-top?=""><br /></p>
<p><a name="5">使用 Web 服务的好处？</a></p>
<p>Web 服务由哪种语言编写而成并不重要，因为 WSDL 没有定义语言或者编程的模型相关的细节（例如，Java 和 J2EE 技术）。这就给了 Web 服务的作者和客户端的作者选择他首选的解决方案 的灵活性。 </p>
<p>让我们来比较一下 Web 服务和 Enterprise JavaBean（EJB）组件。EJB 组件要求 RMI-编译的代码，以便使客户端能够访问，所以 它能够像它的代理一样创造本地的存根（stub）对象。因此，这将需要在每一次它们改变的时候，向所有的客户端重新分配存根（stub）。 无论如何，和 Web 服务一起您将使用 WSDL，所以客户端能够构造它们自己的客户端调用代码，在本地类路径上不需要服务器的类来执行调用。这个模型提供了一个非常巧妙的方法调用过程。 EJB，作为 J2EE 模型的一部分，必须使用 Java 客户来调用，最好是一个 J2EE 管理的客户端。另一方面，Web 服务可以被任何客户端代码所调用，这个代码能够构造一个结构良好的 SOAP 请求。因而，举例来说，一个部署在 J2EE 服务 器上的 Web 服务能够使用 C++ 客户来调用。</p>
<p ibm-back-to-top?=""><br /></p>
<p><a name="6">Web 服务的限制？</a></p>
<p>因为 Web 服务请求（通过 HTTP 的 SOAP）的性质与其他的方法调用（例如，一个使用通过 IIOP 的 RMI 的 EJB 调用）差别很大，支持执行分布式事务的代码直到最近才可获得。这已经成为在 使用 Web 服务作为分布式事务企业应用程序一部分时，主要的问题。本质上，Web 服务不能运行在 Web 服务调用之前开始的事务上下文 中，也不能将一个事务上下文传送给另一个组件。</p>
<p ibm-back-to-top?=""><br /></p>
<p><a name="7">那么，问题是什么呢？</a></p>
<p>如果 Web 服务被用于工业，必须确保它们在事务环境 中运行的时候，以可靠的和可预知的方式工作。直到现在，Web 服务只能够使用独立于其他组件的事务&#8212;&#8212;在 Web 服务的方法范围里划分的 和服从它的底层的事务实现的规则&#8212;&#8212;并且物理上不能离开 Web 服务或者进入另一个 Web 服务。企业应用程序具有始终在企业组件间流动 的事务。这需要成为 Web 服务的标准来确保它们能够被正确地使用，通过利用 Web 服务的功能仅仅忽略在我们的所有严格的企业应用 程序中依赖的和使用的事务支持来避免改变您的编程风格。</p>
<p ibm-back-to-top?=""><br /></p>
<p><a name="8">那么，解决方案是什么呢？</a></p>
<p>解决方案就是一种称为 Web 服务事务（WS-Transaction） 的新技术。它能够调整事务的上下文。这个上下文可以被 Web 服务、其他的诸如 EJB 的 J2EE 组件、甚至其他支持 WS-Transaction 的 非 J2EE 事务服务使用。 </p>
<p>WS-Transaction 是一个规范。它扩展了 Web 服务协调（WS-Coordination）规范来定义一种支持原子事务的协调。</p>
<p ibm-back-to-top?=""><br /></p>
<p><a name="9">什么是 WS-Coordination</a></p>
<p>WS-Coordination 是一个协调框架来使分布的参与者 能够在他们个体行动之上就一个通用的结果达成协议。 </p>
<p>本质上，这意味着分布式的参与者（例如，在不同机器上的两个应用程序服务器）将能够使用 WS-Coordination 把每个参与者 的行为集在合一起，进一步地，并且通过确保它们完全同意对于在这个协调上下文里它们各自执行的所有行为均产生单一的结果，来 进一步管理这些行为。否则，则不能以一个受控的方式来完成这些功能。 </p>
<p>协调上下文可以被看作是一个标识符，行为执行在这个标识符之下。作一比较，这个概念非常类似于事务上下文。当事务工作完成， 在事务上下文里管理它，当调用这个上下文去确定或会滚时这个工作完成。协调上下文包含的附加信息是一个协调标识符、关于协调类型的 详细资料以及包括端口信息以便协调服务能够被访问的协调协议。在下面定义了这些术语。 </p>
<p>&nbsp;</p>
<p>协调服务，或者 <em>协调器（Coordinator）</em>， 进一步由三个服务组成： <em>激活服务（activation service）</em>、 <em>注册服务（registration service）</em>和 <em>协调协议（coordination protocol）</em> 服务。激活服务支持 <code>CreateCoodinationContext</code> 操作来允许新的协调上下文存在。注册服务支持 Register 操作来允许参与者 在协调上下文中执行工作。协调协议服务支持协调协议的使用，这个协议定义了协调器（Coordinator）和参与者之间的行为和通信。 </p>
<p>协调类型是一个协调行为的固定的集合，这个集合详细说明了协调协议的集合以及协调器（Coordinator）应该如何驱动完成。 WS-Transaction 规范描述了两个协调类型&#8212;&#8212; <em>原子事务（Atomic Transaction）</em>（AT）和 <em>业务协定（Business Agreement）</em>（BA）。 这些协调类型中的每一个都包括协调协议。例如，原子事务（Atomic Transaction）协调类型包括像 <em>two-phase commit protocol</em>（Durable2PC）和 <em>phaseZero protocol</em>（Volatile2PC）这样的协调协议。 您可以希望在支持原子事务的环境中使用这两个协议。 </p>
<p>业务协定（Business Agreement）协调类型提供了一种不同的功能类型。它被设计成用于更长的时帧。而不像原子事务，正常地您 与它联系一个非常短的生命期。业务协定协议（Business Agreement protocol）的一个例子就是它自己，被称作业务协定（Business Agreement） 它是一个补偿协议。</p>
<p ibm-back-to-top?=""><br /></p>
<p><a name="10">WS-Coordination 和 WS-Transaction 之间是什么关系？</a></p>
<p>WS-Coordination 是基本的框架，使参与者之间活动的分布式结果成为可能。WS-Transaction 定义了协调类型，例如原子事务（Atomic Transaction），协调类型使用 WS-Coordination 框架来定义规则。在协调器（Coordinator）和参与者通信时，它们必须遵循这些规则。两者之间的这个区别很重要。 </p>
<p>两个应用程序和一个协调器（Coordinator）之间主要的协调流程如下面的 <a href="http://www.ibm.com/developerworks/cn/webservices/ws-transjta/#figure1"><font color="#1a8bc8">图 1</font></a>所示。 </p><br /><img alt="图 1. 基本协调流程" src="http://www.ibm.com/developerworks/cn/webservices/ws-transjta/Figure1.gif" width="322" height="336" /> <br />
<ol><li><em>App1</em> 向在协调器上的激活服务提出一个请求。</li><li>协调器开始一个新的活动，使用它的 <code>CoordinationContext</code> （协调器的 XML 消息）来对 <em>App1</em> 做出响应。</li><li><em>App1</em>向注册服务提出请求来注册使用协调协议X。</li><li><em>App1</em> 以它期望的方式调用 <em>App2</em>，传递 <code>CoordinationContext</code> 给协调器。</li><li><em>App2</em> 向注册服务提出请求（使用诸如端口信息的参数，它们 可以在 <em>App1</em> 传递的 <code>CoordinationContext</code> 中找到）来注册使用协调协议Y。</li><li><em>App2</em>结束它的工作，将控制返还给 <em>App1</em>，活动结束。</li><li>协调器使用协议 X 类型消息响应 <em>App1</em>。</li><li>协调器使用协议 Y 类型消息响应 <em>App2</em>。 </li></ol>
<p ibm-back-to-top?=""><br /></p>
<p><a name="11">协调器调解</a></p>
<p>在一个现实世界的情况中，Web 服务可能是事务的和分布式的，协调器的发起者（ <em>App1</em>）将 <code>CoordinationContext</code> 传递给任何它所期望的活动中的参与者（ <em>App2</em>）。这个上下文的接收者有两种选择：它们可以使用已经创建好了的协调器（ <em>Ca</em>），或者如果它们愿意，也可以在初始的 <code>CoordinationContext</code> 中传递创建的新的协调器。然后，第二种选择将新的协调器（ <em>Cb</em>） 作为 <em>App2</em>的代理协调器。它将包括与协调器 <em>Ca</em>相同的活动标识符，但是当 <em>App2</em>向它的协调器 <em>Cb</em>注册 Durable2PC 协议的时候，它的请求直接传送给了协调器 <em>Ca</em>。 类似地，在结束时，准备和提交消息在最终到达 <em>App2</em>（它已经注册过 Durable2PC 协议）之前将从协调器 <em>Ca</em>传递给协调器 <em>Cb</em>。 </p>
<p>请参阅 WS-Transaction 规范的 4.1 节 <em>AT3.1 Example Atomic Transaction Message Flow</em>，在那里您将看到一个应用程序和调解的协调器之间的 WS-Coordination 流程的非常好的示例（请参阅 <a href="http://www.ibm.com/developerworks/cn/webservices/ws-transjta/#resources"><font color="#1a8bc8">参考资料</font></a>）。 </p>
<p ibm-back-to-top?=""><br /></p>
<p><a name="12">Web 服务事务：原子事务（WS-AtomicTransaction）</a></p>
<p>WS-AtomicTransaction 是一种对于原子事务的特殊的协调类型，它提供了一组协调协议。这些协调协议是： </p>
<ul><li>Completion</li><li>CompletionWithAck</li><li>Volatile2PC</li><li>Durable2PC</li><li>OutcomeNotification</li></ul>
<p>当协调上下文创建以后，协调类型被指定，但是协调协议直到注册时才被指定。任何参与者可以注册任意数目的协调协议，应该发送和接收 由协议定义的恰当的消息。例如，如果一个参与者在协调器中注册了 Durable2PC 协议，当完成时一条准备消息将被发送给这个参与者，它们将被认为以与正常的事务资源相似的方式投票。想要了解这里每个协议的信息和它们的状态图，请查阅 WS-Transaction 规范， 第 4 节 <em>AT3 Coordination protocols</em>（请参阅 <a href="http://www.ibm.com/developerworks/cn/webservices/ws-transjta/#resources"><font color="#1a8bc8">参考资料</font></a>）。 </p>
<p ibm-back-to-top?=""><br /></p>
<p><a name="13">如何能将 JTA 事务和 WS-AtomicTransaction 一起使用？</a></p>
<p>因为 JTA 和 JTS 是实现相关的，我将使用的这个示例是 WebSphere Application Server V5.0.2 和 WS-Transaction Tech Preview。这个场景将有两台机器，每个上都运行有应用程序服务器，如 <a href="http://www.ibm.com/developerworks/cn/webservices/ws-transjta/#figure2"><font color="#1a8bc8">图 2</font></a> 所示。 应用程序服务器A部署并运行一个 Bean Managed Transaction（BMT）EJB 组件。应用程序服务器B部署并运行一个 Web 服务。 EJB 组件通过使用 JTA 提供的接口 <code>UserTransaction</code> 开始一个事务。它对 XA-compliant database 执行事务工作（步骤 1），然后使用 SOAP/HTTP 向在应用程序服务器B上的 Web 服务发送一个请求（步骤 2）。Web 服务对 XA-compliant database 执行工作（步骤 3），然后返回到 EJB 组件（步骤 4），由它再次使用 <code>UserTransaction</code> 接口来提交事务。所有由 EJB 和 Web 服务对数据库执行的事务都已经被包含在一个活动的范围里，这个活动是由协调器恰好在调用 Web 服务（步骤 2）之前创建的，它已经被提交，同时保存着所有的 ACID 特性，它就好像是单一的工作单元。 </p>
<p>让我们来看看下面的两个领域&#8212;&#8212;J2EE 领域和 Web 服务领域。在 J2EE 领域里，使用的事务模型是 JTA。在 Web 服务领域里， 使用的事务模型是 WS-AtomicTransaction。WebSphere Application Server 把一个 Java Web 服务看作是一个 J2EE 对象，因此也就 意味着，Web 服务的实现属于 J2EE 领域，而调用属于 Web 服务领域。在 WebSphere 领域，正确地驱动协议总是正在被使用的模型 （JTA 或者 WS-AtomicTransaction）的责任。 </p>
<p><a href="http://www.ibm.com/developerworks/cn/webservices/ws-transjta/#figure2"><font color="#1a8bc8">图 2</font></a> <a href="http://www.ibm.com/developerworks/cn/webservices/ws-transjta/#0"></a>展示了 在一个事务企业应用程序中包含 Web 服务是多么的容易，同时也展示了对于没有费一行代码麻烦就在导入的事务上下文中运行这个 Web 服务的用户来说，它又是多么的无缝。 </p><br /><img alt="图 2. 使用 JTA 事务和 WS-AtomicTransaction 事务" src="http://www.ibm.com/developerworks/cn/webservices/ws-transjta/Figure2.gif" width="276" height="230" /> <br />
<p><strong>请注意：The EJB 组件正运行在一个受管理的环境中（EJB 容器）并且 Web 服务是符合 JSR 109。</strong> </p>
<p><a name="14">它只能和 JTA 一起工作吗？</a></p>
<p>WS-Coordination 依靠它的基于XML的调用来 利用它本身是 Web 服务的优势。因为用来调用 WS-Coordination 操作的协议是 SOAP，消息内容是 XML 格式的纯文本。这意味着，当使用 HTTP 传递给 Web 服务时，将不能仅仅通过 SOAP 包本身来确定客户的详细资料，例如编程语言。因此，WS-AtomicTransaction 将能够与任何其他的使用任何支持 WS-AtomicTransaction 的编程语言编码的事务服务相连接。 </p>
<p>在近来的一个由 IBM 和 Microsoft 主办的 Web 服务演示上，展示了 WS-AtomicTransaction 的这个跨事务服务和编程语言的互操作性。 <a href="http://www.ibm.com/developerworks/cn/webservices/ws-transjta/#figure3"><font color="#1a8bc8">图 3</font></a> <a href="http://www.ibm.com/developerworks/cn/webservices/ws-transjta/#0"></a>展示了一个示范这项技术的场景。 </p>
<p>在 <a href="http://www.ibm.com/developerworks/cn/webservices/ws-transjta/#figure3"><font color="#1a8bc8">图 3</font></a> 中有一个.NET 服务器开始一个非 JTA 事务，向两个 WebSphere 应用程序服务器和另外一个.NET 服务器提出了 Web 服务调用请求。每个应用程序服务器都使用它们的底层事务服务来执行事务工作。每次您能够使用 WS-Transaction 调用一个您将转到的 Web 服务。当发起者完成事务，您使用 WS-Transaction 技术来协调每个参与者，确保它们都已完成，就好像它们是单一的工作单元似的。 </p><br /><img alt="图 3. 在 Steve Mills 和 Bill Gates 的 Web 服务演示中的一个 WS-AtomicTransaction 场景的示例拓扑。" src="http://www.ibm.com/developerworks/cn/webservices/ws-transjta/Figure3.gif" width="333" height="300" /> <br /><br />
<p><a name="15">总结</a></p>
<p>在本文中，您已经了解到 WS-Coordination 和 WS-Transaction 的基本概念。到现在为止，Web 服务还不能在分布式环境里使用事务。WS-Transaction 允许 Web 服务执行事务工作，这个事务工作作为更广泛的活动生成组件、应用程序服务器、甚至实现的一部分，正如在 IBM 和 Microsoft Web 服务演示中所展示的。 </p>
<p>在 WS-Transaction 的支持下，我们能够可靠地使用 Web 服务作为我们的企业应用程序的一部分，因为它已经为事务支持嵌入到其他的企业组件里。</p></div></div><img src ="http://www.blogjava.net/paulwong/aggbug/373014.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/paulwong/" target="_blank">paulwong</a> 2012-03-30 00:21 <a href="http://www.blogjava.net/paulwong/archive/2012/03/30/373014.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>分布式事务</title><link>http://www.blogjava.net/paulwong/archive/2012/03/30/373013.html</link><dc:creator>paulwong</dc:creator><author>paulwong</author><pubDate>Thu, 29 Mar 2012 16:20:00 GMT</pubDate><guid>http://www.blogjava.net/paulwong/archive/2012/03/30/373013.html</guid><wfw:comment>http://www.blogjava.net/paulwong/comments/373013.html</wfw:comment><comments>http://www.blogjava.net/paulwong/archive/2012/03/30/373013.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/paulwong/comments/commentRss/373013.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/paulwong/services/trackbacks/373013.html</trackback:ping><description><![CDATA[<h1 class="postTitle"><span style="line-height: 120%; font-family: 'Verdana','sans-serif'; font-size: 12pt">一、 </span><span style="line-height: 120%; font-family: 宋体; font-size: 12pt">事务概述</span></h1>
<div id="cnblogs_post_body">
<div>
<div id="cnblogs_post_body">
<p style="text-indent: 17.95pt; margin-left: 8.9pt"></p>
<h2><span style="line-height: 120%; font-family: 'Verdana','sans-serif'; font-size: 10.5pt">1、 </span><span style="line-height: 120%; font-family: 宋体; font-size: 10.5pt">事务协议</span></h2>
<p style="text-indent: 17.95pt; margin-left: 17.95pt"><span style="font-family: 宋体">跟</span><span style="font-family: 'Verdana','sans-serif'">WCF</span><span style="font-family: 宋体">相关的事务协议有三个。</span></p>
<h3><span style="line-height: 120%; font-family: 'Verdana','sans-serif'; font-size: 10.5pt">1.1.<span style="font: 7pt 'Times New Roman'"> </span></span><span style="line-height: 120%; font-family: 'Verdana','sans-serif'; font-size: 10.5pt">Lightweight protocol</span></h3>
<p style="text-indent: 17.95pt; margin-left: 17.95pt"><span style="font-family: 宋体">这是个轻量级的本地事务协议，限制管理在一个</span><span style="font-family: 'Verdana','sans-serif'">AppDomain</span><span style="font-family: 宋体">中的事务。不能跨</span><span style="font-family: 'Verdana','sans-serif'">AppDomain</span><span style="font-family: 宋体">边界传播事务，也不能跨服务边界传播事务。跟其他协议比，</span><span style="font-family: 'Verdana','sans-serif'">Lightweight protocol</span><span style="font-family: 宋体">是最有效率的协议。</span></p>
<p style="text-indent: 17.95pt; margin-left: 17.95pt"></p>
<h3><span style="line-height: 120%; font-family: 'Verdana','sans-serif'; font-size: 10.5pt">1.2.<span style="font: 7pt 'Times New Roman'"> </span></span><span style="line-height: 120%; font-family: 'Verdana','sans-serif'; font-size: 10.5pt">OleTx protocol</span></h3>
<p style="text-indent: 17.95pt; margin-left: 17.95pt"><span style="font-family: 宋体">这个协议可用于跨</span><span style="font-family: 'Verdana','sans-serif'">AppDomain</span><span style="font-family: 宋体">，进程和机器边界，管理两阶段提交的事务协议。这个跨边界的事务协议使用</span><span style="font-family: 'Verdana','sans-serif'">RPC</span><span style="font-family: 宋体">，是二进制的，</span><span style="font-family: 'Verdana','sans-serif'">windows</span><span style="font-family: 宋体">专有的协议，不能穿越防火墙，也不能用于与非</span><span style="font-family: 'Verdana','sans-serif'">windows</span><span style="font-family: 宋体">系统的互操作。在</span><span style="font-family: 'Verdana','sans-serif'">windows</span><span style="font-family: 宋体">环境下的局域网，</span><span style="font-family: 'Verdana','sans-serif'">OleTx</span><span style="font-family: 宋体">协议是很好的分布式事务的管理协议。</span></p>
<p style="text-indent: 17.95pt; margin-left: 17.95pt"></p>
<h3><span style="line-height: 120%; font-family: 'Verdana','sans-serif'; font-size: 10.5pt">1.3.<span style="font: 7pt 'Times New Roman'"> </span></span><span style="line-height: 120%; font-family: 'Verdana','sans-serif'; font-size: 10.5pt">WS-Atomic Transaction (WSAT) protocol</span></h3>
<p style="text-indent: 17.95pt; margin-left: 17.95pt"><span style="font-family: 'Verdana','sans-serif'">WSAT</span><span style="font-family: 宋体">跟</span><span style="font-family: 'Verdana','sans-serif'">OleTx</span><span style="font-family: 宋体">协议类似，也可以跨</span><span style="font-family: 'Verdana','sans-serif'">AppDomain</span><span style="font-family: 宋体">，进程和机器边界，管理两阶段提交的事务协议。但</span><span style="font-family: 'Verdana','sans-serif'">WSAT</span><span style="font-family: 宋体">不是微软的专有协议，此协议是微软、</span><span style="font-family: 'Verdana','sans-serif'">IBM</span><span style="font-family: 宋体">、</span><span style="font-family: 'Verdana','sans-serif'">BEA</span><span style="font-family: 宋体">等公司共同提出的工业标准。此协议也可用于</span><span style="font-family: 'Verdana','sans-serif'">Intranet</span><span style="font-family: 宋体">中，但是更多的是用于在</span><span style="font-family: 'Verdana','sans-serif'">Internet</span><span style="font-family: 宋体">环境下，或者跟非</span><span style="font-family: 'Verdana','sans-serif'">windows</span><span style="font-family: 宋体">系统进行互操作的分布式事务。</span></p>
<p style="text-indent: 17.95pt; margin-left: 17.95pt"><span style="font-family: 宋体">说到</span><span style="font-family: 'Verdana','sans-serif'">WSAT</span><span style="font-family: 宋体">协议这里有必要一下分布式事务的发展。</span></p>
<div style="border-bottom: #a6a6a6 1pt solid; border-left: #a6a6a6 1pt solid; padding-bottom: 1pt; padding-left: 4pt; padding-right: 4pt;background: #f2f2f2; margin-left: 17.85pt; border-top: #a6a6a6 1pt solid; margin-right: 0cm; border-right: #a6a6a6 1pt solid; padding-top: 1pt">
<p style="border-bottom: medium none; border-left: medium none; padding-bottom: 0cm; text-indent: 17.85pt; padding-left: 0cm; padding-right: 0cm;background: #f2f2f2; margin-left: 0cm; border-top: medium none; border-right: medium none; padding-top: 0cm"><span style="font-family: 宋体">分布式事务：</span></p>
<p style="border-bottom: medium none; border-left: medium none; padding-bottom: 0cm; text-indent: 17.85pt; padding-left: 0cm; padding-right: 0cm;background: #f2f2f2; margin-left: 0cm; border-top: medium none; border-right: medium none; padding-top: 0cm"><span style="font-family: 宋体">分布式事务在企业应用中是很重要的一个方面，微软使用</span><span style="font-family: 'Verdana','sans-serif'">MSDTC</span><span style="font-family: 宋体">作为分布式事务管理器，使用</span><span style="font-family: 'Verdana','sans-serif'">OleTx</span><span style="font-family: 宋体">事务协议进行分布式事务管理，但是</span><span style="font-family: 'Verdana','sans-serif'">OleTx</span><span style="font-family: 宋体">事务协议是微软的专有协议，不是公认标准。在分布式环境中异构系统的交互一定要有个公认同意的分布式事务标准才能在异构的系统中实现分布式事务的协调。</span></p>
<p style="border-bottom: medium none; border-left: medium none; padding-bottom: 0cm; text-indent: 17.9pt; padding-left: 0cm; padding-right: 0cm;background: #f2f2f2; margin-left: 0cm; border-top: medium none; border-right: medium none; padding-top: 0cm"><span style="font-family: wingdings">l<span style="font: 7pt 'Times New Roman'"> </span></span><strong><span style="font-family: 'Verdana','sans-serif'">OGM</span></strong><strong><span style="font-family: 宋体">的</span></strong><strong><span style="font-family: 'Verdana','sans-serif'">XA</span></strong><strong><span style="font-family: 宋体">事务规范</span></strong></p>
<p style="border-bottom: medium none; border-left: medium none; padding-bottom: 0cm; text-indent: 17.85pt; padding-left: 0cm; padding-right: 0cm;background: #f2f2f2; margin-left: 0cm; border-top: medium none; border-right: medium none; padding-top: 0cm"><span style="font-family: 'Verdana','sans-serif'">1994</span><span style="font-family: 宋体">年，开放组织（</span><span style="font-family: 'Verdana','sans-serif'">Open Group</span><span style="font-family: 宋体">）的</span><span style="font-family: 'Verdana','sans-serif'"> X/Open </span><span style="font-family: 宋体">分布式事务流程（</span><span style="font-family: 'Verdana','sans-serif'">DTP</span><span style="font-family: 宋体">）模型，它定义了</span> <span style="font-family: 宋体">应用程序如何使用</span> <span style="font-family: 宋体">事务管理程序跨多个</span> <span style="font-family: 宋体">资源管理程序来协调分布式事务。如果事务是通过遵循</span><span style="font-family: 'Verdana','sans-serif'"> XA </span><span style="font-family: 宋体">的事务管理程序来进行协调的，则任何遵循</span><span style="font-family: 'Verdana','sans-serif'"> XA </span><span style="font-family: 宋体">规范的资源管理程序都可以参与该事务，因此就可以让不同厂商的事务产品可以共同工作。所有遵循</span><span style="font-family: 'Verdana','sans-serif'"> XA </span><span style="font-family: 宋体">的事务都是分布式事务。</span><span style="font-family: 'Verdana','sans-serif'">XA </span><span style="font-family: 宋体">既支持一步提交，也支持两阶段提交。</span></p>
<p style="border-bottom: medium none; border-left: medium none; padding-bottom: 0cm; text-indent: 17.85pt; padding-left: 0cm; padding-right: 0cm;background: #f2f2f2; margin-left: 0cm; border-top: medium none; border-right: medium none; padding-top: 0cm"><span style="font-family: 宋体">对象管理组（</span><span style="font-family: 'Verdana','sans-serif'">Object Management Group</span><span style="font-family: 宋体">）的通用对象请求代理体系结构对象事务服务（</span><span style="font-family: 'Verdana','sans-serif'">Common Object Request Broker Architecture Object Transaction Service</span><span style="font-family: 宋体">）</span><span style="font-family: 'Verdana','sans-serif'"> -- </span><span style="font-family: 宋体">定义遵循规范的流程如何跨多个流程线程将事务上下文从一个流程传播到另一个流程。这种传播使得即使分布式对象运行于来自不同厂商的容器中，也可以在单个事务中合作。</span><span style="font-family: 'Verdana','sans-serif'">CORBA OTS </span><span style="font-family: 宋体">规范建立在</span><span style="font-family: 'Verdana','sans-serif'"> XA </span><span style="font-family: 宋体">规范的基础之上。</span></p>
<p style="border-bottom: medium none; border-left: medium none; padding-bottom: 0cm; text-indent: 17.6pt; padding-left: 0cm; padding-right: 0cm;background: #f2f2f2; margin-left: 0cm; border-top: medium none; border-right: medium none; padding-top: 0cm"><span style="font-family: wingdings">l<span style="font: 7pt 'Times New Roman'"> </span></span><strong><span style="font-family: 'Verdana','sans-serif'">OASIS</span></strong><strong><span style="font-family: 宋体">的</span></strong><strong><span style="font-family: 'Verdana','sans-serif'">Business Transaction Protocol</span></strong><strong><span style="font-family: 宋体">（</span></strong><strong><span style="font-family: 'Verdana','sans-serif'">BTP</span></strong><strong><span style="font-family: 宋体">）标准</span></strong></p>
<p style="border-bottom: medium none; border-left: medium none; padding-bottom: 0cm; text-indent: 17.85pt; padding-left: 0cm; padding-right: 0cm;background: #f2f2f2; margin-left: 0cm; border-top: medium none; border-right: medium none; padding-top: 0cm"><span style="font-family: 宋体">在</span><span style="font-family: 'Verdana','sans-serif'"> 2001 </span><span style="font-family: 宋体">年，</span> <span style="font-family: 宋体">一个由各大公司（包括惠普公司（</span><span style="font-family: 'Verdana','sans-serif'">Hewlett-Packard</span><span style="font-family: 宋体">，</span><span style="font-family: 'Verdana','sans-serif'">HP</span><span style="font-family: 宋体">）、甲骨文公司（</span><span style="font-family: 'Verdana','sans-serif'">Oracle</span><span style="font-family: 宋体">）及</span><span style="font-family: 'Verdana','sans-serif'">BEA</span><span style="font-family: 宋体">公司）组成的联盟开始着手创建</span><span style="font-family: 'Verdana','sans-serif'"> Organization for Advance Structured Information Systems (OASIS) Business Transaction Protocol</span><span style="font-family: 宋体">（</span><span style="font-family: 'Verdana','sans-serif'">BTP</span><span style="font-family: 宋体">）标准。</span></p>
<p style="border-bottom: medium none; border-left: medium none; padding-bottom: 0cm; text-indent: 17.85pt; padding-left: 0cm; padding-right: 0cm;background: #f2f2f2; margin-left: 0cm; border-top: medium none; border-right: medium none; padding-top: 0cm"><span style="font-family: 'Verdana','sans-serif'">BTP </span><span style="font-family: 宋体">不是专门用于</span><span style="font-family: 'Verdana','sans-serif'"> Web </span><span style="font-family: 宋体">服务的事务处理协议，它的目的是它也能用于其他的环境中。因而，</span><span style="font-family: 'Verdana','sans-serif'">BTP </span><span style="font-family: 宋体">定义了事务性的</span><span style="font-family: 'Verdana','sans-serif'"> XML </span><span style="font-family: 宋体">协议，并且必须在规范中指定所有的服务依赖性。</span></p>
<p style="border-bottom: medium none; border-left: medium none; padding-bottom: 0cm; text-indent: 17.85pt; padding-left: 0cm; padding-right: 0cm;background: #f2f2f2; margin-left: 0cm; border-top: medium none; border-right: medium none; padding-top: 0cm"><span style="font-family: 'Verdana','sans-serif'">BTP</span><span style="font-family: 宋体">协议相对比较复杂，并且它把原子性事务和长时间运行的商业事务放在一起进行管理，这样它必须解决各种各样不同的问题。它是通过放松限制来这样做的，这表面上给人感觉灵活度很高，但是很多东西就留给实现者去实现了，导致使用比较复杂。</span></p>
<p style="border-bottom: medium none; border-left: medium none; padding-bottom: 0cm; text-indent: 17.6pt; padding-left: 0cm; padding-right: 0cm;background: #f2f2f2; margin-left: 0cm; border-top: medium none; border-right: medium none; padding-top: 0cm"><span style="font-family: wingdings">l<span style="font: 7pt 'Times New Roman'"> </span></span><strong><span style="font-family: 'Verdana','sans-serif'">OASIS</span></strong><strong><span style="font-family: 宋体">的</span></strong><strong><span style="font-family: 'Verdana','sans-serif'">WS-Transactions</span></strong></p>
<p style="border-bottom: medium none; border-left: medium none; padding-bottom: 0cm; text-indent: 17.85pt; padding-left: 0cm; padding-right: 0cm;background: #f2f2f2; margin-left: 0cm; border-top: medium none; border-right: medium none; padding-top: 0cm"><span style="font-family: 宋体">在</span><span style="font-family: 'Verdana','sans-serif'">BTP</span><span style="font-family: 宋体">出现后，其他一些行业大公司，包括</span><span style="font-family: 'Verdana','sans-serif'"> IBM</span><span style="font-family: 宋体">、</span><span style="font-family: 'Verdana','sans-serif'">Microsoft </span><span style="font-family: 宋体">和</span><span style="font-family: 'Verdana','sans-serif'"> BEA</span><span style="font-family: 宋体">，又发布了它们自己的规范：</span><span style="font-family: 'Verdana','sans-serif'"> Web </span><span style="font-family: 宋体">服务事务处理（</span><span style="font-family: 'Verdana','sans-serif'">WS-Transactions</span><span style="font-family: 宋体">），由三部分组成</span><span style="font-family: 'Verdana','sans-serif'">WS-Coordination</span><span style="font-family: 宋体">（事务协调器）、</span><span style="font-family: 'Verdana','sans-serif'">WS-AtomicTransaction</span><span style="font-family: 宋体">（实现原子事务）、</span><span style="font-family: 'Verdana','sans-serif'">WS-BusinessActivity</span><span style="font-family: 宋体">（实现长时间运行的商业事务）。</span><span style="font-family: 'Verdana','sans-serif'">WS-Transactions</span><span style="font-family: 宋体">比</span><span style="font-family: 'Verdana','sans-serif'">BTP</span><span style="font-family: 宋体">好的方面是它将事务协调器独立出来，另外用两个标准在</span><span style="font-family: 'Verdana','sans-serif'">WS-Transactions</span><span style="font-family: 宋体">基础上分别实现原子事务和长时间运行的事务，这样简化了复杂性。</span></p>
<p style="border-bottom: medium none; border-left: medium none; padding-bottom: 0cm; text-indent: 17.85pt; padding-left: 0cm; padding-right: 0cm;background: #f2f2f2; margin-left: 0cm; border-top: medium none; border-right: medium none; padding-top: 0cm"><span style="font-family: 'Verdana','sans-serif'">WS-Transactions</span><span style="font-family: 宋体">是专门用于</span><span style="font-family: 'Verdana','sans-serif'">web services</span><span style="font-family: 宋体">的事务规范。</span></p>
<p style="border-bottom: medium none; border-left: medium none; padding-bottom: 0cm; text-indent: 17.85pt; padding-left: 0cm; padding-right: 0cm;background: #f2f2f2; margin-left: 0cm; border-top: medium none; border-right: medium none; padding-top: 0cm"><span style="font-family: 'Verdana','sans-serif'">2005</span><span style="font-family: 宋体">年，</span><span style="font-family: 'Verdana','sans-serif'">WS-Transactions</span><span style="font-family: 宋体">发布了第一个版本，</span><span style="font-family: 'Verdana','sans-serif'">Version 1.0</span><span style="font-family: 宋体">。</span></p>
<p style="border-bottom: medium none; border-left: medium none; padding-bottom: 0cm; text-indent: 17.85pt; padding-left: 0cm; padding-right: 0cm;background: #f2f2f2; margin-left: 0cm; border-top: medium none; border-right: medium none; padding-top: 0cm"><span style="font-family: 'Verdana','sans-serif'">2007</span><span style="font-family: 宋体">年，</span><span style="font-family: 'Verdana','sans-serif'">WS-Transactions</span><span style="font-family: 宋体">发布了</span><span style="font-family: 'Verdana','sans-serif'">Version 1.1</span><span style="font-family: 宋体">，并被</span><span style="font-family: 'Verdana','sans-serif'">OASIS</span><span style="font-family: 宋体">组织接受为标准，成为</span><span style="font-family: 'Verdana','sans-serif'">WS-*</span><span style="font-family: 宋体">标准的一部分。</span></p>
<p style="border-bottom: medium none; border-left: medium none; padding-bottom: 0cm; text-indent: 17.85pt; padding-left: 0cm; padding-right: 0cm;background: #f2f2f2; margin-left: 0cm; border-top: medium none; border-right: medium none; padding-top: 0cm"></p></div>
<p style="text-indent: 17.95pt; margin-left: 17.95pt"></p>
<p style="text-indent: 17.95pt; margin-left: 17.95pt"><span style="font-family: 'Verdana','sans-serif'">WCF</span><span style="font-family: 宋体">支持的可互操作的分布式事务协议只有</span><span style="font-family: 'Verdana','sans-serif'">WS-Transactions</span><span style="font-family: 宋体">，并且只实现了</span><span style="font-family: 'Verdana','sans-serif'">WS-Coordination</span><span style="font-family: 宋体">、</span><span style="font-family: 'Verdana','sans-serif'">WS-AtomicTransaction</span><span style="font-family: 宋体">，</span><span style="font-family: 'Verdana','sans-serif'">WS-BusinessActivity</span><span style="font-family: 宋体">没被实现。</span></p>
<h4><span style="line-height: 120%; font-family: 'Verdana','sans-serif'; font-size: 10.5pt">1.3.1.<span style="font: 7pt 'Times New Roman'"> </span></span><span style="line-height: 120%; font-family: 'Verdana','sans-serif'; font-size: 10.5pt">WS-Coordination</span></h4>
<p style="text-indent: 17.95pt; margin-left: 17.95pt"><span style="font-family: 'Verdana','sans-serif'">WS-Coordination</span><span style="font-family: 宋体">它描述了一个可扩展的交流协议框架，该框架对分布式的请求进行其请求协议的判断与处理，处理后再将请求向下方的业务处理模块进行分发。</span></p>
<p style="text-indent: 17.95pt; margin-left: 17.95pt"><span style="font-family: 宋体">该 框架最大特点是其能够以系统流程代理的身份来处理请求。当不同的请求，无论是内部的同系统的请求或外部的异构系统的请求，经过该框架处理后，再其原有的特 殊的传输代理层上添加了符合本系统信息流规则的本地协议。也就是本系统允许已经存在的事务、工作流或其他服务的请求隐藏其自身独特的传输协议，并可顺利运 行于异构式的系统环境中。</span></p>
<p style="text-indent: 17.95pt; margin-left: 17.95pt"><span style="font-family: 宋体">当前</span><span style="font-family: 'Verdana','sans-serif'">WS-Coordination</span><span style="font-family: 宋体">稳定的版本是</span><span style="font-family: 'Verdana','sans-serif'">1.1</span><span style="font-family: 宋体">，同样是</span><span style="font-family: 'Verdana','sans-serif'">OASIS</span><span style="font-family: 宋体">于</span><span style="font-family: 'Verdana','sans-serif'">2007</span><span style="font-family: 宋体">年发布的国际标准。现在</span><span style="font-family: 'Verdana','sans-serif'">1.2</span><span style="font-family: 宋体">版本也在起草过程之中。</span><span style="font-family: 'Verdana','sans-serif'">WS-Coordination</span><span style="font-family: 宋体">规范的具体实现需要开发中在基于</span><span style="font-family: 'Verdana','sans-serif'">XML</span><span style="font-family: 宋体">的配置文件中引入</span><span style="font-family: 'Verdana','sans-serif'">WS-Coordination</span><span style="font-family: 宋体">规范的命名空间，如指定</span><span style="font-family: 'Verdana','sans-serif'">&lt;xs</span><span style="font-family: 宋体">：</span><span style="font-family: 'Verdana','sans-serif'">schema&gt;</span><span style="font-family: 宋体">字段的值为</span><span style="font-family: 'Verdana','sans-serif'">ws-addr.xsd</span><span style="font-family: 宋体">。由于是基于</span><span style="font-family: 'Verdana','sans-serif'">XML</span><span style="font-family: 宋体">文件来实现，</span><span style="font-family: 'Verdana','sans-serif'">WS-Coordination</span><span style="font-family: 宋体">规范易于实现，且对日后的扩展支持度高。</span> </p>
<p style="text-indent: 17.95pt; margin-left: 17.95pt"><span style="font-family: 宋体">通过</span><span style="font-family: 'Verdana','sans-serif'">WS-Coordination</span><span style="font-family: 宋体">的使用，一方面通过附加统一的本地协议，在使用不同通信协议的请求到来时，进行统一的协议处理，加快了请求的处理速度，提高了系统的松耦合性；另一方面</span><span style="font-family: 'Verdana','sans-serif'">WS-Coordination</span><span style="font-family: 宋体">规范所定义的框架加强了系统的异构性，使系统不因请求所使用的协议不同而无法处理，这提升了系统整体的兼容性，加强了系统的综合服务能力。</span></p>
<h4><span style="line-height: 120%; font-family: 'Verdana','sans-serif'; font-size: 10.5pt">1.3.2.<span style="font: 7pt 'Times New Roman'"> </span></span><span style="line-height: 120%; font-family: 'Verdana','sans-serif'; font-size: 10.5pt">WS-AtomicTransaction</span></h4>
<p style="text-indent: 17.95pt; margin-left: 17.95pt"><span style="font-family: 'Verdana','sans-serif'">WS-AtomicTransaction </span><span style="font-family: 宋体">定义了一组特定的协议，这组协议可以插入</span><span style="font-family: 'Verdana','sans-serif'"> WS-Coordination </span><span style="font-family: 宋体">模型，以实现传统的两阶段原子事务处理协议。注意到原子的两阶段模型只是就涉及的服务而言的非常重要。提供服务的站点或基础体系结构可能大肆宣传两阶段提交，但是却使用一些其他的企业内部模型，比如补偿模型或版本模型。这种自由使简单的两阶段提交模型对于长期运行的</span><span style="font-family: 'Verdana','sans-serif'"> Internet </span><span style="font-family: 宋体">计算更有用。</span></p>
<p style="text-indent: 17.95pt; margin-left: 17.95pt"><span style="font-family: 'Verdana','sans-serif'">WCF</span><span style="font-family: 宋体">实现了</span><span style="font-family: 'Verdana','sans-serif'">WS-AtomicTransaction</span><span style="font-family: 宋体">协议，事务管理器是由</span><span style="font-family: 'Verdana','sans-serif'">MSDTC</span><span style="font-family: 宋体">实现，也就是说在</span><span style="font-family: 'Verdana','sans-serif'">WCF</span><span style="font-family: 宋体">中可以使用</span><span style="font-family: 'Verdana','sans-serif'">WS-AtomicTransaction</span><span style="font-family: 宋体">协议进行分布式事务的管理，并跟其他实现了</span><span style="font-family: 'Verdana','sans-serif'">WS-AtomicTransaction</span><span style="font-family: 宋体">的异构分布式事务互操作。</span></p>
<h4><span style="line-height: 120%; font-family: 'Verdana','sans-serif'; font-size: 10.5pt">1.3.3.<span style="font: 7pt 'Times New Roman'"> </span></span><span style="line-height: 120%; font-family: 'Verdana','sans-serif'; font-size: 10.5pt">WS-BusinessActivity</span></h4>
<p style="text-indent: 17.95pt; margin-left: 17.95pt"><span style="font-family: 'Verdana','sans-serif'">WS-BusinessActivity </span><span style="font-family: 宋体">定义了一组特定的协议，这组协议可以插入</span><span style="font-family: 'Verdana','sans-serif'"> WS-Coordination </span><span style="font-family: 宋体">模型，以实现长期运行的、基于补偿的事务处理协议。</span></p>
<p style="text-indent: 17.95pt; margin-left: 17.95pt"><span style="font-family: 'Verdana','sans-serif'">WS-BusinessActivity</span><span style="font-family: 宋体">定义的是</span><span style="font-family: 'Verdana','sans-serif'">long-running</span><span style="font-family: 宋体">事务，所谓</span><span style="font-family: 'Verdana','sans-serif'">long-running</span><span style="font-family: 宋体">事务是指那些企业业务流程，需要跨应用、跨企业来完成某个事务，甚至在事务流程中还需要有手工操作的参与，这类事务的完成时间可能以分计，以小时计，甚至可能以天计，这类事务也被称为</span><span style="font-family: 'Verdana','sans-serif'">SAGA</span><span style="font-family: 宋体">。</span></p>
<p style="text-indent: 17.95pt; margin-left: 17.95pt"><span style="font-family: 宋体">这类事务如果按照事务的</span><span style="font-family: 'Verdana','sans-serif'">ACID</span><span style="font-family: 宋体">的要求去设计，势必造成系统的可用性大大的降低。试想一个由两台服务器一起参与的事务，服务器</span><span style="font-family: 'Verdana','sans-serif'">A</span><span style="font-family: 宋体">发起事务，服务器</span><span style="font-family: 'Verdana','sans-serif'">B</span><span style="font-family: 宋体">参与事务，</span><span style="font-family: 'Verdana','sans-serif'">B</span><span style="font-family: 宋体">的事务需要人工参与，所以处理时间可能很长。如果按照</span><span style="font-family: 'Verdana','sans-serif'">ACID</span><span style="font-family: 宋体">的原则，要保持事务的隔离性、一致性，服务器</span><span style="font-family: 'Verdana','sans-serif'">A</span><span style="font-family: 宋体">中发起的事务中使用到的事务资源将会被锁定，不允许其他应用访问到事务过程中的中间结果，直到整个事务被提交或者回滚。这就造成事务</span><span style="font-family: 'Verdana','sans-serif'">A</span><span style="font-family: 宋体">中的资源被长时间锁定，系统的可用性将不可接受。</span></p>
<p style="text-indent: 17.95pt; margin-left: 17.95pt"><span style="font-family: 'Verdana','sans-serif'">WS-BusinessActivity</span><span style="font-family: 宋体">提供了一种基于补偿的</span><span style="font-family: 'Verdana','sans-serif'">long-running</span><span style="font-family: 宋体">的事务处理模型。还是上面的例子，服务器</span><span style="font-family: 'Verdana','sans-serif'">A</span><span style="font-family: 宋体">的事务如果执行顺利，那么事务</span><span style="font-family: 'Verdana','sans-serif'">A</span><span style="font-family: 宋体">就先行提交，如果事务</span><span style="font-family: 'Verdana','sans-serif'">B</span><span style="font-family: 宋体">也执行顺利，则事务</span><span style="font-family: 'Verdana','sans-serif'">B</span><span style="font-family: 宋体">也提交，整个事务就算完成。但是如果事务</span><span style="font-family: 'Verdana','sans-serif'">B</span><span style="font-family: 宋体">执行失败，事务</span><span style="font-family: 'Verdana','sans-serif'">B</span><span style="font-family: 宋体">本身回滚，这时事务</span><span style="font-family: 'Verdana','sans-serif'">A</span><span style="font-family: 宋体">已经被提交，所以需要执行一个补偿操作，将已经提交的事务</span><span style="font-family: 'Verdana','sans-serif'">A</span><span style="font-family: 宋体">执行的操作作反操作，恢复到未执行前事务</span><span style="font-family: 'Verdana','sans-serif'">A</span><span style="font-family: 宋体">的状态。这样的</span><span style="font-family: 'Verdana','sans-serif'">SAGA</span><span style="font-family: 宋体">事务模型，是牺牲了一定的隔离性和一致性的，但是提高了</span><span style="font-family: 'Verdana','sans-serif'">long-running</span><span style="font-family: 宋体">事务的可用性。</span></p>
<p style="text-indent: 17.95pt; margin-left: 17.95pt"><span style="font-family: 宋体">目前的</span><span style="font-family: 'Verdana','sans-serif'">WCF</span><span style="font-family: 宋体">中未实现</span><span style="font-family: 'Verdana','sans-serif'">WS-BusinessActivity</span><span style="font-family: 宋体">，在</span><span style="font-family: 'Verdana','sans-serif'">WCF 4.0 beta2</span><span style="font-family: 宋体">中也为实现，估计在</span><span style="font-family: 'Verdana','sans-serif'">WCF 4.0</span><span style="font-family: 宋体">正式版中也不会实现</span><span style="font-family: 'Verdana','sans-serif'">WS-BusinessActivity</span><span style="font-family: 宋体">协议。</span></p>
<h2><span style="line-height: 120%; font-family: 'Verdana','sans-serif'; font-size: 10.5pt">2、 </span><span style="line-height: 120%; font-family: 宋体; font-size: 10.5pt">事务管理器</span></h2>
<p style="text-indent: 17.95pt; margin-left: 8.9pt"><span style="font-family: 宋体">管理事务必须有相应的协议外，还必须有个事务管理器，事务管理器通过相应的事务协议对本机的事务进行管理。如果同一个事务需要跨机器，则每台参与事务的机器的事务管理器之间进行相互协调共同完成一个分布式事务。</span></p>
<h3><span style="line-height: 120%; font-family: 'Verdana','sans-serif'; font-size: 10.5pt">2.1.<span style="font: 7pt 'Times New Roman'"> </span></span><span style="line-height: 120%; font-family: 'Verdana','sans-serif'; font-size: 10.5pt">LTM</span></h3>
<p style="text-indent: 17.95pt; margin-left: 17.95pt"><span style="font-family: 宋体">轻型事务管理器</span><span style="font-family: 'Verdana','sans-serif'">Lightweight Transaction Manager</span><span style="font-family: 宋体">，只能管理本地事务，事务在一个</span><span style="font-family: 'Verdana','sans-serif'">AppDomain</span><span style="font-family: 宋体">内。</span><span style="font-family: 'Verdana','sans-serif'">LTM</span><span style="font-family: 宋体">使用</span><span style="font-family: 'Verdana','sans-serif'">Lightweight protocol</span><span style="font-family: 宋体">管理两阶段提交的事务。</span><span style="font-family: 'Verdana','sans-serif'">LTM</span><span style="font-family: 宋体">只能管理单一的可持久化的资源，如果有两个以上的可持久化资源登记到事务中，</span><span style="font-family: 'Verdana','sans-serif'">LTM</span><span style="font-family: 宋体">将被升级到</span><span style="font-family: 'Verdana','sans-serif'">DTC</span><span style="font-family: 宋体">管理器。</span></p>
<h3><span style="line-height: 120%; font-family: 'Verdana','sans-serif'; font-size: 10.5pt">2.2.<span style="font: 7pt 'Times New Roman'"> </span></span><span style="line-height: 120%; font-family: 'Verdana','sans-serif'; font-size: 10.5pt">KTM</span></h3>
<p style="text-indent: 17.95pt; margin-left: 17.95pt"><span style="font-family: 'Verdana','sans-serif'">Vista</span><span style="font-family: 宋体">和</span><span style="font-family: 'Verdana','sans-serif'">windows2008</span><span style="font-family: 宋体">引入了内核事务管理器</span><span style="font-family: 'Verdana','sans-serif'">Kernel Transaction Manager (KTM)</span><span style="font-family: 宋体">，</span></p>
<p style="text-indent: 17.95pt; margin-left: 17.95pt"><span style="font-family: 'Verdana','sans-serif'">Windows Vista</span><span style="font-family: 宋体">中还引入了两个主要的事务资源，事务</span><span style="font-family: 'Verdana','sans-serif'">NTFS</span><span style="font-family: 宋体">和事务注册表，称作核心资源</span><span style="font-family: 'Verdana','sans-serif'">kernel resource managers (KRM)</span><span style="font-family: 宋体">，</span><span style="font-family: 'Verdana','sans-serif'">KTM</span><span style="font-family: 宋体">可以管理这两类资源。</span></p>
<p style="text-indent: 17.95pt; margin-left: 17.95pt"><span style="font-family: 宋体">事务性</span><span style="font-family: 'Verdana','sans-serif'"> NTFS</span><span style="font-family: 宋体">，也称为</span><span style="font-family: 'Verdana','sans-serif'"> TxF</span><span style="font-family: 宋体">，使用</span><span style="font-family: 'Verdana','sans-serif'">TxF</span><span style="font-family: 宋体">可以将文件操作纳入到事务管理中，在事务中的的文件操作将同事务中的其他事务资源一样在事务前后保持一致性。</span></p>
<p style="text-indent: 17.95pt; margin-left: 17.95pt"><span style="font-family: 宋体">同样事务性注册表，也称作</span><span style="font-family: 'Verdana','sans-serif'">TxR</span><span style="font-family: 宋体">，注册表的操作也可以纳入到事务管理中。</span></p>
<p style="text-indent: 17.95pt; margin-left: 17.95pt"><span style="font-family: 'Verdana','sans-serif'">KTM</span><span style="font-family: 宋体">跟</span><span style="font-family: 'Verdana','sans-serif'">LTM</span><span style="font-family: 宋体">一样，使用</span><span style="font-family: 'Verdana','sans-serif'">Lightweight protocol</span><span style="font-family: 宋体">管理两阶段提交的事务，只能管理本地事务，事务在一个</span><span style="font-family: 'Verdana','sans-serif'">AppDomain</span><span style="font-family: 宋体">内，只能管理单一的可持久化的资源。</span></p>
<h3><span style="line-height: 120%; font-family: 'Verdana','sans-serif'; font-size: 10.5pt">2.3.<span style="font: 7pt 'Times New Roman'"> </span></span><span style="line-height: 120%; font-family: 'Verdana','sans-serif'; font-size: 10.5pt">DTC</span></h3>
<p style="text-indent: 17.95pt; margin-left: 17.95pt"><span style="font-family: 'Verdana','sans-serif'">DTC</span><span style="font-family: 宋体">可以管理任何跨越执行边界的事务，跨</span><span style="font-family: 'Verdana','sans-serif'">AppDomain</span><span style="font-family: 宋体">，跨进程，跨机器，跨服务。</span><span style="font-family: 'Verdana','sans-serif'">DTC</span><span style="font-family: 宋体">可以使用</span><span style="font-family: 'Verdana','sans-serif'">OleTx </span><span style="font-family: 宋体">或者</span><span style="font-family: 'Verdana','sans-serif'">WSAT</span><span style="font-family: 宋体">事务协议。</span></p>
<p style="text-indent: 17.95pt; margin-left: 17.95pt"><span style="font-family: 'Verdana','sans-serif'">DTC</span><span style="font-family: 宋体">既可以管理本地事务，更重要的是它能够管理跨边界的服务。</span></p>
<p style="text-indent: 17.95pt; margin-left: 17.95pt"><span style="font-family: 宋体">在使用</span><span style="font-family: 'Verdana','sans-serif'">WCF</span><span style="font-family: 宋体">的场景下，每台运行</span><span style="font-family: 'Verdana','sans-serif'">WCF</span><span style="font-family: 宋体">服务的机器都默认使用</span><span style="font-family: 'Verdana','sans-serif'">DTC</span><span style="font-family: 宋体">。</span><span style="font-family: 'Verdana','sans-serif'">DTC</span><span style="font-family: 宋体">建立一个新事务，并跨机器把事务传播到其他机器，发起事务的机器上的事务为根事务，这个机器上的</span><span style="font-family: 'Verdana','sans-serif'">DTC</span><span style="font-family: 宋体">就要负责这个分布式事务的协调任务，负责启动事务，提交事务，和回滚事务。</span></p>
<p style="text-indent: 17.95pt; margin-left: 17.95pt"></p>
<p style="text-indent: 17.95pt; margin-left: 17.95pt"><span style="font-family: 宋体">事务管理器可使用的事务协议：</span></p>
<table style="border-bottom: windowtext 1pt solid; border-left: windowtext 1pt solid; width: 87.58%; margin-left: 24.8pt; border-top: windowtext 1pt solid; border-right: windowtext 1pt solid" border="1" cellspacing="0" cellpadding="0" width="87%">
<thead>
<tr>
<td style="border-bottom: windowtext 1pt solid; border-left: windowtext 1pt solid; padding-bottom: 3pt; padding-left: 3pt; width: 51.2%; padding-right: 3pt; border-top: windowtext 1pt solid; border-right: windowtext 1pt solid; padding-top: 3pt" valign="bottom" width="51%">
<p align="left"><strong><span style="font-family: 'Verdana','sans-serif'; font-size: 8.5pt">Protocal</span></strong></p></td>
<td style="border-bottom: windowtext 1pt solid; border-left: windowtext 1pt solid; padding-bottom: 3pt; padding-left: 3pt; padding-right: 3pt; border-top: windowtext 1pt solid; border-right: windowtext 1pt solid; padding-top: 3pt" valign="bottom">
<p align="left"><strong><span style="font-family: 'Verdana','sans-serif'; font-size: 8.5pt">LTM</span></strong></p></td>
<td style="border-bottom: windowtext 1pt solid; border-left: windowtext 1pt solid; padding-bottom: 3pt; padding-left: 3pt; padding-right: 3pt; border-top: windowtext 1pt solid; border-right: windowtext 1pt solid; padding-top: 3pt" valign="bottom">
<p align="left"><strong><span style="font-family: 'Verdana','sans-serif'; font-size: 8.5pt">KTM</span></strong></p></td>
<td style="border-bottom: windowtext 1pt solid; border-left: windowtext 1pt solid; padding-bottom: 3pt; padding-left: 3pt; padding-right: 3pt; border-top: windowtext 1pt solid; border-right: windowtext 1pt solid; padding-top: 3pt" valign="bottom">
<p align="left"><strong><span style="font-family: 'Verdana','sans-serif'; font-size: 8.5pt">DTC</span></strong></p></td></tr></thead>
<tbody>
<tr>
<td style="border-bottom: windowtext 1pt solid; border-left: windowtext 1pt solid; padding-bottom: 3pt; padding-left: 3pt; width: 51.2%; padding-right: 3pt; border-top: windowtext 1pt solid; border-right: windowtext 1pt solid; padding-top: 3pt" valign="top" width="51%">
<p align="left"><span style="font-family: 'Verdana','sans-serif'; font-size: 8.5pt">Lightweight protocol</span></p></td>
<td style="border-bottom: windowtext 1pt solid; border-left: windowtext 1pt solid; padding-bottom: 3pt; padding-left: 3pt; padding-right: 3pt; border-top: windowtext 1pt solid; border-right: windowtext 1pt solid; padding-top: 3pt" valign="top">
<p align="left"><span style="font-family: 'Verdana','sans-serif'; font-size: 8.5pt">Yes</span></p></td>
<td style="border-bottom: windowtext 1pt solid; border-left: windowtext 1pt solid; padding-bottom: 3pt; padding-left: 3pt; padding-right: 3pt; border-top: windowtext 1pt solid; border-right: windowtext 1pt solid; padding-top: 3pt" valign="top">
<p align="left"><span style="font-family: 'Verdana','sans-serif'; font-size: 8.5pt">Yes</span></p></td>
<td style="border-bottom: windowtext 1pt solid; border-left: windowtext 1pt solid; padding-bottom: 3pt; padding-left: 3pt; padding-right: 3pt; border-top: windowtext 1pt solid; border-right: windowtext 1pt solid; padding-top: 3pt" valign="top">
<p align="left"><span style="font-family: 'Verdana','sans-serif'; font-size: 8.5pt">No</span></p></td></tr>
<tr>
<td style="border-bottom: windowtext 1pt solid; border-left: windowtext 1pt solid; padding-bottom: 3pt; padding-left: 3pt; width: 51.2%; padding-right: 3pt; border-top: windowtext 1pt solid; border-right: windowtext 1pt solid; padding-top: 3pt" valign="top" width="51%">
<p><span style="font-family: 'Verdana','sans-serif'; font-size: 8.5pt">OleTx protocol</span></p></td>
<td style="border-bottom: windowtext 1pt solid; border-left: windowtext 1pt solid; padding-bottom: 3pt; padding-left: 3pt; padding-right: 3pt; border-top: windowtext 1pt solid; border-right: windowtext 1pt solid; padding-top: 3pt" valign="top">
<p align="left"><span style="font-family: 'Verdana','sans-serif'; font-size: 8.5pt">No</span></p></td>
<td style="border-bottom: windowtext 1pt solid; border-left: windowtext 1pt solid; padding-bottom: 3pt; padding-left: 3pt; padding-right: 3pt; border-top: windowtext 1pt solid; border-right: windowtext 1pt solid; padding-top: 3pt" valign="top">
<p align="left"><span style="font-family: 'Verdana','sans-serif'; font-size: 8.5pt">No</span></p></td>
<td style="border-bottom: windowtext 1pt solid; border-left: windowtext 1pt solid; padding-bottom: 3pt; padding-left: 3pt; padding-right: 3pt; border-top: windowtext 1pt solid; border-right: windowtext 1pt solid; padding-top: 3pt" valign="top">
<p align="left"><span style="font-family: 'Verdana','sans-serif'; font-size: 8.5pt">Yes</span></p></td></tr>
<tr>
<td style="border-bottom: windowtext 1pt solid; border-left: windowtext 1pt solid; padding-bottom: 3pt; padding-left: 3pt; width: 51.2%; padding-right: 3pt; border-top: windowtext 1pt solid; border-right: windowtext 1pt solid; padding-top: 3pt" valign="top" width="51%">
<p align="left"><span style="font-family: 'Verdana','sans-serif'; font-size: 8.5pt">WS-Atomic Transaction</span></p></td>
<td style="border-bottom: windowtext 1pt solid; border-left: windowtext 1pt solid; padding-bottom: 3pt; padding-left: 3pt; padding-right: 3pt; border-top: windowtext 1pt solid; border-right: windowtext 1pt solid; padding-top: 3pt" valign="top">
<p align="left"><span style="font-family: 'Verdana','sans-serif'; font-size: 8.5pt">No</span></p></td>
<td style="border-bottom: windowtext 1pt solid; border-left: windowtext 1pt solid; padding-bottom: 3pt; padding-left: 3pt; padding-right: 3pt; border-top: windowtext 1pt solid; border-right: windowtext 1pt solid; padding-top: 3pt" valign="top">
<p align="left"><span style="font-family: 'Verdana','sans-serif'; font-size: 8.5pt">No</span></p></td>
<td style="border-bottom: windowtext 1pt solid; border-left: windowtext 1pt solid; padding-bottom: 3pt; padding-left: 3pt; padding-right: 3pt; border-top: windowtext 1pt solid; border-right: windowtext 1pt solid; padding-top: 3pt" valign="top">
<p align="left"><span style="font-family: 'Verdana','sans-serif'; font-size: 8.5pt">Yes</span></p></td></tr></tbody></table>
<p style="text-indent: 17.95pt; margin-left: 17.95pt"></p>
<h2><span style="line-height: 120%; font-family: 'Verdana','sans-serif'; font-size: 10.5pt">3、 </span><span style="line-height: 120%; font-family: 宋体; font-size: 10.5pt">事务资源</span></h2>
<p style="text-indent: 17.95pt; margin-left: 17.95pt"><span style="font-family: 宋体">在事务范围内，可纳入事务管理的资源，即可以在事务正常执行后提交生效，在事务失败可以回滚恢复到事务启动前状态的资源成为事务资源。最常见的事务资源就是常用的数据库操作。但是在</span><span style="font-family: 'Verdana','sans-serif'">vista</span><span style="font-family: 宋体">开始引入了两个核心事务资源：</span><span style="font-family: 'Verdana','sans-serif'">TxF</span><span style="font-family: 宋体">事务文件和</span><span style="font-family: 'Verdana','sans-serif'">TxR</span><span style="font-family: 宋体">事务注册表。</span></p>
<p style="text-indent: 17.95pt; margin-left: 17.95pt"><span style="font-family: 宋体">可用的事务资源：</span></p>
<h3><span style="line-height: 120%; font-family: 'Verdana','sans-serif'; font-size: 10.5pt">3.1.<span style="font: 7pt 'Times New Roman'"> </span></span><span style="line-height: 120%; font-family: 宋体; font-size: 10.5pt">新</span><span style="line-height: 120%; font-family: 'Verdana','sans-serif'; font-size: 10.5pt">sql server</span><span style="line-height: 120%; font-family: 宋体; font-size: 10.5pt">事务资源</span></h3>
<p style="text-indent: 17.95pt; margin-left: 17.95pt"><span style="font-family: 'Verdana','sans-serif'">Sql 2005</span><span style="font-family: 宋体">或</span><span style="font-family: 'Verdana','sans-serif'">sql 2008</span><span style="font-family: 宋体">的事务资源是新</span><span style="font-family: 'Verdana','sans-serif'">sql server</span><span style="font-family: 宋体">，</span><span style="font-family: 'Verdana','sans-serif'">LTM</span><span style="font-family: 宋体">事务管理器可以管理这类事务。</span></p>
<h3><span style="line-height: 120%; font-family: 'Verdana','sans-serif'; font-size: 10.5pt">3.2.<span style="font: 7pt 'Times New Roman'"> </span></span><span style="line-height: 120%; font-family: 宋体; font-size: 10.5pt">核心事务资源</span></h3>
<p style="text-indent: 17.95pt; margin-left: 17.95pt"><span style="font-family: 'Verdana','sans-serif'">Vista</span><span style="font-family: 宋体">开始引入的</span><span style="font-family: 'Verdana','sans-serif'">TxF</span><span style="font-family: 宋体">事务文件和</span><span style="font-family: 'Verdana','sans-serif'">TxR</span><span style="font-family: 宋体">事务注册表。可以对文件和注册表进行事务性操作。</span><span style="font-family: 'Verdana','sans-serif'">KTM</span><span style="font-family: 宋体">可以管理这类资源。</span></p>
<h3><span style="line-height: 120%; font-family: 'Verdana','sans-serif'; font-size: 10.5pt">3.3.<span style="font: 7pt 'Times New Roman'"> </span></span><span style="line-height: 120%; font-family: 宋体; font-size: 10.5pt">传统事务资源</span></h3>
<p style="text-indent: 17.95pt; margin-left: 17.95pt"><span style="font-family: 'Verdana','sans-serif'">SQL Server 2000, Oracle, DB2, </span><span style="font-family: 宋体">和</span><span style="font-family: 'Verdana','sans-serif'">MSMQ</span><span style="font-family: 宋体">这类资源是传统的事务资源，这些资源只能由</span><span style="font-family: 'Verdana','sans-serif'">DTC</span><span style="font-family: 宋体">事务管理器进行管理。</span></p>
<p style="text-indent: 17.95pt; margin-left: 17.95pt"></p>
<p style="text-indent: 17.95pt; margin-left: 17.95pt"><span style="font-family: 宋体">事务管理器可管理的事务资源：</span></p>
<table style="border-bottom: windowtext 1pt solid; border-left: windowtext 1pt solid; width: 87.58%; margin-left: 24.8pt; border-top: windowtext 1pt solid; border-right: windowtext 1pt solid" border="1" cellspacing="0" cellpadding="0" width="87%">
<thead>
<tr>
<td style="border-bottom: windowtext 1pt solid; border-left: windowtext 1pt solid; padding-bottom: 3pt; padding-left: 3pt; width: 51.2%; padding-right: 3pt; border-top: windowtext 1pt solid; border-right: windowtext 1pt solid; padding-top: 3pt" valign="bottom" width="51%">
<p align="left"><strong><span style="font-family: 'Verdana','sans-serif'; font-size: 8.5pt">Resource</span></strong></p></td>
<td style="border-bottom: windowtext 1pt solid; border-left: windowtext 1pt solid; padding-bottom: 3pt; padding-left: 3pt; padding-right: 3pt; border-top: windowtext 1pt solid; border-right: windowtext 1pt solid; padding-top: 3pt" valign="bottom">
<p align="left"><strong><span style="font-family: 'Verdana','sans-serif'; font-size: 8.5pt">LTM</span></strong></p></td>
<td style="border-bottom: windowtext 1pt solid; border-left: windowtext 1pt solid; padding-bottom: 3pt; padding-left: 3pt; padding-right: 3pt; border-top: windowtext 1pt solid; border-right: windowtext 1pt solid; padding-top: 3pt" valign="bottom">
<p align="left"><strong><span style="font-family: 'Verdana','sans-serif'; font-size: 8.5pt">KTM</span></strong></p></td>
<td style="border-bottom: windowtext 1pt solid; border-left: windowtext 1pt solid; padding-bottom: 3pt; padding-left: 3pt; padding-right: 3pt; border-top: windowtext 1pt solid; border-right: windowtext 1pt solid; padding-top: 3pt" valign="bottom">
<p align="left"><strong><span style="font-family: 'Verdana','sans-serif'; font-size: 8.5pt">DTC</span></strong></p></td></tr></thead>
<tbody>
<tr>
<td style="border-bottom: windowtext 1pt solid; border-left: windowtext 1pt solid; padding-bottom: 3pt; padding-left: 3pt; width: 51.2%; padding-right: 3pt; border-top: windowtext 1pt solid; border-right: windowtext 1pt solid; padding-top: 3pt" valign="top" width="51%">
<p align="left"><span style="font-family: 宋体; font-size: 9pt">新</span><span style="font-family: 'Verdana','sans-serif'; font-size: 9pt">Sql Server</span><span style="font-family: 宋体; font-size: 9pt">事务资源</span></p></td>
<td style="border-bottom: windowtext 1pt solid; border-left: windowtext 1pt solid; padding-bottom: 3pt; padding-left: 3pt; padding-right: 3pt; border-top: windowtext 1pt solid; border-right: windowtext 1pt solid; padding-top: 3pt" valign="top">
<p align="left"><span style="font-family: 'Verdana','sans-serif'; font-size: 8.5pt">Yes</span></p></td>
<td style="border-bottom: windowtext 1pt solid; border-left: windowtext 1pt solid; padding-bottom: 3pt; padding-left: 3pt; padding-right: 3pt; border-top: windowtext 1pt solid; border-right: windowtext 1pt solid; padding-top: 3pt" valign="top">
<p align="left"><span style="font-family: 'Verdana','sans-serif'; font-size: 8.5pt">No</span></p></td>
<td style="border-bottom: windowtext 1pt solid; border-left: windowtext 1pt solid; padding-bottom: 3pt; padding-left: 3pt; padding-right: 3pt; border-top: windowtext 1pt solid; border-right: windowtext 1pt solid; padding-top: 3pt" valign="top">
<p align="left"><span style="font-family: 'Verdana','sans-serif'; font-size: 8.5pt">Yes</span></p></td></tr>
<tr>
<td style="border-bottom: windowtext 1pt solid; border-left: windowtext 1pt solid; padding-bottom: 3pt; padding-left: 3pt; width: 51.2%; padding-right: 3pt; border-top: windowtext 1pt solid; border-right: windowtext 1pt solid; padding-top: 3pt" valign="top" width="51%">
<p><span style="font-family: 宋体; font-size: 9pt">核心事务资源</span></p></td>
<td style="border-bottom: windowtext 1pt solid; border-left: windowtext 1pt solid; padding-bottom: 3pt; padding-left: 3pt; padding-right: 3pt; border-top: windowtext 1pt solid; border-right: windowtext 1pt solid; padding-top: 3pt" valign="top">
<p align="left"><span style="font-family: 'Verdana','sans-serif'; font-size: 8.5pt">No</span></p></td>
<td style="border-bottom: windowtext 1pt solid; border-left: windowtext 1pt solid; padding-bottom: 3pt; padding-left: 3pt; padding-right: 3pt; border-top: windowtext 1pt solid; border-right: windowtext 1pt solid; padding-top: 3pt" valign="top">
<p align="left"><span style="font-family: 'Verdana','sans-serif'; font-size: 8.5pt">Yes</span></p></td>
<td style="border-bottom: windowtext 1pt solid; border-left: windowtext 1pt solid; padding-bottom: 3pt; padding-left: 3pt; padding-right: 3pt; border-top: windowtext 1pt solid; border-right: windowtext 1pt solid; padding-top: 3pt" valign="top">
<p align="left"><span style="font-family: 'Verdana','sans-serif'; font-size: 8.5pt">Yes</span></p></td></tr>
<tr style="height: 11.65pt">
<td style="border-bottom: windowtext 1pt solid; border-left: windowtext 1pt solid; padding-bottom: 3pt; padding-left: 3pt; width: 51.2%; padding-right: 3pt; height: 11.65pt; border-top: windowtext 1pt solid; border-right: windowtext 1pt solid; padding-top: 3pt" valign="top" width="51%">
<p align="left"><span style="font-family: 宋体; font-size: 9pt">传统事务资源</span></p></td>
<td style="border-bottom: windowtext 1pt solid; border-left: windowtext 1pt solid; padding-bottom: 3pt; padding-left: 3pt; padding-right: 3pt; height: 11.65pt; border-top: windowtext 1pt solid; border-right: windowtext 1pt solid; padding-top: 3pt" valign="top">
<p align="left"><span style="font-family: 'Verdana','sans-serif'; font-size: 8.5pt">No</span></p></td>
<td style="border-bottom: windowtext 1pt solid; border-left: windowtext 1pt solid; padding-bottom: 3pt; padding-left: 3pt; padding-right: 3pt; height: 11.65pt; border-top: windowtext 1pt solid; border-right: windowtext 1pt solid; padding-top: 3pt" valign="top">
<p align="left"><span style="font-family: 'Verdana','sans-serif'; font-size: 8.5pt">No</span></p></td>
<td style="border-bottom: windowtext 1pt solid; border-left: windowtext 1pt solid; padding-bottom: 3pt; padding-left: 3pt; padding-right: 3pt; height: 11.65pt; border-top: windowtext 1pt solid; border-right: windowtext 1pt solid; padding-top: 3pt" valign="top">
<p align="left"><span style="font-family: 'Verdana','sans-serif'; font-size: 8.5pt">Yes</span></p></td></tr></tbody></table>
<p style="text-indent: 17.95pt; margin-left: 17.95pt"></p>
<h2><span style="line-height: 120%; font-family: 'Verdana','sans-serif'; font-size: 10.5pt">4、 </span><span style="line-height: 120%; font-family: 宋体; font-size: 10.5pt">事务管理器的升级</span></h2>
<p style="text-indent: 17.95pt; margin-left: 17.95pt"><span style="font-family: 宋体">每个</span><span style="font-family: 'Verdana','sans-serif'">WCF</span><span style="font-family: 宋体">中启动的事务都是先由</span><span style="font-family: 'Verdana','sans-serif'">LTM</span><span style="font-family: 宋体">事务管理器管理，一旦事务中出现现有事务管理器无法管理的资源或情况，</span><span style="font-family: 'Verdana','sans-serif'">WCF</span><span style="font-family: 宋体">会提升事务管理器的级别。分别从</span><span style="font-family: 'Verdana','sans-serif'">LTM</span><span style="font-family: 宋体">升级到</span><span style="font-family: 'Verdana','sans-serif'">KTM</span><span style="font-family: 宋体">，最高级别升级到</span><span style="font-family: 'Verdana','sans-serif'">DTC</span><span style="font-family: 宋体">。事务管理器可以多次升级，事务管理器一旦升级后不能降级。</span></p>
<p style="text-indent: 17.95pt; margin-left: 17.95pt"><span style="font-family: 宋体">事务管理器的升级规则：</span></p>
<p style="text-indent: 17.95pt; margin-left: 17.95pt"><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://images.cnblogs.com/cnblogs_com/chnking/WindowsLiveWriter/WCF__CE1/image_3.png" width="414" height="487" /></p></div></div></div><script type="text/javascript">
if ($ != jQuery) {
	$ = jQuery.noConflict();
}
var isLogined = false;
var cb_blogId = 40246;
var cb_entryId = 2387383;
var cb_blogApp = "tiwlin";
var cb_blogUserGuid = "9046420b-63cf-dd11-9e4d-001cf0cd104b";
var cb_entryCreatedDate = '2012/3/9 11:58:00';
</script><img src ="http://www.blogjava.net/paulwong/aggbug/373013.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/paulwong/" target="_blank">paulwong</a> 2012-03-30 00:20 <a href="http://www.blogjava.net/paulwong/archive/2012/03/30/373013.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>