<?xml version="1.0" encoding="GB2312"?>   
<rdf:RDF 
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" 
xmlns:dc="http://purl.org/dc/elements/1.1/" 
xmlns:sy="http://purl.org/rss/1.0/modules/syndication/" 
xmlns:admin="http://webns.net/mvcb/" 
xmlns:cc="http://web.resource.org/cc/" 
xmlns="http://purl.org/rss/1.0/"> 

<channel rdf:about="http://dozb.bokee.com/index.html"> 
<title><![CDATA[C++之dozb的程序人生]]></title> 
<link>http://dozb.bokee.com/index.html</link> 
<description><![CDATA[C/C++，STL，Boost，ACE，VC，Java，JavaScript，中间件，网络编程，信息安全，黑客技术；生活娱乐，天下大事，相册旧事，人生感悟。<br>我的QQ：437484257 MSN：yiqianfeng@hotmail.com ]]></description> 
<dc:language>zh-cn</dc:language> 
<dc:creator>dozb</dc:creator> 
<dc:date>2006-07-12T15:37:33Z</dc:date> 
<admin:generatorAgent rdf:resource="http://blog.bokee.com/" /> 

<items> 
<rdf:Seq>
<rdf:li rdf:resource="http://dozb.bokee.com/5186731.html" />
<rdf:li rdf:resource="http://dozb.bokee.com/4996003.html" />
<rdf:li rdf:resource="http://dozb.bokee.com/4767885.html" />
<rdf:li rdf:resource="http://dozb.bokee.com/4660204.html" />
<rdf:li rdf:resource="http://dozb.bokee.com/4545628.html" />
<rdf:li rdf:resource="http://dozb.bokee.com/4525927.html" />
<rdf:li rdf:resource="http://dozb.bokee.com/4425608.html" />
<rdf:li rdf:resource="http://dozb.bokee.com/4386711.html" />
<rdf:li rdf:resource="http://dozb.bokee.com/4355276.html" />
<rdf:li rdf:resource="http://dozb.bokee.com/4353560.html" />
</rdf:Seq> 
</items> 

</channel>


<item rdf:about="http://dozb.bokee.com/5186731.html"> 
<title><![CDATA[Using WinInet to call a Web service ]]></title> 
<link>http://dozb.bokee.com/5186731.html</link> 
<description><![CDATA[<table style="BORDER-RIGHT: #7690b1 1px solid; BORDER-TOP: #7690b1 1px solid; BORDER-LEFT: #7690b1 1px solid; BORDER-BOTTOM: #7690b1 1px solid" cellspacing="2" cellpadding="10" width="100%"><tbody><tr><td class="small_text" bgcolor="#eeeeee"><span class="xmlQue">Using WinInet to call a Web service</span> <br /><span class="small_text">I am working on a MFC/C++ application, and need to call a Web service. I would like to avoid adding any dependency or use any other API (MSXML or SOAP Toolkit), and continue with my application's minimum requirements (which includes Internet Explorer 5.5 or above), and still write the Web service client code. In other words, can you please show me an example of using WinInet to call a Web service? </span></td></tr><tr><td class="small_text" bgcolor="#ffffff"><img hspace="3" src="http://www.perfectxml.com/ni/bluearrow.gif" align="absMiddle" border="0" /><span class="xmlQue">Answer:</span><br /><span class="small_text"><a class="LM1" href="http://www.perfectxml.com/downloads/WinInetMFCWebSvc.zip">Click here</a> to download a sample console application that uses MFC WinInet classes to call a Web service. <br /><br />MFC provides wrapper classes around WinInet API. These classes simplify the task of writing HTTP/FTP client applications. Following are the eight steps required to send a HTTP request using MFC WinInet classes: <ol><li>Create an instance of <span class="code"><b>CInternetSession</b></span> class. This begins an HTTP session.<br /><br /></li><li>Call <span class="code"><b>CInternetSession::GetHttpConnection</b></span> to get an instance of <span class="code"><b>CHttpConnection</b></span>. Pass the server and HTTP port to this method, and it establishes a connection to an HTTP server.<br /><br /></li><li>Open an HTTP request using <span class="code"><b>CHttpConnection::OpenRequest</b></span>. Pass the rest of the URL (except server name), the HTTP method (GET/POST/...) to this method, and it returns a <span class="code"><b>CHttpFile</b></span> object. <br /><br /></li><li>Optionally, call <span class="code"><b>CHttpFile::AddRequestHeaders</b></span> to supply any request headers.<br /><br /></li><li>Call <span class="code"><b>CHttpFile::SendRequest</b></span> to actually send the request and get the response back.<br /><br /></li><li>Use <span class="code"><b>CHttpFile::QueryInfoStatusCode</b></span> to find out if the HTTP request succeeded.<br /><br /></li><li>On success, use <span class="code"><b>pHttpFile-&amp;gt;Read</b></span> to read the response bytes.<br /><br /></li><li>Finally, call <span class="code"><b>CHttpFile::Close</b></span> and <span class="code"><b>CHttpConnection::Close</b></span>. </li></ol>Here is a Web service client code that uses MFC WinInet classes to call <a class="LM1" href="http://www.xmethods.com/ve2/ViewListing.po;jsessionid=E8te_EZgT1646EUo1Bs1ISbs(QhxieSRM)?key=uuid:477CEED8-1EDD-89FA-1070-6C2DBE1685F8" target="_blank">Weather - Temperature</a> Web service (written using Apache SOAP) on XMethods.com. This Web service, given a zip code (US only), returns the current temperature. <br /><pre style="BACKGROUND-COLOR: #eeeeee"><code style="BACKGROUND-COLOR: #eeeeee">...
...
#include &amp;lt;afxinet.h&amp;gt;
...
...

static const TCHAR* g_lpszSOAPRequest =    
_T(&amp;quot;&amp;lt;soap:Envelope &amp;quot;
    &amp;quot;xmlns:n='urn:xmethods-Temperature' &amp;quot;
    &amp;quot;xmlns:soap='http://schemas.xmlsoap.org/soap/envelope/' &amp;quot;
    &amp;quot;xmlns:soapenc='http://schemas.xmlsoap.org/soap/encoding/' &amp;quot;
    &amp;quot;xmlns:xs='http://www.w3.org/2001/XMLSchema' &amp;quot;
    &amp;quot;xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance'&amp;gt; &amp;quot;
    &amp;quot;&amp;lt;soap:Body soap:encodingStyle='http://schemas.xmlsoap.org/soap/encoding/'&amp;gt; &amp;quot;
    &amp;quot;  &amp;lt;n:getTemp&amp;gt; &amp;quot;
    &amp;quot;     &amp;lt;zipcode xsi:type='xs:string'&amp;gt;98007&amp;lt;/zipcode&amp;gt; &amp;quot;
    &amp;quot;  &amp;lt;/n:getTemp&amp;gt; &amp;quot;
   &amp;quot;&amp;lt;/soap:Body&amp;gt; &amp;quot;
&amp;quot;&amp;lt;/soap:Envelope&amp;gt;&amp;quot;);

#define CHUNK_SIZE      2048
   
void CallWebService()
{
   try
   {
      <font color="#008000">//   1. Instantiate CInternetSession</font>
      CInternetSession httpSession(_T(&amp;quot;Sample Web Service Client&amp;quot;), 
                           1,
                           INTERNET_OPEN_TYPE_PRECONFIG,
                           NULL,
                           NULL,
                           INTERNET_FLAG_DONT_CACHE);
      
      <font color="#008000">//   2. Get CHttpConnection (Server URL and Port required)</font>
      CHttpConnection* pHttpConnection = 
                              httpSession.GetHttpConnection(_T(&amp;quot;services.xmethods.net&amp;quot;), 
                                 INTERNET_FLAG_NO_AUTO_REDIRECT,
                                 80, NULL, NULL);

      <font color="#008000">//   3. Open HTTP Request (pass method type [get/post/..] and URL path (except server name))</font>
      CHttpFile* pHttpFile             = 
                              pHttpConnection-&amp;gt;OpenRequest
                              (_T(&amp;quot;POST&amp;quot;), 
                                 _T(&amp;quot;soap/servlet/rpcrouter&amp;quot;), 
                                 NULL, 1, NULL, NULL, 
                                 INTERNET_FLAG_KEEP_CONNECTION |
                                 INTERNET_FLAG_EXISTING_CONNECT |
                                 INTERNET_FLAG_DONT_CACHE |
                                 INTERNET_FLAG_RELOAD);

      <font color="#008000">//   4. Add HTTP Request Headers</font>
      CString strSOAPReq(g_lpszSOAPRequest);
      DWORD dwRewLen = strSOAPReq.GetLength();
      CString strHeaders;
      strHeaders.Format(_T(&amp;quot;Content-Type: text/xml; charset=utf-8\nContent-Length:%d&amp;quot;), 
         dwRewLen);
      pHttpFile-&amp;gt;AddRequestHeaders(strHeaders);

      
      <font color="#008000">//   5. Send the request</font>
      pHttpFile-&amp;gt;SendRequest(NULL, 0, (LPVOID)(LPCTSTR)strSOAPReq, dwRewLen);

      <font color="#008000">//   6. Check the return HTTP Status Code</font>
      DWORD dwStatucCode = HTTP_STATUS_OK;

      pHttpFile-&amp;gt;QueryInfoStatusCode(dwStatucCode);

      if(dwStatucCode == HTTP_STATUS_OK)
      {
         CString strResponse;
         TCHAR szBuf[CHUNK_SIZE] = {0};
         UINT nBytesRead;

         <font color="#008000">//   7. Read the response text</font>
         do
         {
            nBytesRead = pHttpFile-&amp;gt;Read((void*) szBuf, CHUNK_SIZE);
            strResponse += szBuf;
            if(nBytesRead &amp;lt; CHUNK_SIZE)
               break;
         }while(nBytesRead == CHUNK_SIZE);

         AfxMessageBox(strResponse);
         <font color="#008000">//TODO: Process the response</font>
      }
      else
      {
         <font color="#008000">//TODO: Error handling</font>
      }

      <font color="#008000">//   8. Close the stream/connection</font>
      if(pHttpFile)
      {
         pHttpFile-&amp;gt;Close();
         delete pHttpFile;
         pHttpFile = NULL;
      }

      if(pHttpConnection)
      {
         pHttpConnection-&amp;gt;Close();
         delete pHttpConnection;
         pHttpConnection = NULL;
      }

   }
   catch(CInternetException* exp)
   {
      TCHAR lpszErrorMsg[MAX_PATH+2];
      exp-&amp;gt;GetErrorMessage(lpszErrorMsg, MAX_PATH);
      AfxMessageBox(lpszErrorMsg);
   }
}
</code></pre></span></td></tr></tbody></table>]]></description> 
<dc:subject><![CDATA[Web]]></dc:subject> 
<dc:creator><![CDATA[dozb]]></dc:creator> 
<dc:date>2006-06-08T18:50:40Z</dc:date> 
</item> 
<item rdf:about="http://dozb.bokee.com/4996003.html"> 
<title><![CDATA[OSWorkflow 探索 ]]></title> 
<link>http://dozb.bokee.com/4996003.html</link> 
<description><![CDATA[<div class="postText"><p><font size="3"><strong>前 言</strong></font></p><p>&amp;nbsp;&amp;nbsp;&amp;nbsp; 本文没有抛出可运行的范例，仅仅是程序片断而已，不过在 OSWorkflow 的 Wiki 上，Quake Wang 已把官方入门教程完整地翻译成中文了，有兴趣的读者可去阅读。关于 OSWorkflow 更加细节性的内容，可参考官方手册，相信你在了解了入门教程后，可轻松阅读官方手册。<br />&amp;nbsp;&amp;nbsp;&amp;nbsp; <br /><font size="3"><strong>OSWorkflow 概念</strong></font></p><p>&amp;nbsp;&amp;nbsp;&amp;nbsp; 在商用和开源世界里，OSWorkflow 都不同于这些已有的工作流系统。最大不同在于 OSWorkflow 有着非常优秀的灵活性。在开始接触 OSWorkflow 时可能较难掌握（有人说不适合工作流新手入门），比如，OSWorkflow 不要求图形化工具来开发工作流，而推荐手工编写 xml 格式的工作流程描述符。它能为应用程序开发者提供集成，也能与现有的代码和数据库进行集成。这一切似乎给正在寻找快速“即插即用”工作流解决方案的人制造了麻烦，但研究发现，那些“即插即用”方案也不能在一个成熟的应用程序中提供足够的灵活性来实现所有需求。<br />&amp;nbsp;&amp;nbsp;&amp;nbsp; <br /><font size="3"><strong>OSWorkflow 优势</strong></font></p><p>&amp;nbsp;&amp;nbsp;&amp;nbsp; OSWorkflow 给你绝对的灵活性。OSWorkflow 被认为是一种“低级别”工作流实现。与其他工作流系统能用图标表现“loops(回路)”和“conditions(条件)”相比，OSWorkflow 只是手工“编码(coded)”来实现的。但这并不能说实际的代码是需要完全手工编码的，脚本语言能胜任这种情形。OSWorkflow 不希望一个非技术用户修改工作流程，虽然一些其他工作流系统提供了简单的 GUI 用于工作流编辑，但像这样改变工作流，通常会破坏这些应用。所以，进行工作流调整的最佳人选是开发人员，他们知道该怎么改变。不过，在最新的版本中，OSWorkflow 也提供了 GUI 设计器来协助工作流的编辑。</p><p>&amp;nbsp;&amp;nbsp;&amp;nbsp; OSWorkflow 基于有限状态机概念。每个 state 由 step ID 和 status 联合表现（可简单理解为 step 及其 status 表示有限状态机的 state）。一个 state 到另一 state 的 transition 依赖于 action 的发生，在工作流生命期内有至少一个或多个活动的 state。这些简单概念展现了 OSWorkflow 引擎的核心思想，并允许一个简单 XML 文件解释工作流业务流程。</p><p /><p /><p><font size="3"><strong>OSWorkflow 核心概念</strong></font><br />&amp;nbsp;&amp;nbsp;&amp;nbsp; <br /><strong>step（步骤）<br /></strong>&amp;nbsp;&amp;nbsp;&amp;nbsp; 一个 step 是工作流所处的位置。可能从一个 step 流转到另外一个 step（或者有时候还是停留在一样的 step）。举例来说，一个 OA 系统的请假流程，它的 step 名称可能有“本部门审批阶段”，“办公室审批阶段”，“总经理审批阶段”等。<br />&amp;nbsp;<br /><strong>status（状态）<br /></strong>&amp;nbsp;&amp;nbsp;&amp;nbsp; 工作流 status 是一个用来描述工作流程中具体步骤状态的字符串。OSWorkflow 的有 Underway（进行中）、Queued（等候处理中）、Finished（完成）三种 status。<br />&amp;nbsp;<br /><strong>action（动作）<br /></strong>&amp;nbsp;&amp;nbsp;&amp;nbsp; action 指定了可能发生在 step 内的转变，会导致 step 的变更。在 OA 系统中，“本部门审批阶段”可能有“拒绝”或“批准”两个 action。action 和 step 之间的关系是，step 说明“在哪里”，action 说明“可以去哪里”。 一个 action 典型地由两部分组成：可以执行此动作的 condition（条件），以及执行此动作的 result（结果）。<br />&amp;nbsp;<br /><strong>condition（条件）</strong><br />&amp;nbsp;&amp;nbsp;&amp;nbsp; 类似于逻辑判断，可包含“AND”和“OR”逻辑。比如一个请假流程中的“本部门审批阶段”，该阶段利用“AND”逻辑，判断流程状态是否为等候处理中，以及审批者是否为本部门主管。<br />&amp;nbsp;&amp;nbsp;&amp;nbsp; <br /><strong>result（结果）</strong><br />&amp;nbsp;&amp;nbsp;&amp;nbsp; Result 代表指向新的 step 及其 step status，也可能进入 split 或者 join。Result 分为两种， contidional-result （有条件结果），只有条件为真时才使用该结果，和 unconditional-result（无条件结果），当条件不满足或没有条件时使用该结果。</p><p><strong>split/join（分离/连接）</strong><br />流程的切分和融合。很简单的概念，split 提供多个 result；join 则判断多个 current step 的状态，提供一个 result。</p><p /><p /><p><font size="3"><strong>OSWorkflow 包用途分析及代码片断</strong></font><br />&amp;nbsp;&amp;nbsp;&amp;nbsp; <br /><strong>com.opensymphony.workflow</strong> <br />&amp;nbsp;&amp;nbsp;&amp;nbsp; 该包为整个 OSWorkflow 引擎提供核心接口。例如 com.opensymphony.workflow.Workflow 接口，可以说，实际开发中的大部分工作都是围绕该接口展开的，该接口有 BasicWorkflow、EJBWorkflow、OfbizWorkflow 三个实现类。</p><p><strong>com.opensymphony.workflow.basic <br /></strong>&amp;nbsp;&amp;nbsp;&amp;nbsp; 该包有两个类，BasicWorkflow 与 BasicWorkflowContext。BasicWorkflow 不支持事务，尽管依赖持久实现，事务也不能包裹它。BasicWorkflowContext 在实际开发中很少使用。</p><p><table style="WIDTH: 417px; HEIGHT: 54px" cellspacing="1" cellpadding="1" width="417" border="1"><tbody><tr><td><font size="2">&amp;nbsp;&amp;nbsp;public void setWorkflow(int userId) {<br />&amp;nbsp;&amp;nbsp;Workflow workflow = new BasicWorkflow(Integer.toString(userId));<br />&amp;nbsp;}</font></td></tr></tbody></table></p><p><strong>com.opensymphony.workflow.config</strong><br />&amp;nbsp;&amp;nbsp;&amp;nbsp; 该包有一个接口和两个该接口的实现类。在 OSWorkflow 2.7 以前，状态由多个地方的静态字段维护，这种方式很方便，但是有很多缺陷和约束。最主要的缺点是无法通过不同配置运行多个 OSWorkflow 实例。实现类 DefaultConfiguration 用于一般的配置文件载入。而 SpringConfiguration 则是让 Spring 容器管理配置信息。</p><p><table style="WIDTH: 418px; HEIGHT: 23px" cellspacing="1" cellpadding="1" width="418" border="1"><tbody><tr><td><font size="2">&amp;nbsp;&amp;nbsp;public void setConfiguration(SpringConfiguration configuration) {<br />&amp;nbsp;&amp;nbsp;SpringConfiguration configuration = configuration;<br />workflow.setConfiguration(configuration);<br />&amp;nbsp;}</font></td></tr></tbody></table></p><p><strong>com.opensymphony.workflow.ejb <br /></strong>&amp;nbsp;&amp;nbsp;&amp;nbsp; 该包有两个接口 WorkflowHome 和 WorkflowRemote。该包的若干类中，最重要的是 EJBWorkflow，该类和 BasicWorkflow 的作用一样，是 OSWorkflow 的核心，并利用 EJB 容器管理事务，也作为工作流 session bean 的包装器。</p><p><strong>com.opensymphony.workflow.loader</strong> <br />&amp;nbsp;&amp;nbsp;&amp;nbsp; 该包有若干类，用得最多的是 XxxxDescriptor，如果在工作流引擎运行时需要了解指定的动作、步骤的状态、名字，等信息时，这些描述符会起到很大作用。</p><p><table style="WIDTH: 418px; HEIGHT: 23px" cellspacing="1" cellpadding="1" width="418" border="1"><tbody><tr><td><font size="2">&amp;nbsp;&amp;nbsp;public String findNameByStepId(int stepId,String wfName) {<br />&amp;nbsp;&amp;nbsp;WorkflowDescriptor wd = workflow.getWorkflowDescriptor(wfName);<br />&amp;nbsp;&amp;nbsp;StepDescriptor stepDes = wd.getStep(stepId);<br />&amp;nbsp;&amp;nbsp;return stepDes.getName();<br />&amp;nbsp;}</font></td></tr></tbody></table></p><p><strong>com.opensymphony.workflow.ofbiz <br /></strong>&amp;nbsp;&amp;nbsp;&amp;nbsp; OfbizWorkflow 和 BasicWorkflow 在很多方面非常相似，除了需要调用 ofbiz 的 TransactionUtil 来包装事务。</p><p><strong>com.opensymphony.workflow.query</strong> <br />&amp;nbsp;&amp;nbsp;&amp;nbsp; 该包主要为查询而设计，但不是所有的工作流存储都支持查询。通常，Hibernate 和 JDBC 都支持，而内存工作流存储不支持。值得注意的是 Hibernate 存储不支持混合型查询（例如，一个查询同时包含了 history step 上下文和 current step 上下文）。执行一个查询，需要创建 WorkflowExpressionQuery 实例，接着调用 Workflow 对象的 query 方法来得到最终查询结果。</p><p><table style="WIDTH: 419px; HEIGHT: 23px" cellspacing="1" cellpadding="1" width="419" border="1"><tbody><tr><td><p><font size="2">&amp;nbsp;&amp;nbsp;public List queryDepAdmin(int userId,int type) {<br />&amp;nbsp;&amp;nbsp;int[] arr = getSubPerson(userId,type);</font></p><p><font size="2">&amp;nbsp;&amp;nbsp;//构造表达式<br />&amp;nbsp;&amp;nbsp;Expression[] expressions = new Expression[1 + arr.length];<br />&amp;nbsp;&amp;nbsp;Expression expStatus = new FieldExpression(FieldExpression.STATUS,<br />&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;FieldExpression.CURRENT_STEPS, FieldExpression.EQUALS, &amp;quot;Queued&amp;quot;);<br />&amp;nbsp;&amp;nbsp;expressions[0] = expStatus;</font></p><p><font size="2">&amp;nbsp;&amp;nbsp;for (int i = 0; i &amp;lt; arr.length; i++) {<br />&amp;nbsp;&amp;nbsp;&amp;nbsp;Expression expOwner = new FieldExpression(FieldExpression.OWNER,<br />&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;FieldExpression.CURRENT_STEPS, FieldExpression.EQUALS,<br />&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Integer.toString(arr[i]));<br />&amp;nbsp;&amp;nbsp;&amp;nbsp;expressions[i + 1] = expOwner;<br />&amp;nbsp;&amp;nbsp;}</font></p><p><font size="2">&amp;nbsp;&amp;nbsp;//查询未完成流编号<br />&amp;nbsp;&amp;nbsp;List wfIdList = null;<br />&amp;nbsp;&amp;nbsp;try {<br />&amp;nbsp;&amp;nbsp;&amp;nbsp;WorkflowExpressionQuery query = new WorkflowExpressionQuery(<br />&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;new NestedExpression(expressions, NestedExpression.AND));<br />&amp;nbsp;&amp;nbsp;&amp;nbsp;wfIdList = workflow.query(query);<br />&amp;nbsp;&amp;nbsp;} catch (Exception e) {<br />&amp;nbsp;&amp;nbsp;&amp;nbsp;e.printStackTrace();<br />&amp;nbsp;&amp;nbsp;}</font></p></td></tr></tbody></table><br /><strong>com.opensymphony.workflow.soap</strong> <br />&amp;nbsp;&amp;nbsp;&amp;nbsp; OSWorkflow 通过 SOAP 来支持远端调用。这种调用借助 WebMethods 实现。</p><p><strong>com.opensymphony.workflow.spi <br /></strong>&amp;nbsp;&amp;nbsp;&amp;nbsp; 该包可以说是 OSWorkflow 与持久层打交道的途径，如当前工作流的实体，其中包括：EJB、Hibernate、JDBC、Memory、Ofbiz、OJB、Prevayler。</p><p><table style="WIDTH: 422px; HEIGHT: 23px" cellspacing="1" cellpadding="1" width="422" border="1"><tbody><tr><td><font size="2">&amp;nbsp;&amp;nbsp;HibernateWorkflowEntry hwfe = (HibernateWorkflowEntry) getHibernateTemplate()<br />&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;.find(&amp;quot;from HibernateWorkflowEntry where Id=&amp;quot;<br />&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;+ wfIdList.get(i)).get(0);</font></td></tr></tbody></table></p><p><strong>com.opensymphony.workflow.util</strong> <br />该包是 OSWorkflow 的工具包，包括了对 BeanShell、BSF、EJB Local、EJB Remote、JNDI 的支持。</p><p /><p /><p><font size="3"><strong>小 结</strong></font></p><p>&amp;nbsp;&amp;nbsp;&amp;nbsp; 由于本人所在公司希望在 OA 系统中引入工作流引擎，经过分析决定采用 OSWorkflow 引擎。利用 OSWorkflow，已经在系统中实现了请假条流程原型，该流程结合 OA 系统中已有的 RBAC 模型进行逐级审核。我个人认为要用 OSWorkflow 让某个流程跑起来似乎很麻烦，主要是需要扩展和自己实现的太多。<br />&amp;nbsp;&amp;nbsp;&amp;nbsp; <br />&amp;nbsp;&amp;nbsp;&amp;nbsp; 另外，引用一段 Quake Wang 的原话：电子政务/OA 如果要使用workflow engine的话，shark，jbpm 之类的workflow engine有点杀鸡用牛刀的味道。shark 和 jbpm 都强迫你使用它的用户模型，怎样把企业现有的用户模型（包括组织结构）映射过来是很繁琐的事情，比如常见的 OA 应用中，申请者对应的部门负责人为下一个流程的人工参与者，使用 shark 或者 jbpm 都得绕一圈，通过现有的人力资源系统，获得用户，再对应过来。这还仅仅是一个简单的需求，更不用说国内企业千奇百怪的组织结构，以及各种特殊流程，用 wfmc 或者其他所谓的 workflow 通用标准去做不怎么标准的事情。吃力不讨好。用 osworkflow 这种基于状态机的 workflow engine 反而会轻松很多，而且它也没有强迫你使用它的用户模型。另外纠正一点：osworkflow 不仅仅支持简单的 BeanShell，还支持 java class，bsf，ejb。如果做电子政务/OA 的话，觉得目前 osworkflow 是最适用的 opensource workflow engine。<br /><br /><br /><strong><font color="#ff0000" size="2">请注意！引用、转贴本文应注明原作者：Rosen Jiang 以及出处：</font></strong><a href="http://www.blogjava.net/rosen"><strong><font color="#ff0000" size="2">http://www.blogjava.net/rosen</font></strong></a></p></div>]]></description> 
<dc:subject><![CDATA[框架/库]]></dc:subject> 
<dc:creator><![CDATA[dozb]]></dc:creator> 
<dc:date>2006-05-05T15:48:34Z</dc:date> 
</item> 
<item rdf:about="http://dozb.bokee.com/4767885.html"> 
<title><![CDATA[vi使用手册(zt) ]]></title> 
<link>http://dozb.bokee.com/4767885.html</link> 
<description><![CDATA[<h2><a id="viewpost1_TitleUrl" href="http://sunsonbaby.cnblogs.com/archive/2004/08/26/36680.html">vi使用手册(zt)</a> </h2><div class="postbody">进入vi的命令<br />vi filename :打开或新建文件，并将光标置于第一行首<br />vi +n filename ：打开文件，并将光标置于第n行首<br />vi + filename ：打开文件，并将光标置于最后一行首<br />vi +/pattern filename：打开文件，并将光标置于第一个与pattern匹配的串处<br />vi -r filename ：在上次正用vi编辑时发生系统崩溃，恢复filename<br />vi filename....filename ：打开多个文件，依次编辑<br /><br />移动光标类命令<br />h ：光标左移一个字符<br />l ：光标右移一个字符<br />space：光标右移一个字符<br />Backspace：光标左移一个字符<br />k或Ctrl+p：光标上移一行<br />j或Ctrl+n ：光标下移一行<br />Enter ：光标下移一行<br />w或W ：光标右移一个字至字首<br />b或B ：光标左移一个字至字首<br />e或E ：光标右移一个字j至字尾<br />) ：光标移至句尾<br />( ：光标移至句首<br />}：光标移至段落开头<br />{：光标移至段落结尾<br />nG：光标移至第n行首<br />n+：光标下移n行<br />n-：光标上移n行<br />n$：光标移至第n行尾<br />H ：光标移至屏幕顶行<br />M ：光标移至屏幕中间行<br />L ：光标移至屏幕最后行<br />0：（注意是数字零）光标移至当前行首<br />$：光标移至当前行尾<br /><br />屏幕翻滚类命令<br />Ctrl+u：向文件首翻半屏<br />Ctrl+d：向文件尾翻半屏<br />Ctrl+f：向文件尾翻一屏<br />Ctrl＋b；向文件首翻一屏<br />nz：将第n行滚至屏幕顶部，不指定n时将当前行滚至屏幕顶部。<br /><br />插入文本类命令<br />i ：在光标前<br />I ：在当前行首<br />a：光标后<br />A：在当前行尾<br />o：在当前行之下新开一行<br />O：在当前行之上新开一行<br />r：替换当前字符<br />R：替换当前字符及其后的字符，直至按ESC键<br />s：从当前光标位置处开始，以输入的文本替代指定数目的字符<br />S：删除指定数目的行，并以所输入文本代替之<br />ncw或nCW：修改指定数目的字<br />nCC：修改指定数目的行<br /><br />删除命令<br />ndw或ndW：删除光标处开始及其后的n-1个字<br />do：删至行首<br />d$：删至行尾<br />ndd：删除当前行及其后n-1行<br />x或X：删除一个字符，x删除光标后的，而X删除光标前的<br />Ctrl+u：删除输入方式下所输入的文本<br /><br />搜索及替换命令 :<br />/pattern：从光标开始处向文件尾搜索pattern<br />?pattern：从光标开始处向文件首搜索pattern<br />n：在同一方向重复上一次搜索命令<br />N：在反方向上重复上一次搜索命令<br />：s/p1/p2/g：将当前行中所有p1均用p2替代<br />：n1,n2s/p1/p2/g：将第n1至n2行中所有p1均用p2替代<br />：g/p1/s//p2/g：将文件中所有p1均用p2替换<br /><br />选项设置<br />all：列出所有选项设置情况<br />term：设置终端类型<br />ignorance：在搜索中忽略大小写<br />list：显示制表位(Ctrl+I)和行尾标志（$)<br />number：显示行号<br />report：显示由面向行的命令修改过的数目<br />terse：显示简短的警告信息<br />warn：在转到别的文件时若没保存当前文件则显示NO write信息<br />nomagic：允许在搜索模式中，使用前面不带“\”的特殊字符<br />nowrapscan：禁止vi在搜索到达文件两端时，又从另一端开始<br />mesg：允许vi显示其他用户用write写到自己终端上的信息<br /><br />最后行方式命令<br />：n1,n2 co n3：将n1行到n2行之间的内容拷贝到第n3行下<br />：n1,n2 m n3：将n1行到n2行之间的内容移至到第n3行下<br />：n1,n2 d ：将n1行到n2行之间的内容删除<br />：w ：保存当前文件<br />：e filename：打开文件filename进行编辑<br />：x：保存当前文件并退出<br />：q：退出vi<br />：q!：不保存文件并退出vi<br />：!command：执行shell命令command<br />：n1,n2 w!command：将文件中n1行至n2行的内容作为command的输入并执行之，若不指<br />定n1，n2，则表示将整个文件内容作为command的输入<br />：r!command：将命令command的输出结果放到当前行 。<br /></div>]]></description> 
<dc:subject><![CDATA[框架/库]]></dc:subject> 
<dc:creator><![CDATA[dozb]]></dc:creator> 
<dc:date>2006-03-30T11:41:21Z</dc:date> 
</item> 
<item rdf:about="http://dozb.bokee.com/4660204.html"> 
<title><![CDATA[ 昨天芊芊出乳牙了]]></title> 
<link>http://dozb.bokee.com/4660204.html</link> 
<description><![CDATA[芊芊先出上面两颗牙，呵呵。 ]]></description> 
<dc:subject><![CDATA[芊芊]]></dc:subject> 
<dc:creator><![CDATA[dozb]]></dc:creator> 
<dc:date>2006-03-14T17:05:23Z</dc:date> 
</item> 
<item rdf:about="http://dozb.bokee.com/4545628.html"> 
<title><![CDATA[USB/COM 转换器使用经验谈]]></title> 
<link>http://dozb.bokee.com/4545628.html</link> 
<description><![CDATA[<div style="WIDTH: 99%"><div style="FLOAT: left; WIDTH: 99%"><div style="WORD-SPACING: 0.2em; LINE-HEIGHT: 15pt">&amp;nbsp;&amp;nbsp;&amp;nbsp; 笔记本上淘汰串口已是大势趋，而使用串口的工控设备仍将长期存在，所以对工控一族来说，几乎都会接触 USB/COM 转换器。到各大工控论坛转转，很多人反应 USB/COM 转换器不好用，经常出现无法连接设备、只能单向连接、连接不稳定、电脑死机等现象，不少朋友为此到处发帖询问有哪些内置串口的笔记本。<br />&amp;nbsp;&amp;nbsp;&amp;nbsp; 总结一下我使用该类转换器的经验，希望对有此类困扰的朋友有所帮助。</div><div style="WORD-SPACING: 0.2em; LINE-HEIGHT: 15pt">一、选购<br />&amp;nbsp;&amp;nbsp;&amp;nbsp; 目前市场上能买到的 USB/COM 转换器很杂，兼容性有好有坏，价格也是从二三十元到百多元不等。建议大家不要买那种三五十元的大路货，这种小产品不是很贵，你一个项目的差旅费都够你去做代理商了，没有必要为了节约几十块钱给自己留一大堆兼容性问题，所以选购时一定不要为JS的花言巧语所动。<br />&amp;nbsp;&amp;nbsp;&amp;nbsp; 我所知的以 prolific 芯片的兼容较好(还有其它几款也不错，但我没有亲自使用过，没有发言权，不敢妄言)，我正在使用的转换器就是基于 prolific 芯片的，二年前买的，120元，带驱动光盘(小盘)。用它连接过PLC、触摸屏、手机、很老的掌上电脑、已成古董的串口键鼠、包括用 232/485 做二次转换连接各种变频器，从没有碰到过不正常的现象，就跟内置串口一样好用。</div><p style="WORD-SPACING: 0.2em; LINE-HEIGHT: 15pt" align="center"><img style="WIDTH: 160px; HEIGHT: 120px" height="120" src="http://storage.msn.com/x1pNWjjkHJ3o_yMAfscFZi53PZoJaMEOnkZouXsef9fNCi0t6Xry4R1hQ3dfz4C7gLzhkf9hXFx7peVMj8L_CGThooYfiBATv-EoKZLL_vLf59pObbzNPjHPfrYs2Xkp0C-kqJxgYvE_14" width="160" /></p><div style="WORD-SPACING: 0.2em; LINE-HEIGHT: 15pt">二、安装<br />&amp;nbsp;&amp;nbsp;&amp;nbsp; 选了一块兼容性好的转换器，装完驱动后还有个重要的步骤就是确定端口<br />&amp;nbsp;&amp;nbsp;&amp;nbsp; 首先要确定使用串口的工控软件支持哪些串口(大多数只能用COM1/COM2)，转换器安装后默认使用的一般是COM3/COM4，此时需要修改端口。将转换器插在USB口，打开设备管理器，打开虚拟出来的串口(不插转换器时是看不到的)的属性对话框，在高级设置中将端口改成COM1或COM2，通用性好一些，如果你的软件支持COM3/COM4也可以不改。改好后扫描一下硬件改变，不需重启机器(我的系统是XP，其它系统没测试过)，再打开串口属性可以看到端口已改变。<br />&amp;nbsp;&amp;nbsp;&amp;nbsp; 在此属性对话框中适当增加收发缓冲区大小，可以提高通讯速度，我一般设为10-14字节。如果遇到稳定性问题，试着将缓冲区改为1字节(虽然我没遇到过)。</div><div style="WORD-SPACING: 0.2em; LINE-HEIGHT: 15pt">三、设置通讯参数<br />&amp;nbsp;&amp;nbsp;&amp;nbsp; 有了一个具体的连接需求后，先在控制软件中选择串口为上一步所设定的串口号。然后设置波特率、数据位、停止位、校验位等参数，需要在三个地方保持参数一致：设备管理器、控制软件、被连接设备。<br />&amp;nbsp;&amp;nbsp;&amp;nbsp; 很多连接失败的朋友就是因为忽略了设备管理器中的通讯参数设置。</div><div style="WORD-SPACING: 0.2em; LINE-HEIGHT: 15pt">四、USB/COM串口的特点<br />1、可以“带电拔插”<br />&amp;nbsp;&amp;nbsp;&amp;nbsp; 之所以要打上引号，指的是每次拔插时是先从电脑上拔下USB转换器，再将串口设备从转换器上拔下，而不是直接在带电状态下将连接的串口设备拔下(此时对串口实际上是单端带电拔插)。<br />&amp;nbsp;&amp;nbsp;&amp;nbsp; 真实的串口能否带电拔两方面我都没有看到过明确的规定，虽然大多数时候直接拔插不会有问题，但说不定哪一次你的主板就报废了。我们做工控的应该有安全意识，没有明确说明可以直接拔插的就不要直接拔插，坏一块主板事小，要是哪次在现场坏了台关键设备，误事就大了，到时可别怪我没提醒啊。<br />&amp;nbsp;&amp;nbsp;&amp;nbsp; 另外关于USB的带电拔插也不是任意的，只能在通讯空闲的时候拔插。比如 U 盘在读写数据的时候拔插是极易损坏的。<br />2、可以同时使用多个串口<br />&amp;nbsp;&amp;nbsp;&amp;nbsp; 在每个USB上插上转换器，安装驱动并设置不同的端口，就可以拥有多个串口了。也可以将一个转换器安装在不同的USB口并设置相同的端口号，但使用不同的配置，则可以快速改变串口参数。比如我在两个USB口安装驱动端口都设为COM2，一个9.6K波特、一个19.2K波特，要切换配置时只需要换一个USB口就行了。<br />&amp;nbsp;&amp;nbsp;&amp;nbsp; 如果没有注意这一特点，往往导致接失败，记住，插在不同的USB的串口是不一样的。</div><div style="WORD-SPACING: 0.2em; LINE-HEIGHT: 15pt">PS：<br />&amp;nbsp;&amp;nbsp;&amp;nbsp; 软件模拟的串口有很多优点，很多芯片兼容性做得也很好了，但也不是与真实串口完全一样了，比如软件串口没有硬件中断。</div></div></div><p>来源：醉书生札记</p><p><a href="http://spaces.msn.com/tuxw/Blog/cns!1p1KRL2snDHMdTagFMfJCgKg!1341.entry">http://spaces.msn.com/tuxw/Blog/cns!1p1KRL2snDHMdTagFMfJCgKg!1341.entry</a></p>]]></description> 
<dc:subject><![CDATA[生活]]></dc:subject> 
<dc:creator><![CDATA[dozb]]></dc:creator> 
<dc:date>2006-02-26T17:56:45Z</dc:date> 
</item> 
<item rdf:about="http://dozb.bokee.com/4525927.html"> 
<title><![CDATA[『Boost』关于bind的一个用法]]></title> 
<link>http://dozb.bokee.com/4525927.html</link> 
<description><![CDATA[<div class="username">zealotcat</div><div class="date">2005-04-06, 14:06</div><div class="posttext">bind的文档里有这样一个例子:<br />&amp;gt;&amp;gt;&amp;gt;&amp;gt;<br />请注意，第一个参数——被绑定的函数对象——并不被求值，即使它是一个bind生成的函数对象或者一个占位符，所以下面的例子并<br /><br />不能像预期的那样工作：<br /><br />typedef void (*pf)(int); <br />std::vector v; <br />std::for_each(v.begin(), v.end(), bind(_1, 5)); <br />可一个用以的辅助函数对象apply达到目的。apply将它的第一个参数当作一个函数对象，然后将参数表中的其它参数传递给它，<br /><br />出于方便起见，在boost/bind/apply.hpp中包含了一个apply的实现。下面是前一个例子修改后的版本：<br /><br />typedef void (*pf)(int); <br />std::vector v; <br />std::for_each(v.begin(), v.end(), bind(apply(), _1, 5)); <br />&amp;lt;&amp;lt;&amp;lt;这里的apply到底是作什么用的?</div><hr /><div class="post"><div class="posttop"><div class="username">dearvoid</div><div class="date">2005-04-06, 15:17</div></div><div class="posttext">看样子 apply() 是个 function object</div></div><hr /><div class="post"><div class="posttop"><div class="username">dearvoid</div><div class="date">2005-04-06, 18:28</div></div><div class="posttext">bind 用法示例:<br /><br />#include &amp;lt;iostream&amp;gt;<br />#include &amp;lt;algorithm&amp;gt;<br />#include &amp;lt;boost/bind.hpp&amp;gt;<br /><br />using namespace std;<br /><br />void print_sum(int a, int b)<br />{<br />cout &amp;lt;&amp;lt; (a + b) &amp;lt;&amp;lt; endl;<br />}<br /><br />int main()<br />{<br />int arr[4] = { 11, 22, 33, 44 };<br /><br />for_each(arr, arr + 4, boost::bind(print_sum, _1, 100));<br />}</div></div><hr /><div class="post"><div class="posttop"><div class="username">dearvoid</div><div class="date">2005-04-06, 18:30</div></div><div class="posttext">编译、运行结果：<br />[foo@bar tmp] $ gxx foo.cc -I/usr/local/boost_1_32_0/include/boost-1_32/<br />[foo@bar tmp] $ ./a.out<br />111<br />122<br />133<br />144<br />[foo@bar tmp] $</div></div><hr /><div class="post"><div class="posttop"><div class="username">dearvoid</div><div class="date">2005-04-06, 18:33</div></div><div class="posttext">第一次用 boost，感觉还不错 :)</div></div>]]></description> 
<dc:subject><![CDATA[框架/库]]></dc:subject> 
<dc:creator><![CDATA[dozb]]></dc:creator> 
<dc:date>2006-02-24T11:54:09Z</dc:date> 
</item> 
<item rdf:about="http://dozb.bokee.com/4425608.html"> 
<title><![CDATA[DWR让AJAX如此简单]]></title> 
<link>http://dozb.bokee.com/4425608.html</link> 
<description><![CDATA[<center><b><span style="FONT-SIZE: 20px">DWR让AJAX如此简单</span></b></center><br /><center>利用DWR开始在你的Web应用中使用AJAX</center><br /><center>作者：Cloves Carneiro</center><br /><center>译者:<a href="http://www.matrix.org.cn/user.shtml?username=simmone" target="_new">simmone</a></center><br /><br /><span style="COLOR: red">版权声明：任何获得Matrix授权的网站，转载时请务必以超链接形式标明文章原始出处和作者信息及本声明</span><br />作者:Cloves Carneiro;<a href="http://www.matrix.org.cn/user.shtml?username=simmone" target="_new">simmone</a><br />原文地址:<a href="http://www.javaworld.com/javaworld/jw-06-2005/jw-0620-dwr.html" target="_new">http://www.javaworld.com/javaworld/jw-06-2005/jw-0620-dwr.html</a><br />中文地址:<a href="http://www.matrix.org.cn/resource/article/43/43926_DWR_AJAX.html" target="_new">http://www.matrix.org.cn/resource/article/43/43926_DWR_AJAX.html</a><br />关键词： DWR AJAX<br /><br /><br /><b><span style="FONT-SIZE: 16px">概述</span></b><br /><br />这篇文章阐述了使用开源项目DWR(直接Web远程控制)和AJAX(异步JavaScript和XML)的概念来提高Web应用的可用性。作者一步步来展示DWR如何使得AJAX的应用既简单又快捷。（1600字;2005年6月20日） <br /><br />AJAX，或者说是异步JavaScript和XML，描述了一种使用混合了HTML(或XHTML)和层叠样式表作为表达信息,来创建交互式的Web应用的开发技术;文档对象模型（DOM），JavaScript,动态地显示和与表达信息进行交互;并且，XMLHttpRequest对象与Web服务器异步地交换和处理数据。<br /><br />因特网上许多例子展示了在一个HTML文件内部使用XMLHttpRequest与服务器端进行交互的必要的步骤。当手工地编写和维护XMLHttpRequest代码时，开发者必须处理许多潜在的问题，特别是类似于跨浏览器的DOM实现的兼容性这样的问题。这将会导致在编码和调试Javascript代码上面花费数不清的时间，这显然对开发者来说很不友好。<br /><br />DWR(直接Web远程控制)项目是在Apache许可下的一个开源的解决方案，它供给那些想要以一种简单的方式使用AJAX和XMLHttpRequest的开发者。它具有一套Javascript功能集，它们把从HTML页面调用应用服务器上的Java对象的方法简化了。它操控不同类型的参数，并同时保持了HTML代码的可读性。<br /><br />DWR不是对一个设计的插入，也不强迫对象使用任何种类的继承结构。它和servlet框架内的应用配合的很好。对缺少DHTML编程经验的开发者来说，DWR也提供了一个JavaScript库包含了经常使用的DHTML任务，如组装表，用item填充select下拉框，改变HTML元素的内容，如&amp;lt;div&amp;gt;和&amp;lt;span&amp;gt;<br />DWR网站是详尽的并且有大量的文档，这也是这篇文章的基础。一些例子用来展示DWR如何使用和用它的库可以完成什么样的工作。<br /><br />这篇文章让读者看到了一个使用了DWR的Web应用是如何一步步建立的。我会展示创建这个简单的示例应用的必要的细节，这个应用是可下载的并且可以在你的环境中布署来看看DWR如何工作。<br />注意：找到有关AJAX的信息并不困难;网页上有几篇文章和博客的条目涵盖了这个主题，每一个都试图指出和评论这个概念的不同的方面。在资源部分，你会找到一些有趣的指向示例和文章的链接，来学习AJAX的更多的内容。<br /><br /><b><span style="FONT-SIZE: 16px">示例应用</span></b><br />这篇文章使用的示例应用模拟了多伦多的一个公寓出租搜索引擎。用户可以在搜索前选择一组搜索标准。为了提高交互性，AJAX中以下两种情况下使用：<br />·应用通告用户配合他的选择会返回多少搜索结果。这个数字是实时更新的-使用AJAX-当用户选择的卧室和浴室的数量，或者价格范围变化时。当符合标准的搜索结果没有或太多时，用户就没有必要点击搜索按纽。<br />·数据库查询并取回结果是由AJAX完成的。当用户按下显示结果按钮时，数据库执行搜索。这样，应用看起来更具响应了，而整个页面不需要重载来显示结果。<br /><br /><b><span style="FONT-SIZE: 16px">数据库</span></b><br />我们使用的数据库是HSQL，它是一种占用资源很小的Java SQL数据库引擎，可以不需要安装和配置的与Web应用捆绑在一起。一个SQL文件被用来在Web应用的上下文启动时创建一个内存中的表并添加一些记录。<br /><br /><b><span style="FONT-SIZE: 16px">Java类</span></b><br />应用包含了两个主要的类叫Apartment和ApartmentDAO。Apartment.java类是一个有着属性和getter/setter方法的简单的Java类。ApartmentDAO.java是数据访问类，用来查询数据库并基于用户的搜索标准来返回信息。ApartmentDAO类的实现的直接了当的;它直接使用了Java数据库联接调用来得到公寓的总数和符合用户请求的可用公寓的列表。<br /><br /><b><span style="FONT-SIZE: 16px">DWR配置和使用</span></b><br />设置DWR的使用是简单的：将DWR的jar文件拷入Web应用的WEB-INF/lib目录中，在web.xml中增加一个servlet声明，并创建DWR的配置文件。DWR的分发中需要使用一个单独的jar文件。你必须将DWR servlet加到应用的WEB-INF/web.xml中布署描述段中去。<br /><pre class="overflow">&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;servlet&amp;gt;<br />&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;servlet-name&amp;gt;dwr-invoker&amp;lt;/servlet-name&amp;gt;<br />&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;display-name&amp;gt;DWR Servlet&amp;lt;/display-name&amp;gt;<br />&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;description&amp;gt;Direct Web Remoter Servlet&amp;lt;/description&amp;gt;<br />&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;servlet-class&amp;gt;uk.ltd.getahead.dwr.DWRServlet&amp;lt;/servlet-class&amp;gt;<br />&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;init-param&amp;gt;<br />&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;param-name&amp;gt;debug&amp;lt;/param-name&amp;gt;<br />&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;param-value&amp;gt;true&amp;lt;/param-value&amp;gt;<br />&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/init-param&amp;gt;<br />&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/servlet&amp;gt;<br /><br />&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;servlet-mapping&amp;gt;<br />&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;servlet-name&amp;gt;dwr-invoker&amp;lt;/servlet-name&amp;gt;<br />&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;url-pattern&amp;gt;/dwr/*&amp;lt;/url-pattern&amp;gt;<br />&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/servlet-mapping&amp;gt;</pre><br /><br />一个可选的步骤是设置DWR为调试模式—象上面的例子那样—在servlet描述段中将debug参数设为true。当DWR在调试模式时，你可以从HTMl网页中看到所有的可访问的Java对象。包含了可用对象列表的网页会出现在/WEBAPP/dwr这个url上，它显示了对象的公共方法。所列方法可以从页面中调用，允许你，第一次，运行服务器上的对象的方法。下图显示了调试页的样子:<br /><br /><img onmouseover="function anonymous()
{
imgShowTip(this);
}" style="DISPLAY: inline" onclick="function anonymous()
{
imgClick(this);
}" alt="image" src="http://www.matrix.org.cn/resource/upload/forum/2005_11_07_000336_lrylCwRMxo.jpg" onload="function anonymous()
{
imgLoad(this);
}" border="0" resized="0" /><br />调试页<br /><br />现在你必须让DWR知道通过XMLHttpRequest对象，什么对象将会接收请求。这个任务由叫做dwr.xml的配置文件来完成。在配置文件中，定义了DWR允许你从网页中调用的对象。从设计上讲，DWR允许访问所有公布类的公共方法，但在我们的例子中，我们只允许访问几个方法。下面是我们示例的配置文件:<br /><pre class="overflow">&amp;lt;dwr&amp;gt;<br />&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;allow&amp;gt;<br />&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;convert converter=&amp;quot;bean&amp;quot; match=&amp;quot;dwr.sample.Apartment&amp;quot;/&amp;gt;<br />&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;create creator=&amp;quot;new&amp;quot; javascript=&amp;quot;ApartmentDAO&amp;quot; class=&amp;quot;dwr.sample.ApartmentDAO&amp;quot;&amp;gt;<br />&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;include method=&amp;quot;findApartments&amp;quot;/&amp;gt;<br />&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;include method=&amp;quot;countApartments&amp;quot;/&amp;gt;<br />&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/create&amp;gt;<br />&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/allow&amp;gt;<br />&amp;lt;/dwr&amp;gt;</pre><br /><br />上面的文件实现了我们例子中的两个目标。首先，&amp;lt;convert&amp;gt;标记告诉DWR将dwr.sample.Apartment对象的类型转换为联合数组，因为，出于安全的原因，DWR默认的不会转换普通bean。第二，&amp;lt;create&amp;gt;标记让DWR暴露出dwr.sample.ApartmentDAO类给JavaScript调用;我们在页面中使用JavaScript文件被javascript属性定义。我们必须注意&amp;lt;include&amp;gt;标记，它指明了dwr.sample.ApartmentDAO类的哪些方法可用。<br /><br /><b><span style="FONT-SIZE: 16px">HTML/JSP代码</span></b><br />配置完成后，你就可以启动你的Web应用了，这时DWR会为从你的HTML或Java服务器端页面(JSP)上调用所需方法作好准备，并不需要你创建JavaScript文件。在search.jsp文件中， 我们必须增加由DWR提供的JavaScript接口，还有DWR引擎，加入以下三行到我们的代码中：<br /><br /><pre class="overflow">&amp;nbsp;&amp;nbsp;&amp;lt;script src='dwr/interface/ApartmentDAO.js'&amp;gt;&amp;lt;/script&amp;gt;<br />&amp;nbsp;&amp;nbsp;&amp;lt;script src='dwr/engine.js'&amp;gt;&amp;lt;/script&amp;gt;<br />&amp;nbsp;&amp;nbsp;&amp;lt;script src='dwr/util.js'&amp;gt;&amp;lt;/script&amp;gt;</pre><br /><br />我们注意到当用户改变搜索标准时，这是AJAX在示例程序中的首次应用;正如他所看到的，当标准改变时，可用的公寓数量被更新了。我创建了两个JavaScript函数：当某一个选择下拉框中的值变化时被调用。ApartmentDAO.countApartments()函数是最重要的部分。最有趣的是第一个参数, loadTotal()函数，它指明了当接收到服务端的返回时DWR将会调用的JavaScript方法。loadTotal于是被调用来在HTML页面的&amp;lt;div&amp;gt;中显示结果。下面是在这个交互场景中所使用到的JavaScript函数:<br /><br /><pre class="overflow">function updateTotal() {<br />&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;$(&amp;quot;resultTable&amp;quot;).style.display = 'none';<br />&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;var bedrooms = document.getElementById(&amp;quot;bedrooms&amp;quot;).value;<br />&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;var bathrooms = document.getElementById(&amp;quot;bathrooms&amp;quot;).value;<br />&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;var price = document.getElementById(&amp;quot;price&amp;quot;).value;<br />&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;ApartmentDAO.countApartments(loadTotal, bedrooms, bathrooms, price);<br />}<br /><br />function loadTotal(data) {<br />&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;document.getElementById(&amp;quot;totalRecords&amp;quot;).innerHTML = data;<br />}</pre><br /><br />很明显，用户想看到符合他的搜索条件的公寓列表。那么，当用户对他的搜索标准感到满意，并且总数也是有效的话，他会按下显示结果的按纽，这将会调用updateResults() JavaScript方法：<br /><br /><pre class="overflow">function updateResults() {<br />&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;<br />&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;DWRUtil.removeAllRows(&amp;quot;apartmentsbody&amp;quot;);<br />&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;var bedrooms = document.getElementById(&amp;quot;bedrooms&amp;quot;).value;<br />&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;var bathrooms = document.getElementById(&amp;quot;bathrooms&amp;quot;).value;<br />&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;var price = document.getElementById(&amp;quot;price&amp;quot;).value;<br />&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;ApartmentDAO.findApartments(fillTable, bedrooms, bathrooms, price);<br />&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;$(&amp;quot;resultTable&amp;quot;).style.display = '';<br />}<br /><br />function fillTable(apartment) {<br />&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;DWRUtil.addRows(&amp;quot;apartmentsbody&amp;quot;, apartment, [ getId, getAddress, getBedrooms, getBathrooms, getPrice ]);<br />}</pre><br /><br />updateResults()方法清空了存放搜索返回结果的表域，从用户界面上获取所需参数，并且将这些参数传给DWR创建的ApartmentDAO对象。然后数据库查询将被执行，fillTable()将会被调用，它解析了DWR返回的对象(apartment)，然后将其显示到页面中(apartmentsbody)。<br /><br /><b><span style="FONT-SIZE: 16px">安全因素</span></b><br />为了保持示例的简要，ApartmentDAO类尽可能的保持简单，但这样的一个类通常有一组设置方法来操作数据，如insert(), update()和delete()。DWR暴露了所有公共方法给所有的HTML页面调用。出于安全的原因，像这样暴露你的数据访问层是不明智的。开发者可以创建一个门面来集中所有JavaScript函数与底层业务组件之间的通信，这样就限制了过多暴露的功能。<br /><br /><b><span style="FONT-SIZE: 16px">结论</span></b><br />这篇文章仅仅让你在你的项目中使用由DWR支持的AJAX开了个头。DWR让你集中注意力在如何提高你的应用的交互模型上面，消除了编写和调试JavaScript代码的负担。使用AJAX最有趣的挑战是定义在哪里和如何提高可用性。DWR负责了操作Web页面与你的Java对象之间的通信，这样就帮助你完全集中注意力在如何让你的应用的用户界面更加友好，<br />我想感谢Mircea Oancea和Marcos Pereira,他们阅读了这篇文章并给予了非常有价值的返匮。<br /><br /><b>资源</b><br />·javaworld.com:<a href="http://www.javaworld.com/" target="_new">javaworld.com</a><br />·Matrix-Java开发者社区:<a href="http://www.matrix.org.cn/" target="_new">http://www.matrix.org.cn/</a><br />·onjava.com:<a href="http://www.onjava.com/" target="_new">onjava.com</a><br />·下载示例程序的全部源码:<a href="http://www.javaworld.com/javaworld/jw-06-2005/dwr/jw-0620-dwr.war" target="_new">http://www.javaworld.com/javaworld/jw-06-2005/dwr/jw-0620-dwr.war</a><br />·DWR: http://www.getahead.ltd.uk/dwr/index.html<br />·HSQL:http://hsqldb.sourceforge.net/<br />·AJAX的定义:http://en.wikipedia.org/wiki/AJAX<br />· “AJAX:通向Web应用的新途径&amp;quot;: Jesse James Garrett (Adaptive Path, 2005.2): http://www.adaptivepath.com/publications/essays/archives/000385.php<br />· “非常动态的Web界面” Drew McLellan (xml.com, 2005.2): http://www.xml.com/pub/a/2005/02/09/xml-http-request.html<br />·XMLHttpRequest &amp;amp; AJAX 工作范例: http://www.fiftyfoureleven.com/resources/programming/xmlhttprequest/examples<br />· “可用的XMLHttpRequest实践” Thomas Baekdal (Baekdal.com, 2005.3): http://www.baekdal.com/articles/Usability/usable-XMLHttpRequest/<br />·&amp;quot;XMLHttpRequest使用导引&amp;quot; Thomas Baekdal (Baekdal.com,&amp;nbsp;&amp;nbsp;2005.2):http://www.baekdal.com/articles/Usability/XMLHttpRequest-guidelines/<br />·AJAX实质:http://www.ajaxmatters.com/<br /><br />]]></description> 
<dc:subject><![CDATA[Web]]></dc:subject> 
<dc:creator><![CDATA[dozb]]></dc:creator> 
<dc:date>2006-02-10T23:27:57Z</dc:date> 
</item> 
<item rdf:about="http://dozb.bokee.com/4386711.html"> 
<title><![CDATA[邻家的小心心]]></title> 
<link>http://dozb.bokee.com/4386711.html</link> 
<description><![CDATA[<img alt=" " src="http://dozb.bokee.com/inc/xinxin.jpg" onload="javascript: img_auto_size(this,450,true);" align="baseline" />]]></description> 
<dc:subject><![CDATA[芊芊]]></dc:subject> 
<dc:creator><![CDATA[dozb]]></dc:creator> 
<dc:date>2006-02-06T12:44:35Z</dc:date> 
</item> 
<item rdf:about="http://dozb.bokee.com/4355276.html"> 
<title><![CDATA[芊芊06年春节前留念]]></title> 
<link>http://dozb.bokee.com/4355276.html</link> 
<description><![CDATA[<p><img height="750" src="http://dozb.bokee.com/inc/qq_before06.jpg" width="1000" border="0" /></p>]]></description> 
<dc:subject><![CDATA[芊芊]]></dc:subject> 
<dc:creator><![CDATA[dozb]]></dc:creator> 
<dc:date>2006-02-02T19:09:05Z</dc:date> 
</item> 
<item rdf:about="http://dozb.bokee.com/4353560.html"> 
<title><![CDATA[消息队列（Message Queue）简介及其使用]]></title> 
<link>http://dozb.bokee.com/4353560.html</link> 
<description><![CDATA[<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: center" align="center"><b><span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-bidi-font-size: 12.0pt; mso-fareast-language: ZH-CN">消息队列（</span></b><b><span lang="EN" style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana; mso-bidi-font-size: 12.0pt; mso-fareast-language: ZH-CN">Message Queue</span></b><b><span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-bidi-font-size: 12.0pt; mso-fareast-language: ZH-CN">）简介及其使用</span></b><b><span lang="EN" style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana; mso-bidi-font-size: 12.0pt; mso-fareast-language: ZH-CN"><p /></span></b></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN" style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana; mso-bidi-font-size: 12.0pt; mso-fareast-language: ZH-CN"><p>&amp;nbsp;</p></span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN" style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana; mso-bidi-font-size: 12.0pt; mso-fareast-language: ZH-CN"><p>&amp;nbsp;</p></span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 18pt"><span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-bidi-font-size: 12.0pt; mso-fareast-language: ZH-CN">利用</span><span style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana; mso-bidi-font-size: 12.0pt; mso-fareast-language: ZH-CN"> <span lang="EN">MSMQ</span></span><span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-bidi-font-size: 12.0pt; mso-fareast-language: ZH-CN">（</span><span lang="EN" style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana; mso-bidi-font-size: 12.0pt; mso-fareast-language: ZH-CN">Microsoft Message Queue</span><span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-bidi-font-size: 12.0pt; mso-fareast-language: ZH-CN">），应用程序开发人员可以通过发送和接收消息方便地与应用程序进行快速可靠的通信。消息处理为您提供了有保障的消息传递和执行许多业务处理的可靠的防故障方法。</span><span lang="EN" style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana; mso-bidi-font-size: 12.0pt; mso-fareast-language: ZH-CN"><p /></span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 18pt"><span lang="EN" style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana; mso-bidi-font-size: 12.0pt; mso-fareast-language: ZH-CN">MSMQ</span><span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-bidi-font-size: 12.0pt; mso-fareast-language: ZH-CN">与</span><span lang="EN" style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana; mso-bidi-font-size: 12.0pt; mso-fareast-language: ZH-CN">XML Web Services</span><span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-bidi-font-size: 12.0pt; mso-fareast-language: ZH-CN">和</span><span lang="EN" style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana; mso-bidi-font-size: 12.0pt; mso-fareast-language: ZH-CN">.Net Remoting</span><span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-bidi-font-size: 12.0pt; mso-fareast-language: ZH-CN">一样，是一种分布式开发技术。但是在使用</span><span lang="EN" style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana; mso-bidi-font-size: 12.0pt; mso-fareast-language: ZH-CN">XML Web Services</span><span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-bidi-font-size: 12.0pt; mso-fareast-language: ZH-CN">或</span><span lang="EN" style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana; mso-bidi-font-size: 12.0pt; mso-fareast-language: ZH-CN">.Net Remoting</span><span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-bidi-font-size: 12.0pt; mso-fareast-language: ZH-CN">组件时，</span><span lang="EN" style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana; mso-bidi-font-size: 12.0pt; mso-fareast-language: ZH-CN">Client</span><span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-bidi-font-size: 12.0pt; mso-fareast-language: ZH-CN">端需要和</span><span lang="EN" style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana; mso-bidi-font-size: 12.0pt; mso-fareast-language: ZH-CN">Server</span><span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-bidi-font-size: 12.0pt; mso-fareast-language: ZH-CN">端实时交换信息，</span><span lang="EN" style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana; mso-bidi-font-size: 12.0pt; mso-fareast-language: ZH-CN">Server</span><span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-bidi-font-size: 12.0pt; mso-fareast-language: ZH-CN">需要保持联机。</span><span lang="EN" style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana; mso-bidi-font-size: 12.0pt; mso-fareast-language: ZH-CN">MSMQ</span><span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-bidi-font-size: 12.0pt; mso-fareast-language: ZH-CN">则可以在</span><span lang="EN" style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana; mso-bidi-font-size: 12.0pt; mso-fareast-language: ZH-CN">Server</span><span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-bidi-font-size: 12.0pt; mso-fareast-language: ZH-CN">离线的情况下工作，将</span><span lang="EN" style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana; mso-bidi-font-size: 12.0pt; mso-fareast-language: ZH-CN">Message</span><span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-bidi-font-size: 12.0pt; mso-fareast-language: ZH-CN">临时保存在</span><span lang="EN" style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana; mso-bidi-font-size: 12.0pt; mso-fareast-language: ZH-CN">Client</span><span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-bidi-font-size: 12.0pt; mso-fareast-language: ZH-CN">端的消息队列中，以后联机时再发送到</span><span lang="EN" style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana; mso-bidi-font-size: 12.0pt; mso-fareast-language: ZH-CN">Server</span><span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-bidi-font-size: 12.0pt; mso-fareast-language: ZH-CN">端处理。</span><span lang="EN" style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana; mso-bidi-font-size: 12.0pt; mso-fareast-language: ZH-CN"><p /></span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 18pt"><span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-bidi-font-size: 12.0pt; mso-fareast-language: ZH-CN">显然，</span><span lang="EN" style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana; mso-bidi-font-size: 12.0pt; mso-fareast-language: ZH-CN">MSMQ</span><span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-bidi-font-size: 12.0pt; mso-fareast-language: ZH-CN">不适合于</span><span lang="EN" style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana; mso-bidi-font-size: 12.0pt; mso-fareast-language: ZH-CN">Client</span><span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-bidi-font-size: 12.0pt; mso-fareast-language: ZH-CN">需要</span><span lang="EN" style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana; mso-bidi-font-size: 12.0pt; mso-fareast-language: ZH-CN">Server</span><span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-bidi-font-size: 12.0pt; mso-fareast-language: ZH-CN">端及时响应的这种情况，</span><span lang="EN" style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana; mso-bidi-font-size: 12.0pt; mso-fareast-language: ZH-CN">MSMQ</span><span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-bidi-font-size: 12.0pt; mso-fareast-language: ZH-CN">以异步的方式和</span><span lang="EN" style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana; mso-bidi-font-size: 12.0pt; mso-fareast-language: ZH-CN">Server</span><span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-bidi-font-size: 12.0pt; mso-fareast-language: ZH-CN">端交互，不用担心等待</span><span lang="EN" style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana; mso-bidi-font-size: 12.0pt; mso-fareast-language: ZH-CN">Server</span><span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-bidi-font-size: 12.0pt; mso-fareast-language: ZH-CN">端的长时间处理过程。</span><span lang="EN" style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana; mso-bidi-font-size: 12.0pt; mso-fareast-language: ZH-CN"><p /></span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 18pt"><span lang="EN" style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana; mso-bidi-font-size: 12.0pt; mso-fareast-language: ZH-CN"><p>&amp;nbsp;</p></span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 18pt"><span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-bidi-font-size: 12.0pt; mso-fareast-language: ZH-CN">虽然</span><span lang="EN" style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana; mso-bidi-font-size: 12.0pt; mso-fareast-language: ZH-CN">XML Web Services</span><span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-bidi-font-size: 12.0pt; mso-fareast-language: ZH-CN">和</span><span lang="EN" style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana; mso-bidi-font-size: 12.0pt; mso-fareast-language: ZH-CN">.Net Remoting</span><span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-bidi-font-size: 12.0pt; mso-fareast-language: ZH-CN">都提供了</span><span lang="EN" style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana; mso-bidi-font-size: 12.0pt; mso-fareast-language: ZH-CN">[OneWay]</span><span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-bidi-font-size: 12.0pt; mso-fareast-language: ZH-CN">属性来处理异步调用，用来解决</span><span lang="EN" style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana; mso-bidi-font-size: 12.0pt; mso-fareast-language: ZH-CN">Server</span><span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-bidi-font-size: 12.0pt; mso-fareast-language: ZH-CN">端长方法调用长时间阻碍</span><span lang="EN" style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana; mso-bidi-font-size: 12.0pt; mso-fareast-language: ZH-CN">Client</span><span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-bidi-font-size: 12.0pt; mso-fareast-language: ZH-CN">端。但是不能解决大量</span><span lang="EN" style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana; mso-bidi-font-size: 12.0pt; mso-fareast-language: ZH-CN">Client</span><span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-bidi-font-size: 12.0pt; mso-fareast-language: ZH-CN">负载的问题，此时</span><span lang="EN" style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana; mso-bidi-font-size: 12.0pt; mso-fareast-language: ZH-CN">Server</span><span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-bidi-font-size: 12.0pt; mso-fareast-language: ZH-CN">接受的请求快于处理请求。</span><span lang="EN" style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana; mso-bidi-font-size: 12.0pt; mso-fareast-language: ZH-CN"><p /></span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 18pt"><span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-bidi-font-size: 12.0pt; mso-fareast-language: ZH-CN">一般情况下，</span><span lang="EN" style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana; mso-bidi-font-size: 12.0pt; mso-fareast-language: ZH-CN">[OneWay]</span><span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-bidi-font-size: 12.0pt; mso-fareast-language: ZH-CN">属性不用于专门的消息服务中。</span><span lang="EN" style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana; mso-bidi-font-size: 12.0pt; mso-fareast-language: ZH-CN"><p /></span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN" style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana; mso-bidi-font-size: 12.0pt; mso-fareast-language: ZH-CN"><p>&amp;nbsp;</p></span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><b><span lang="EN" style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana; mso-bidi-font-size: 12.0pt; mso-fareast-language: ZH-CN">1. </span></b><b><span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-bidi-font-size: 12.0pt; mso-fareast-language: ZH-CN">基本术语和概念（</span></b><b><span lang="EN" style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana; mso-bidi-font-size: 12.0pt; mso-fareast-language: ZH-CN">Basic terms and concepts</span></b><b><span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-bidi-font-size: 12.0pt; mso-fareast-language: ZH-CN">）</span></b><b><span lang="EN" style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana; mso-bidi-font-size: 12.0pt; mso-fareast-language: ZH-CN"><p /></span></b></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-bidi-font-size: 12.0pt; mso-fareast-language: ZH-CN">“消息”是在两台计算机间传送的数据单位。消息可以非常简单，例如只包含文本字符串；也可以更复杂，可能包含嵌入对象。</span><span lang="EN" style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana; mso-bidi-font-size: 12.0pt; mso-fareast-language: ZH-CN"><p /></span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN" style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana; mso-bidi-font-size: 12.0pt; mso-fareast-language: ZH-CN"><p>&amp;nbsp;</p></span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-bidi-font-size: 12.0pt; mso-fareast-language: ZH-CN">消息被发送到队列中。“消息队列”是在消息的传输过程中保存消息的容器。消息队列管理器在将消息从它的源中继到它的目标时充当中间人。队列的主要目的是提供路由并保证消息的传递；如果发送消息时接收者不可用，消息队列会保留消息，直到可以成功地传递它。</span><span lang="EN" style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana; mso-bidi-font-size: 12.0pt; mso-fareast-language: ZH-CN"><p /></span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN" style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana; mso-bidi-font-size: 12.0pt; mso-fareast-language: ZH-CN"><p>&amp;nbsp;</p></span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-bidi-font-size: 12.0pt; mso-fareast-language: ZH-CN">“消息队列”是</span><span lang="EN" style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana; mso-bidi-font-size: 12.0pt; mso-fareast-language: ZH-CN"> Microsoft </span><span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-bidi-font-size: 12.0pt; mso-fareast-language: ZH-CN">的消息处理技术，它在任何安装了</span><span lang="EN" style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana; mso-bidi-font-size: 12.0pt; mso-fareast-language: ZH-CN"> Microsoft Windows </span><span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-bidi-font-size: 12.0pt; mso-fareast-language: ZH-CN">的计算机组合中，为任何应用程序提供消息处理和消息队列功能，无论这些计算机是否在同一个网络上或者是否同时联机。</span><span lang="EN" style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana; mso-bidi-font-size: 12.0pt; mso-fareast-language: ZH-CN"><p /></span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN" style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana; mso-bidi-font-size: 12.0pt; mso-fareast-language: ZH-CN"><p>&amp;nbsp;</p></span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-bidi-font-size: 12.0pt; mso-fareast-language: ZH-CN">“消息队列网络”是能够相互间来回发送消息的任何一组计算机。网络中的不同计算机在确保消息顺利处理的过程中扮演不同的角色。它们中有些提供路由信息以确定如何发送消息，有些保存整个网络的重要信息，而有些只是发送和接收消息。</span><span lang="EN" style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana; mso-bidi-font-size: 12.0pt; mso-fareast-language: ZH-CN"><p /></span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN" style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana; mso-bidi-font-size: 12.0pt; mso-fareast-language: ZH-CN"><p>&amp;nbsp;</p></span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-bidi-font-size: 12.0pt; mso-fareast-language: ZH-CN">“消息队列”安装期间，管理员确定哪些服务器可以互相通信，并设置特定服务器的特殊角色。构成此“消息队列”网络的计算机称为“站点”，它们之间通过“站点链接”相互连接。每个站点链接都有一个关联的“开销”，它由管理员确定，指示了经过此站点链接传递消息的频率。</span><span lang="EN" style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana; mso-bidi-font-size: 12.0pt; mso-fareast-language: ZH-CN"><p /></span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN" style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana; mso-bidi-font-size: 12.0pt; mso-fareast-language: ZH-CN"><p>&amp;nbsp;</p></span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-bidi-font-size: 12.0pt; mso-fareast-language: ZH-CN">“消息队列”管理员还在网络中设置一台或多台作为“路由服务器”的计算机。路由服务器查看各站点链接的开销，确定经过多个站点传递消息的最快和最有效的方法，以此决定如何传递消息。</span><span lang="EN" style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana; mso-bidi-font-size: 12.0pt; mso-fareast-language: ZH-CN"><p /></span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN" style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana; mso-bidi-font-size: 12.0pt; mso-fareast-language: ZH-CN"><p>&amp;nbsp;</p></span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><b><span lang="EN" style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana; mso-bidi-font-size: 12.0pt; mso-fareast-language: ZH-CN">2. </span></b><b><span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-bidi-font-size: 12.0pt; mso-fareast-language: ZH-CN">队列类型（</span></b><b><span lang="EN" style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana; mso-bidi-font-size: 12.0pt; mso-fareast-language: ZH-CN">Queue Type</span></b><b><span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-bidi-font-size: 12.0pt; mso-fareast-language: ZH-CN">）</span></b><b><span lang="EN" style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana; mso-bidi-font-size: 12.0pt; mso-fareast-language: ZH-CN"><p /></span></b></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-bidi-font-size: 12.0pt; mso-fareast-language: ZH-CN">有两种主要的队列类型：由您或网络中的其他用户创建的队列和系统队列。</span><span lang="EN" style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana; mso-bidi-font-size: 12.0pt; mso-fareast-language: ZH-CN"><p /></span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><b><span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-bidi-font-size: 12.0pt; mso-fareast-language: ZH-CN">用户创建的队列可能是以下任何一种队列：</span></b><b><span lang="EN" style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana; mso-bidi-font-size: 12.0pt; mso-fareast-language: ZH-CN"> <p /></span></b></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-bidi-font-size: 12.0pt; mso-fareast-language: ZH-CN">“公共队列”在整个“消息队列”网络中复制，并且有可能由网络连接的所有站点访问。</span><span lang="EN" style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana; mso-bidi-font-size: 12.0pt; mso-fareast-language: ZH-CN"> <p /></span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-bidi-font-size: 12.0pt; mso-fareast-language: ZH-CN">“专用队列”不在整个网络中发布。相反，它们仅在所驻留的本地计算机上可用。专用队列只能由知道队列的完整路径名或标签的应用程序访问。</span><span lang="EN" style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana; mso-bidi-font-size: 12.0pt; mso-fareast-language: ZH-CN"> <p /></span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-bidi-font-size: 12.0pt; mso-fareast-language: ZH-CN">“管理队列”包含确认在给定“消息队列”网络中发送的消息回执的消息。指定希望</span><span lang="EN" style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana; mso-bidi-font-size: 12.0pt; mso-fareast-language: ZH-CN"> MessageQueue </span><span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-bidi-font-size: 12.0pt; mso-fareast-language: ZH-CN">组件使用的管理队列（如果有的话）。</span><span lang="EN" style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana; mso-bidi-font-size: 12.0pt; mso-fareast-language: ZH-CN"> <p /></span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-bidi-font-size: 12.0pt; mso-fareast-language: ZH-CN">“响应队列”包含目标应用程序接收到消息时返回给发送应用程序的响应消息。指定希望</span><span lang="EN" style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana; mso-bidi-font-size: 12.0pt; mso-fareast-language: ZH-CN"> MessageQueue </span><span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-bidi-font-size: 12.0pt; mso-fareast-language: ZH-CN">组件使用的响应队列（如果有的话）。</span><span lang="EN" style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana; mso-bidi-font-size: 12.0pt; mso-fareast-language: ZH-CN"> <p /></span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN" style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana; mso-bidi-font-size: 12.0pt; mso-fareast-language: ZH-CN"><p>&amp;nbsp;</p></span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><b><span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-bidi-font-size: 12.0pt; mso-fareast-language: ZH-CN">系统生成的队列一般分为以下几类：</span></b><b><span lang="EN" style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana; mso-bidi-font-size: 12.0pt; mso-fareast-language: ZH-CN"> <p /></span></b></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-bidi-font-size: 12.0pt; mso-fareast-language: ZH-CN">“日记队列”可选地存储发送消息的副本和从队列中移除的消息副本。每个“消息队列”客户端上的单个日记队列存储从该计算机发送的消息副本。在服务器上为每个队列创建了一个单独的日记队列。此日记跟踪从该队列中移除的消息。</span><span lang="EN" style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana; mso-bidi-font-size: 12.0pt; mso-fareast-language: ZH-CN"> <p /></span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-bidi-font-size: 12.0pt; mso-fareast-language: ZH-CN">“死信队列”存储无法传递或已过期的消息的副本。如果过期或无法传递的消息是事务性消息，则被存储在一种特殊的死信队列中，称为“事务性死信队列”。死信存储在过期消息所在的计算机上。有关超时期限和过期消息的更多信息，请参见默认消息属性。</span><span lang="EN" style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana; mso-bidi-font-size: 12.0pt; mso-fareast-language: ZH-CN"> <p /></span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-bidi-font-size: 12.0pt; mso-fareast-language: ZH-CN">“报告队列”包含指示消息到达目标所经过的路由的消息，还可以包含测试消息。每台计算机上只能有一个报告队列。</span><span lang="EN" style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana; mso-bidi-font-size: 12.0pt; mso-fareast-language: ZH-CN"> <p /></span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-bidi-font-size: 12.0pt; mso-fareast-language: ZH-CN">“专用系统队列”是一系列存储系统执行消息处理操作所需的管理和通知消息的专用队列。</span><span lang="EN" style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana; mso-bidi-font-size: 12.0pt; mso-fareast-language: ZH-CN"> <p /></span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-bidi-font-size: 12.0pt; mso-fareast-language: ZH-CN">在应用程序中进行的大多数工作都涉及访问公共队列及其消息。但是，根据应用程序的日记记录、确认和其他特殊处理需要，在日常操作中很可能要使用几种不同的系统队列。</span><span lang="EN" style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana; mso-bidi-font-size: 12.0pt; mso-fareast-language: ZH-CN"><p /></span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN" style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana; mso-bidi-font-size: 12.0pt; mso-fareast-language: ZH-CN"><p>&amp;nbsp;</p></span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><b><span lang="EN" style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana; mso-bidi-font-size: 12.0pt; mso-fareast-language: ZH-CN">3. </span></b><b><span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-bidi-font-size: 12.0pt; mso-fareast-language: ZH-CN">同步和异步通信（</span></b><b><span lang="EN" style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana; mso-bidi-font-size: 12.0pt; mso-fareast-language: ZH-CN">Synchronous VS. Asynchronous Communication</span></b><b><span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-bidi-font-size: 12.0pt; mso-fareast-language: ZH-CN">）</span></b><b><span lang="EN" style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana; mso-bidi-font-size: 12.0pt; mso-fareast-language: ZH-CN"><p /></span></b></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-bidi-font-size: 12.0pt; mso-fareast-language: ZH-CN">队列通信天生就是异步的，因为将消息发送到队列和从队列中接收消息是在不同的进程中完成的。另外，可以异步执行接收操作，因为要接收消息的人可以对任何给定的队列调用</span><span lang="EN" style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana; mso-bidi-font-size: 12.0pt; mso-fareast-language: ZH-CN"> BeginReceive </span><span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-bidi-font-size: 12.0pt; mso-fareast-language: ZH-CN">方法，然后立即继续其他任务而不用等待答复。这与人们所了解的“同步通信”截然不同。</span><span lang="EN" style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana; mso-bidi-font-size: 12.0pt; mso-fareast-language: ZH-CN"><p /></span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN" style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana; mso-bidi-font-size: 12.0pt; mso-fareast-language: ZH-CN"><p>&amp;nbsp;</p></span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-bidi-font-size: 12.0pt; mso-fareast-language: ZH-CN">在同步通信中，请求的发送方在执行其他任务前，必须等待来自预定接收方的响应。发送方等待的时间完全取决于接收方处理请求和发送响应所用的时间。</span><span lang="EN" style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana; mso-bidi-font-size: 12.0pt; mso-fareast-language: ZH-CN"><p /></span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN" style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana; mso-bidi-font-size: 12.0pt; mso-fareast-language: ZH-CN"><p>&amp;nbsp;</p></span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><b><span lang="EN" style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana; mso-bidi-font-size: 12.0pt; mso-fareast-language: ZH-CN">4. </span></b><b><span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-bidi-font-size: 12.0pt; mso-fareast-language: ZH-CN">同消息队列交互（</span></b><b><span lang="EN" style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana; mso-bidi-font-size: 12.0pt; mso-fareast-language: ZH-CN">Interacting with Message Queues</span></b><b><span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-bidi-font-size: 12.0pt; mso-fareast-language: ZH-CN">）</span></b><b><span lang="EN" style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana; mso-bidi-font-size: 12.0pt; mso-fareast-language: ZH-CN"><p /></span></b></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-bidi-font-size: 12.0pt; mso-fareast-language: ZH-CN">消息处理和消息为基于服务器的应用程序组件之间的进程间通信提供了强大灵活的机制。同组件间的直接调用相比，它们具有若干优点，其中包括：</span><span lang="EN" style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana; mso-bidi-font-size: 12.0pt; mso-fareast-language: ZH-CN"> <p /></span></p><ul style="MARGIN-TOP: 0cm" type="disc"><li class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; tab-stops: list 36.0pt; mso-list: l0 level1 lfo1"><span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-bidi-font-size: 12.0pt; mso-fareast-language: ZH-CN">稳定性</span><span lang="EN" style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana; mso-bidi-font-size: 12.0pt; mso-fareast-language: ZH-CN"> — </span><span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-bidi-font-size: 12.0pt; mso-fareast-language: ZH-CN">组件失败对消息的影响程度远远小于组件间的直接调用，因为消息存储在队列中并一直留在那里，直到被适当地处理。消息处理同事务处理相似，因为消息处理是有保证的。</span><span lang="EN" style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana; mso-bidi-font-size: 12.0pt; mso-fareast-language: ZH-CN"> <p /></span></li><li class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; tab-stops: list 36.0pt; mso-list: l0 level1 lfo1"><span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-bidi-font-size: 12.0pt; mso-fareast-language: ZH-CN">消息优先级</span><span lang="EN" style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana; mso-bidi-font-size: 12.0pt; mso-fareast-language: ZH-CN"> — </span><span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-bidi-font-size: 12.0pt; mso-fareast-language: ZH-CN">更紧急或更重要的消息可在相对不重要的消息之前接收，因此可以为关键的应用程序保证足够的响应时间。</span><span lang="EN" style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana; mso-bidi-font-size: 12.0pt; mso-fareast-language: ZH-CN"> <p /></span></li><li class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; tab-stops: list 36.0pt; mso-list: l0 level1 lfo1"><span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-bidi-font-size: 12.0pt; mso-fareast-language: ZH-CN">脱机能力</span><span lang="EN" style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana; mso-bidi-font-size: 12.0pt; mso-fareast-language: ZH-CN"> — </span><span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-bidi-font-size: 12.0pt; mso-fareast-language: ZH-CN">发送消息时，它们可被发送到临时队列中并一直留在那里，直到被成功地传递。当因任何原因对所需队列的访问不可用时，用户可以继续执行操作。同时，其他操作可以继续进行，如同消息已经得到了处理一样，这是因为网络连接恢复时消息传递是有保证的。</span><span lang="EN" style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana; mso-bidi-font-size: 12.0pt; mso-fareast-language: ZH-CN"> <p /></span></li><li class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; tab-stops: list 36.0pt; mso-list: l0 level1 lfo1"><span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-bidi-font-size: 12.0pt; mso-fareast-language: ZH-CN">事务性消息处理</span><span lang="EN" style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana; mso-bidi-font-size: 12.0pt; mso-fareast-language: ZH-CN"> — </span><span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-bidi-font-size: 12.0pt; mso-fareast-language: ZH-CN">将多个相关消息耦合为单个事务，确保消息按顺序传递、只传递一次并且可以从它们的目标队列中被成功地检索。如果出现任何错误，将取消整个事务。</span><span lang="EN" style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana; mso-bidi-font-size: 12.0pt; mso-fareast-language: ZH-CN"> <p /></span></li><li class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; tab-stops: list 36.0pt; mso-list: l0 level1 lfo1"><span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-bidi-font-size: 12.0pt; mso-fareast-language: ZH-CN">安全性</span><span lang="EN" style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana; mso-bidi-font-size: 12.0pt; mso-fareast-language: ZH-CN"> — MessageQueue </span><span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-bidi-font-size: 12.0pt; mso-fareast-language: ZH-CN">组件基于的消息队列技术使用</span><span lang="EN" style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana; mso-bidi-font-size: 12.0pt; mso-fareast-language: ZH-CN"> Windows </span><span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-bidi-font-size: 12.0pt; mso-fareast-language: ZH-CN">安全来保护访问控制，提供审核，并对组件发送和接收的消息进行加密和验证。</span><span lang="EN" style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana; mso-bidi-font-size: 12.0pt; mso-fareast-language: ZH-CN"><p /></span></li></ul><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN" style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana; mso-bidi-font-size: 12.0pt; mso-fareast-language: ZH-CN"><p>&amp;nbsp;</p></span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><b><span lang="EN" style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana; mso-bidi-font-size: 12.0pt; mso-fareast-language: ZH-CN">5. </span></b><b><span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-bidi-font-size: 12.0pt; mso-fareast-language: ZH-CN">在</span></b><b><span lang="EN" style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana; mso-bidi-font-size: 12.0pt; mso-fareast-language: ZH-CN">.Net</span></b><b><span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-bidi-font-size: 12.0pt; mso-fareast-language: ZH-CN">环境下编写简单的</span></b><b><span lang="EN" style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana; mso-bidi-font-size: 12.0pt; mso-fareast-language: ZH-CN">Message Queue</span></b><b><span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-bidi-font-size: 12.0pt; mso-fareast-language: ZH-CN">程序</span></b><b><span lang="EN" style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana; mso-bidi-font-size: 12.0pt; mso-fareast-language: ZH-CN"><p /></span></b></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-bidi-font-size: 12.0pt; mso-fareast-language: ZH-CN">（</span><span lang="EN" style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana; mso-bidi-font-size: 12.0pt; mso-fareast-language: ZH-CN">1</span><span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-bidi-font-size: 12.0pt; mso-fareast-language: ZH-CN">）先安装</span><span lang="EN" style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana; mso-bidi-font-size: 12.0pt; mso-fareast-language: ZH-CN">Message Queuing Services<p /></span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-bidi-font-size: 12.0pt; mso-fareast-language: ZH-CN">通过</span><span lang="EN" style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana; mso-bidi-font-size: 12.0pt; mso-fareast-language: ZH-CN">Control Panel</span><span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-bidi-font-size: 12.0pt; mso-fareast-language: ZH-CN">，</span><span lang="EN" style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana; mso-bidi-font-size: 12.0pt; mso-fareast-language: ZH-CN">“Add/Remove Programs” – “Add/Remove Windows Components”</span><span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-bidi-font-size: 12.0pt; mso-fareast-language: ZH-CN">步骤安装</span><span lang="EN" style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana; mso-bidi-font-size: 12.0pt; mso-fareast-language: ZH-CN">MSMQ</span><span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-bidi-font-size: 12.0pt; mso-fareast-language: ZH-CN">。</span><span lang="EN" style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana; mso-bidi-font-size: 12.0pt; mso-fareast-language: ZH-CN"><p /></span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN" style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana; mso-bidi-font-size: 12.0pt; mso-fareast-language: ZH-CN">MSMQ</span><span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-bidi-font-size: 12.0pt; mso-fareast-language: ZH-CN">可以安装为工作组模式或域模式。如果安装程序没有找到一台运行提供目录服务的消息队列的服务器，则只可以安装为工作组模式，此计算机上的“消息队列”只支持创建专用队列和创建与其他运行“消息队列”的计算机的直接连接。</span><span lang="EN" style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana; mso-bidi-font-size: 12.0pt; mso-fareast-language: ZH-CN"><p /></span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN" style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana; mso-bidi-font-size: 12.0pt; mso-fareast-language: ZH-CN"><p>&amp;nbsp;</p></span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-bidi-font-size: 12.0pt; mso-fareast-language: ZH-CN">（</span><span lang="EN" style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana; mso-bidi-font-size: 12.0pt; mso-fareast-language: ZH-CN">2</span><span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-bidi-font-size: 12.0pt; mso-fareast-language: ZH-CN">）配置</span><span lang="EN" style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana; mso-bidi-font-size: 12.0pt; mso-fareast-language: ZH-CN">MSMQ<p /></span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-bidi-font-size: 12.0pt; mso-fareast-language: ZH-CN">打开</span><span lang="EN" style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana; mso-bidi-font-size: 12.0pt; mso-fareast-language: ZH-CN">Computer Management – Message Queuing</span><span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-bidi-font-size: 12.0pt; mso-fareast-language: ZH-CN">，在</span><span lang="EN" style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana; mso-bidi-font-size: 12.0pt; mso-fareast-language: ZH-CN">Private Queues</span><span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-bidi-font-size: 12.0pt; mso-fareast-language: ZH-CN">下创建</span><span lang="EN" style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana; mso-bidi-font-size: 12.0pt; mso-fareast-language: ZH-CN">MSMQDemo</span><span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-bidi-font-size: 12.0pt; mso-fareast-language: ZH-CN">队列</span><span lang="EN" style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana; mso-bidi-font-size: 12.0pt; mso-fareast-language: ZH-CN"><p /></span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN" style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana; mso-bidi-font-size: 12.0pt; mso-fareast-language: ZH-CN"><p>&amp;nbsp;</p></span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-bidi-font-size: 12.0pt; mso-fareast-language: ZH-CN">（</span><span lang="EN" style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana; mso-bidi-font-size: 12.0pt; mso-fareast-language: ZH-CN">3</span><span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-bidi-font-size: 12.0pt; mso-fareast-language: ZH-CN">）编写代码－简单演示</span><span lang="EN" style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana; mso-bidi-font-size: 12.0pt; mso-fareast-language: ZH-CN">MSMQ</span><span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-bidi-font-size: 12.0pt; mso-fareast-language: ZH-CN">对象</span><span lang="EN" style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana; mso-bidi-font-size: 12.0pt; mso-fareast-language: ZH-CN"><p /></span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN" style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana; mso-bidi-font-size: 12.0pt; mso-fareast-language: ZH-CN">MessageQueue </span><span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-bidi-font-size: 12.0pt; mso-fareast-language: ZH-CN">类是“消息队列”周围的包装。</span><span lang="EN" style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana; mso-bidi-font-size: 12.0pt; mso-fareast-language: ZH-CN">MessageQueue </span><span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-bidi-font-size: 12.0pt; mso-fareast-language: ZH-CN">类提供对“消息队列”队列的引用。可以在</span><span lang="EN" style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana; mso-bidi-font-size: 12.0pt; mso-fareast-language: ZH-CN"> MessageQueue </span><span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-bidi-font-size: 12.0pt; mso-fareast-language: ZH-CN">构造函数中指定一个连接到现有资源的路径，或者可在服务器上创建新队列。在调用</span><span lang="EN" style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana; mso-bidi-font-size: 12.0pt; mso-fareast-language: ZH-CN"> Send</span><span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-bidi-font-size: 12.0pt; mso-fareast-language: ZH-CN">、</span><span lang="EN" style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana; mso-bidi-font-size: 12.0pt; mso-fareast-language: ZH-CN">Peek </span><span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-bidi-font-size: 12.0pt; mso-fareast-language: ZH-CN">或</span><span lang="EN" style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana; mso-bidi-font-size: 12.0pt; mso-fareast-language: ZH-CN"> Receive </span><span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-bidi-font-size: 12.0pt; mso-fareast-language: ZH-CN">之前，必须将</span><span lang="EN" style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana; mso-bidi-font-size: 12.0pt; mso-fareast-language: ZH-CN"> MessageQueue </span><span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-bidi-font-size: 12.0pt; mso-fareast-language: ZH-CN">类的新实例与某个现有队列关联。</span><span lang="EN" style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana; mso-bidi-font-size: 12.0pt; mso-fareast-language: ZH-CN"><p /></span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN" style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana; mso-bidi-font-size: 12.0pt; mso-fareast-language: ZH-CN"><p>&amp;nbsp;</p></span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN" style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana; mso-bidi-font-size: 12.0pt; mso-fareast-language: ZH-CN">MessageQueue </span><span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-bidi-font-size: 12.0pt; mso-fareast-language: ZH-CN">支持两种类型的消息检索：同步和异步。同步的</span><span lang="EN" style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana; mso-bidi-font-size: 12.0pt; mso-fareast-language: ZH-CN"> Peek </span><span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-bidi-font-size: 12.0pt; mso-fareast-language: ZH-CN">和</span><span lang="EN" style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana; mso-bidi-font-size: 12.0pt; mso-fareast-language: ZH-CN"> Receive </span><span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-bidi-font-size: 12.0pt; mso-fareast-language: ZH-CN">方法使进程线程用指定的间隔时间等待新消息到达队列。异步的</span><span lang="EN" style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana; mso-bidi-font-size: 12.0pt; mso-fareast-language: ZH-CN"> BeginPeek </span><span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-bidi-font-size: 12.0pt; mso-fareast-language: ZH-CN">和</span><span lang="EN" style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana; mso-bidi-font-size: 12.0pt; mso-fareast-language: ZH-CN"> BeginReceive </span><span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-bidi-font-size: 12.0pt; mso-fareast-language: ZH-CN">方法允许主应用程序任务在消息到达队列之前，在单独的线程中继续执行。这些方法通过使用回调对象和状态对象进行工作，以便在线程之间进行信息通讯。</span><span lang="EN" style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana; mso-bidi-font-size: 12.0pt; mso-fareast-language: ZH-CN"><p /></span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; mso-layout-grid-align: none"><span lang="EN" style="FONT-SIZE: 9pt; COLOR: green; FONT-FAMILY: Verdana; mso-bidi-font-size: 11.0pt">// Send Message<p /></span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; mso-layout-grid-align: none"><span lang="EN" style="FONT-SIZE: 9pt; COLOR: blue; FONT-FAMILY: Verdana; mso-bidi-font-size: 11.0pt">private</span><span lang="EN" style="FONT-SIZE: 9pt; FONT-FAMILY: Verdana; mso-bidi-font-size: 11.0pt"> <span style="COLOR: blue">void</span> <span style="COLOR: black">btnSendMessage_Click</span>(<span style="COLOR: blue">object</span> <span style="COLOR: black">sender</span>, <span style="COLOR: black">System</span>.<span style="COLOR: black">EventArgs</span> <span style="COLOR: black">e</span>)<p /></span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; mso-layout-grid-align: none"><span lang="EN" style="FONT-SIZE: 9pt; FONT-FAMILY: Verdana; mso-bidi-font-size: 11.0pt">{<p /></span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; mso-layout-grid-align: none"><span lang="EN" style="FONT-SIZE: 9pt; FONT-FAMILY: Verdana; mso-bidi-font-size: 11.0pt"><span style="mso-tab-count: 1">&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; </span><span style="COLOR: green">// Open queue<p /></span></span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; mso-layout-grid-align: none"><span lang="EN" style="FONT-SIZE: 9pt; FONT-FAMILY: Verdana; mso-bidi-font-size: 11.0pt"><span style="mso-tab-count: 1">&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; </span><span style="COLOR: black">System</span>.<span style="COLOR: black">Messaging</span>.<span style="COLOR: black">MessageQueue</span> <span style="COLOR: black">queue</span> = <span style="COLOR: blue">new</span> <span style="COLOR: black">System</span>.<span style="COLOR: black">Messaging</span>.<span style="COLOR: black">MessageQueue</span>(&amp;quot;.\\Private$\\MSMQDemo&amp;quot;);<p /></span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; mso-layout-grid-align: none"><span lang="EN" style="FONT-SIZE: 9pt; FONT-FAMILY: Verdana; mso-bidi-font-size: 11.0pt"><p>&amp;nbsp;</p></span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; mso-layout-grid-align: none"><span lang="EN" style="FONT-SIZE: 9pt; FONT-FAMILY: Verdana; mso-bidi-font-size: 11.0pt"><span style="mso-tab-count: 1">&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; </span><span style="COLOR: green">// Create message<p /></span></span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; mso-layout-grid-align: none"><span lang="EN" style="FONT-SIZE: 9pt; FONT-FAMILY: Verdana; mso-bidi-font-size: 11.0pt"><span style="mso-tab-count: 1">&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; </span><span style="COLOR: black">System</span>.<span style="COLOR: black">Messaging</span>.<span style="COLOR: black">Message</span> <span style="COLOR: black">message</span> = <span style="COLOR: blue">new</span> <span style="COLOR: black">System</span>.<span style="COLOR: black">Messaging</span>.<span style="COLOR: black">Message</span>();<p /></span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; mso-layout-grid-align: none"><span lang="EN" style="FONT-SIZE: 9pt; FONT-FAMILY: Verdana; mso-bidi-font-size: 11.0pt"><span style="mso-tab-count: 1">&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; </span><span style="COLOR: black">message</span>.<span style="COLOR: black">Body</span> = <span style="COLOR: black">txtMessage</span>.<span style="COLOR: black">Text</span>.<span style="COLOR: black">Trim</span>();<p /></span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; mso-layout-grid-align: none"><span lang="EN" style="FONT-SIZE: 9pt; FONT-FAMILY: Verdana; mso-bidi-font-size: 11.0pt"><span style="mso-tab-count: 1">&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; </span><span style="COLOR: black">message</span>.<span style="COLOR: black">Formatter</span> = <span style="COLOR: blue">new</span> <span style="COLOR: black">System</span>.<span style="COLOR: black">Messaging</span>.<span style="COLOR: black">XmlMessageFormatter</span>(<span style="COLOR: blue">new</span> <span style="COLOR: black">Type</span>[] {<span style="COLOR: blue">typeof</span>(<span style="COLOR: blue">string</span>)});<p /></span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; mso-layout-grid-align: none"><span lang="EN" style="FONT-SIZE: 9pt; FONT-FAMILY: Verdana; mso-bidi-font-size: 11.0pt"><p>&amp;nbsp;</p></span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; mso-layout-grid-align: none"><span lang="EN" style="FONT-SIZE: 9pt; FONT-FAMILY: Verdana; mso-bidi-font-size: 11.0pt"><span style="mso-tab-count: 1">&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; </span><span style="COLOR: green">// Put message into queue<p /></span></span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; mso-layout-grid-align: none"><span lang="EN" style="FONT-SIZE: 9pt; FONT-FAMILY: Verdana; mso-bidi-font-size: 11.0pt"><span style="mso-tab-count: 1">&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; </span><span style="COLOR: black">queue</span>.<span style="COLOR: black">Send</span>(<span style="COLOR: black">message</span>);<p /></span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; mso-layout-grid-align: none"><span lang="EN" style="FONT-SIZE: 9pt; FONT-FAMILY: Verdana; mso-bidi-font-size: 11.0pt">}<p /></span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; mso-layout-grid-align: none"><span lang="EN" style="FONT-SIZE: 9pt; FONT-FAMILY: Verdana; mso-bidi-font-size: 11.0pt"><p>&amp;nbsp;</p></span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; mso-layout-grid-align: none"><span lang="EN" style="FONT-SIZE: 9pt; COLOR: green; FONT-FAMILY: Verdana; mso-bidi-font-size: 11.0pt">// Receive Message<p /></span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; mso-layout-grid-align: none"><span lang="EN" style="FONT-SIZE: 9pt; COLOR: blue; FONT-FAMILY: Verdana; mso-bidi-font-size: 11.0pt">private</span><span lang="EN" style="FONT-SIZE: 9pt; FONT-FAMILY: Verdana; mso-bidi-font-size: 11.0pt"> <span style="COLOR: blue">void</span> <span style="COLOR: black">btnReceiveMessage_Click</span>(<span style="COLOR: blue">object</span> <span style="COLOR: black">sender</span>, <span style="COLOR: black">System</span>.<span style="COLOR: black">EventArgs</span> <span style="COLOR: black">e</span>)<p /></span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; mso-layout-grid-align: none"><span lang="EN" style="FONT-SIZE: 9pt; FONT-FAMILY: Verdana; mso-bidi-font-size: 11.0pt">{<p /></span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; mso-layout-grid-align: none"><span lang="EN" style="FONT-SIZE: 9pt; FONT-FAMILY: Verdana; mso-bidi-font-size: 11.0pt"><span style="mso-tab-count: 1">&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; </span><span style="COLOR: green">// Open queue<p /></span></span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; mso-layout-grid-align: none"><span lang="EN" style="FONT-SIZE: 9pt; FONT-FAMILY: Verdana; mso-bidi-font-size: 11.0pt"><span style="mso-tab-count: 1">&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; </span><span style="COLOR: black">System</span>.<span style="COLOR: black">Messaging</span>.<span style="COLOR: black">MessageQueue</span> <span style="COLOR: black">queue</span> = <span style="COLOR: blue">new</span> <span style="COLOR: black">System</span>.<span style="COLOR: black">Messaging</span>.<span style="COLOR: black">MessageQueue</span>(&amp;quot;.\\Private$\\MSMQDemo&amp;quot;);<p /></span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; mso-layout-grid-align: none"><span lang="EN" style="FONT-SIZE: 9pt; FONT-FAMILY: Verdana; mso-bidi-font-size: 11.0pt"><span style="mso-spacerun: yes">&amp;nbsp; </span><p /></span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; mso-layout-grid-align: none"><span lang="EN" style="FONT-SIZE: 9pt; FONT-FAMILY: Verdana; mso-bidi-font-size: 11.0pt"><span style="mso-tab-count: 1">&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; </span><span style="COLOR: green">// Receive message, </span></span><span lang="EN" style="FONT-SIZE: 9pt; COLOR: green; FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-bidi-font-size: 11.0pt">同步的</span><span lang="EN" style="FONT-SIZE: 9pt; COLOR: green; FONT-FAMILY: Verdana; mso-bidi-font-size: 11.0pt">Receive</span><span lang="EN" style="FONT-SIZE: 9pt; COLOR: green; FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-bidi-font-size: 11.0pt">方法阻塞当前执行线程，直到一个</span><span lang="EN" style="FONT-SIZE: 9pt; COLOR: green; FONT-FAMILY: Verdana; mso-bidi-font-size: 11.0pt">message</span><span lang="EN" style="FONT-SIZE: 9pt; COLOR: green; FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-bidi-font-size: 11.0pt">可以得到</span><span lang="EN" style="FONT-SIZE: 9pt; FONT-FAMILY: Verdana; mso-bidi-font-size: 11.0pt"><span style="mso-tab-count: 1"> </span></span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; mso-layout-grid-align: none"><span lang="EN" style="FONT-SIZE: 9pt; FONT-FAMILY: Verdana; mso-bidi-font-size: 11.0pt"><span style="mso-tab-count: 1"></span><span style="COLOR: black"><span lang="EN" style="FONT-SIZE: 9pt; FONT-FAMILY: Verdana; mso-bidi-font-size: 11.0pt"><span style="mso-tab-count: 1">&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; </span></span>System</span>.<span style="COLOR: black">Messaging</span>.<span style="COLOR: black">Message</span> <span style="COLOR: black">message</span> = <span style="COLOR: black">queue</span>.<span style="COLOR: black">Receive</span>(); <p /></span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; mso-layout-grid-align: none"><span lang="EN" style="FONT-SIZE: 9pt; FONT-FAMILY: Verdana; mso-bidi-font-size: 11.0pt"><span style="mso-tab-count: 1">&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; </span><span style="COLOR: black">message</span>.<span style="COLOR: black">Formatter</span> = <span style="COLOR: blue">new</span> <span style="COLOR: black">System</span>.<span style="COLOR: black">Messaging</span>.<span style="COLOR: black">XmlMessageFormatter</span>(<span style="COLOR: blue">new</span> <span style="COLOR: black">Type</span>[] {<span style="COLOR: blue">typeof</span>(<span style="COLOR: blue">string</span>)});<p /></span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; mso-layout-grid-align: none"><span lang="EN" style="FONT-SIZE: 9pt; FONT-FAMILY: Verdana; mso-bidi-font-size: 11.0pt"><span style="mso-tab-count: 1">&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; </span><span style="COLOR: black">txtReceiveMessage</span>.<span style="COLOR: black">Text</span> = <span style="COLOR: black">message</span>.<span style="COLOR: black">Body</span>.<span style="COLOR: black">ToString</span>();<p /></span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN" style="FONT-SIZE: 9pt; FONT-FAMILY: Verdana; mso-bidi-font-size: 11.0pt">}<p /></span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN" style="FONT-SIZE: 9pt; FONT-FAMILY: Verdana; mso-bidi-font-size: 11.0pt"><p>&amp;nbsp;</p></span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN" style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana; mso-bidi-font-size: 11.0pt">Demo</span><span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-bidi-font-size: 11.0pt; mso-fareast-language: ZH-CN">界面：</span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-bidi-font-size: 11.0pt; mso-fareast-language: ZH-CN"><img height="268" src="http://rickie.cnblogs.com/images/cnblogs_com/rickie/MSMQ_Demo.GIF" width="428" border="0" /></span></p><span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-bidi-font-size: 11.0pt; mso-fareast-language: ZH-CN"><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN" style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana; mso-bidi-font-size: 12.0pt; mso-fareast-language: ZH-CN"><p>&amp;nbsp;</p></span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN" style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana; mso-bidi-font-size: 12.0pt; mso-fareast-language: ZH-CN">******<p /></span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-bidi-font-size: 12.0pt; mso-fareast-language: ZH-CN">关于</span><span lang="EN" style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana; mso-bidi-font-size: 12.0pt; mso-fareast-language: ZH-CN">MSMQ</span><span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-bidi-font-size: 12.0pt; mso-fareast-language: ZH-CN">消息队列介绍文字来自于</span><span lang="EN" style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana; mso-bidi-font-size: 12.0pt; mso-fareast-language: ZH-CN">MSDN.<p /></span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN" style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana; mso-bidi-font-size: 12.0pt; mso-fareast-language: ZH-CN"><p>&amp;nbsp;</p></span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN" style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana; mso-bidi-font-size: 12.0pt; mso-fareast-language: ZH-CN"><p>&amp;nbsp;</p></span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><b><span lang="EN" style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana; mso-bidi-font-size: 12.0pt; mso-fareast-language: ZH-CN">References:<p /></span></b></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN" style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana; mso-bidi-font-size: 12.0pt; mso-fareast-language: ZH-CN">1, MSDN, </span><span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-bidi-font-size: 12.0pt; mso-fareast-language: ZH-CN">消息队列（</span><span lang="EN" style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana; mso-bidi-font-size: 12.0pt; mso-fareast-language: ZH-CN">Message Queue</span><span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-bidi-font-size: 12.0pt; mso-fareast-language: ZH-CN">）</span><span lang="EN" style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana; mso-bidi-font-size: 12.0pt; mso-fareast-language: ZH-CN"><p /></span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt" /><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">来自：<a href="http://rickie.cnblogs.com/archive/2004/11/16/64345.aspx">http://rickie.cnblogs.com/archive/2004/11/16/64345.aspx</a></p></span>]]></description> 
<dc:subject><![CDATA[框架/库]]></dc:subject> 
<dc:creator><![CDATA[dozb]]></dc:creator> 
<dc:date>2006-02-02T15:35:12Z</dc:date> 
</item> 

  
</rdf:RDF> 