在 WebSphere Message Broker V8 中使用 Microsoft .NET: 第 1 部分:使用 .NETCompute 节点样例

本系列的四篇教程将演示 WebSphere Message Broker V8 中对 Microsoft .NET 的新支持。第 1 部分将展示如何使用 .NETCompute 节点过滤、修改和创建消息,并提供一个样例场景和一些实验性 C# 代码片段。读者应当熟悉 Microsoft .NET 或 WebSphere Message Broker 其中之一,但不必同时具备这两者的知识。

Matthew Golby-Kirk, 软件开发人员, IBM

Matthew Golby-Kirk 的照片Matthew Golby-Kirk 是位于英国的 IBM Hursley Software Lab 的 WebSphere Message Broker 开发团队的一名软件开发人员。他致力于 WebSphere Message Broker 中的 HTTP 和 Web 服务支持以及 ESQL 语言运行时的设计和实现。



Ben Thompson, 高级 IT 专家, IBM

Ben Thompson 是位于英国 Hursley 的 IBM Software Group EMEA Laboratory Services 的高级 IT 专家。他已从事了七年分布式事务中间件相关工作,并具有广泛的使用 WebSphere 产品投资组合为全球 IBM 客户设计和实现解决方案的经验。


developerWorks 投稿作者

2012 年 3 月 08 日

开始之前

IBM® WebSphere® Message Broker V8(以下简称为 Message Broker)提供了与现有的 Microsoft® .NET® Framework(以下简称为 .NET)应用程序进行集成的功能。通过将新的 Message Broker .NETCompute 节点连接到一个消息流,或从 ESQL Compute 节点中调用一个 .NET 应用程序,您可以实现这种集成。

WebSphere Message Broker 和 Microsoft .NET

关于本系列教程

本系列共包含四篇教程,将展示如何使用新的 Message Broker .NETCompute 节点集成功能。每篇教程都将展示如何使用一个嵌入式模板在 Microsoft Visual Studio 2010 中创建 C# 代码。该模板是在安装 WebSphere Message Broker Toolkit 时附带的。这四篇教程将探讨以下主题:

  1. 第 1 部分:使用 .NETCompute 代码样例
  2. 第 2 部分:集成 Microsoft Word
  3. 第 3 部分:集成 Microsoft Excel
  4. 第 4 部分:错误处理和热交换部署

关于本教程

该 .NETCompute Node 样例使用 C# 代码过滤、修改和转换消息。您可以在 Microsoft Windows® broker 上使用 .NETCompute 节点来构建输出消息,并将它与 Microsoft .NET 框架 (.NET) 或 Component Object Model (COM) 应用程序进行集成。

WebSphere Message Broker 使您能够在一个执行组中托管和运行 .NET 代码。新的 .NETCompute 节点通过使用任何与 Common Language Runtime (CLR) 兼容的 .NET 编程语言传递和转换消息,这些语言包括 C#、Visual Basic (VB)、F# 或 C++/Common Language Infrastructure (CLI)。本教程将介绍 WebSphere Message Broker 提供的新的 .NET API,它支持 .NET 开发人员与 Message Broker 的本地树进行交互。

先决条件和系统要求

本教程面向的读者为希望了解新的 .NETCompute 节点的 WebSphere Message Broker 编程人员,以及希望了解 WebSphere Message Broker 用法的 .NET 编程人员。如果您掌握了 C# 或 Message Broker 的一般知识,那么您会发现本教程相对比较容易完成。

要构建和执行本教程中的例子,您需要执行以下操作:

  • 安装 Windows,其中包含 Microsoft .NET Framework V4
  • WebSphere Message Broker(工具箱和运行时)V8
  • Microsoft Visual Studio 2010(精简版或专业版),用于编写和构建必要的 C# 代码

样例文件

您可以从 Message Broker Samples Gallery 中导入本教程所需的消息流和测试数据,Message Broker Samples Gallery 在 Message Broker 安装时提供。完成本教程不需要进行其他下载。


教程简介

本教程的消息流来自于 Message Broker Samples Gallery。下面将介绍如何创建 .NETCompute 所需的的 C# 代码,以及如何部署和测试它们。本教程将提供比 Message Broker 文档更详细的样例解释,还结合 .NETCompute 节点的 AppDomainName 属性使用了一个可配置的服务,用于反映实际中的生产应用。

场景描述

某零售企业在一座城市的不同位置设有几个商店。这些商店每天都会进行销售交易,每次交易都会生成一个 XML 消息,该消息会传递到中央 IT 办公室的输入队列:

Scenario

这些商店正在开展一项客户忠诚度计划。参加该忠诚度计划的每名客户会向输入队列发送一条不同格式的 XML 消息,其中包含该客户的个人信息。该公司决定使用 Message Broker 处理该消息。解决方案中的路由和转换功能演示了 Message Broker .NETCompute 节点的功能。


导入 .NETCompute 示例消息流

  1. 如果还没有启动 Message Broker Toolkit,请选择 Start => Programs => IBM WebSphere Message Broker Toolkit => IBM WebSphere Message Broker Toolkit 8.0 => WebSphere Message Broker Toolkit 8.0。系统会要求您输入工作空间的位置,可以使用 C:\student\DOTNET\lab_sample\workspace 完成此操作。
  2. 从 Help 菜单导航到 WebSphere Message Broker Toolkit 的 Samples Gallery:选择 Help => Samples and Tutorials => WebSphere Message Broker Toolkit – Message Broker。当 Samples and Tutorials 页面打开后,向下滚动页面后应当看到名为 Message Transformation 的部分,下面的红色框会突出显示。展开 Message Transformation 部分并单击 .NETCompute Node sampleSamples gallery
  3. 这会打开一个窗口,其中显示了 .NETCompute 节点示例的介绍,如下所示。阅读页面并单击 Import the sample,将样例文件导入到您的 Broker Toolkit 工作空间中:

    Import the sample
  4. 这将启动 “Prepare the Samples” 向导。单击 Next,项目导入需要几秒钟的时间,然后再次单击 Next,向导的最后一个页面应会显示导入已成功完成。单击 Finish,您会返回到 Samples 窗口:

    Import summary
  5. 此时,如果您熟悉 Message Broker 的话,您可能希望展开 sample 菜单并自己研究样例的其余部分。您将看到名为 “Introduction”、“Preparing the sample”、“Running the sample” 和 “C# code for the sample” 的标题。或者,下面的部分将带领您更详细地遍历 C# 开发。

    Sample 菜单
    本教程的下一小节将研究导入的 Message Broker 工件。

研究消息流

  1. 最小化包含样例文档的窗口,返回到 Message Broker Toolkit。您应当看到导入创建了一些项目,如下所示。展开项目后将发现它们包含一些预置的文件:

    应用程序开发工件
    名为 DotNetApplication 的应用程序项目包含一个消息流(DotNet.msgflow),两个扩展名为 .mbtest 的文件,用于通过消息流使用内置 Broker Test Client 发送文本消息,以及 Broker Archive (BAR) 文件 DotNet.bar,其中包含已编译的资源副本,这些副本将要部署到如下的运行时代理中。还有一个名为 DotNetLibrary 的库文件,其中包含一个以逗号分隔的消息的 DFDL 模式定义。该库将用于消息流中的某一个输出分支。接下来,请查看消息流 DotNet.msgflow,该消息流现在应该已经打开:

    样例消息流
    • ReadMessages MQInput 节点从名为 DOTNET.IN 的输入队列中获取消息。
    • Filter .NETCompute 节点将根据每条消息的格式将其发送到两个流分支中一支。
    • Modify .NETCompute 节点将一些 XML 元素添加到消息中。
    • Create .NETCompute 节点将输入消息转换为一个新的输出消息,后者采用了逗号分隔的形式。两个消息流分支最后都会生成一条消息,该消息会写入名为 DOTNET.OUT 的相同输出队列中。
    • WriteLoyaltyProgramMessage 节点将输出队列名 DOTNET.OUT 硬编码为其队列名属性。
    • WriteStoreTransactionMessage 节点使用 DestinationList 动态控制将其输出队列,而 DestinationList 使用前面的 Create 节点控制。样例选择将 DestinationList 设置为指向队列 DOTNET.OUT。
  2. 检查 Filter .NETCompute 节点的属性: Filter .NETCompute 属性
    在创建 .NETCompute 节点时,您将其与一个 .Net 编译 (assembly) 文件关联在一起。默认情况下,样例流被配置为使用 SampleDotNetProject.dll 作为编译文件的名称。
  3. 您将创建一个 C# 项目,添加 C# 源代码,然后进行构建,以便在后面的步骤中创建该编译文件。在 Microsoft Visual Studio 中创建好转换代码后,返回到消息流配置中。右键单击 Filter node 并选择 Open Microsoft Visual Studio打开 Microsoft Visual Studio
    使用 Visual Studio 选项卡上的 Node 属性将一个 .NETCompute 节点关联到某个特定的 Microsoft Visual Studio 解决方案后,它将启动并打开解决方案文件。您还要创建 .NET 解决方案,因此将打开 Visual Studio 并显示其 page 页面。下一小节将介绍如何编写 C# 代码。

在 Microsoft Visual Studio 中创建 .NET 解决方案

以下图像是从 Microsoft Visual Studio 专业版截取的,但是您也可以使用 Microsoft Visual Studio 精简版。

  1. 启动 Microsoft Visual Studio 后,您将看到如下所示的 Start 页面。选择 New Project,如红色框中的突出显示所示:

    Microsoft Visual Studio 新项目
  2. New Project 向导提供了三种类型的 Project 模板。选择名为 Project to route a Message Broker message 的模板。按如下所示在窗口底部指定属性,并单击 OK

    Name = SampleDotNetProject
    Location = C:\student\DOTNET\lab_sample\visual studio 2010\Projects
    Solution Name = SampleDotNetProject

    New project dialog
  3. 创建好项目后,展开右上方的 Solution Explorer view。您应当看到已经创建了 FilterNode.cs 文件,其中包含 C# 类,并添加了一个对 IBM.Broker.Plugin 的引用。该编译文件包含 Message Broker 用于在 .NETCompute 节点中转换消息的 API。

    Solution explorer
  4. 在主窗口中,创建了 FilterNode.cs,其中包含一些模板代码,您将在下一步中添加这些代码。代码是在与项目名 SampleDotNetProject 对应的名称空间(使用红色框突出显示)中创建的。在 .NETCompute 中执行的 .NET 代码的主要进入点是 Evaluate 方法,它包含一个 UserCode 区域,流开发人员通常在这个部分添加自己的代码。当调用 Propagate 方法时,消息编译将把 .NETCompute 节点留在指定的终端中。在下一步编辑此代码时,将修改 Evaluate 方法,使它创建一个额外的输出终端,并根据消息数据的内容对选择的输出终端调用 Propagate 方法。

    FilterNode.cs
  5. 使用下面提供的样例代码替换 FilterNode.cs 中的 Evaluate 方法的内容(如上图中的红色框所示)。注意,要从上一步生成的模板中删除对 Propagate 方法的现有调用。该调用为代码行 outTerminal.Propagate(inputAssembly);。同样,在执行复制时,一定要包含对 Alternate 和 Failure 终端的定义,这些定义位于下面所示代码的前几行中:
    清单 1. FilterNode.cs 的 Evaluate 方法的样例代码
    NBOutputTerminal outTerminal = OutputTerminal("Out");
    NBOutputTerminal altTerminal = OutputTerminal("Alternate");
    NBOutputTerminal failureTerminal = OutputTerminal("Failure");
    
    NBMessage inputMessage = inputAssembly.Message;
    NBElement root = inputMessage.RootElement;
    
    #region UserCode
         // Add user code in this region to filter the message
         // The following expression deliberately uses LastChild in
         // preference to FirstChild in case an XML Declaration is present!
         switch(root[NBParsers.XMLNSC.ParserName].LastChild.Name)
         {
              case "LoyaltyProgram":
                   outTerminal.Propagate(inputAssembly);
                   break;
              case "SaleEnvelope":
                   altTerminal.Propagate(inputAssembly);
                   break;
              default:
                   failureTerminal.Propagate(inputAssembly);
                   break;
         }
    #endregion UserCode

    Ctrl-S 或使用 File 选项保存编辑后的 FilterNode.cs 文件。
  6. 添加一个新类,以便从 Solution Explorer 中修改 Message Broker 消息:右键单击结构(SampleDotNetProject)中的 Project 层,并选择 Add => Class。在出现的 Add New Item 对话框中,选择 Class to modify a Message Broker message,确保您将名称指定为 ModifyNode.cs。默认情况下,向导使用建议的名称 ModifyNode1.cs。单击 Add

    ModifyNode.cs 中的 Add new item 对话框
  7. 使用下面的代码编辑 ModifyNode.cs 文件,以便填充模板的 UserCode 区域:
    清单 2. ModifyNode.cs 的 UserCode 区域的样例代码
    #region UserCode
         NBElement xmlRoot = outputRoot[NBParsers.XMLNSC.ParserName];
         NBElement xmlDecl = xmlRoot[NBParsers.XMLNSC.XmlDeclaration, "XmlDeclaration"];
         if (xmlDecl == null)
         {
              // Create an XML Declaration if required
              NBParsers.XMLNSC.CreateXmlDeclaration(xmlRoot, "1.0", "UTF-8", "yes");
         }
         string notarget = "";
         string ns = "http://www.example.org/store";
         NBElement storeDetails = xmlRoot[notarget,"LoyaltyProgram"][ns, "StoreDetails"];
         string storeName = "";
         string storeStreet = "";
         string storeTown = "Happyville";
         switch ((string)storeDetails[ns, "StoreID"])
         {
              case "001":
                   storeName = "Broker Brothers Central";
                   storeStreet = "Exuberant Avenue";
                   break;
              case "002":
                   storeName = "Broker Brothers Mall";
                   storeStreet = "Enthusiastic Crescent";
                   break;
              case "003":
                   storeName = "Broker Brothers District";
                   storeStreet = "Peaceful Road";
                   break;
         }
         storeDetails.CreateLastChild(ns, "StoreName", storeName);
         storeDetails.CreateLastChild(ns, "StoreStreet", storeStreet);
         storeDetails.CreateLastChild(ns, "StoreTown", storeTown);
    #endregion UserCode

    按 Ctrl-S 或使用 File 菜单中的选项保存编辑过的 ModifyNode.cs" 文件。
  8. 使用 Solution Explorer 添加一个新的类来创建 Message Broker 消息:右键单击 SampleDotNetProject 结构中的 Project 层,然后选择 Add => Class。在 Add New Item 对话框中,选择 Class to create a Message Broker message,确保已将名称指定为 CreateNode.cs,默认情况下,向导使用建议的名称 CreateNode1.cs。单击 Add

    CreateNode.cs 的 Add New Item 对话框
  9. 使用以下代码编辑 CreateNode.cs 文件,填充模板的 UserCode 区域:
    清单 3. CreateNode.cs 的 UserCode 区域的样例代码
    #region UserCode
         outputRoot["Properties"]["MessageSet"].SetValue("DotNetLibrary");
         outputRoot["Properties"]["MessageType"].SetValue("File");
         outputRoot.CreateLastChildUsingNewParser(NBParsers.DFDL.ParserName);
         NBElement File = 
              outputRoot[NBParsers.DFDL.ParserName].CreateFirstChild(null, "File");
         NBElement inxmlRoot = inputRoot[NBParsers.XMLNSC.ParserName];
         IEnumerable<NBElement> invoices = 
              inxmlRoot["SaleEnvelope"]["SaleList"].Children("Invoice");
         foreach (NBElement invoice in invoices)
         {
              TransformInvoice(File, invoice);
         }
         // Define Local Environment override to dynamically control the MQOutput node
         NBElement outLE = outAssembly.LocalEnvironment.RootElement;
         NBElement mqLE = 
              outLE.CreateFirstChild(null, "Destination").CreateFirstChild(null, "MQ");
         mqLE = mqLE.CreateFirstChild(null, "DestinationData");
         mqLE.CreateFirstChild(null, "queueName", "DOTNET.OUT");
    #endregion UserCode
  10. 使用下面的代码向 CreateNode.cs 文件添加一个名为 TransformInvoice 的新方法。确保已将其复制到文件中的正确位置。在文件结构中,该方法应当与 CopyMessageHeaders 方法位于同一层。
    清单 4. CreateNode.cs 的 TransformInvoice 方法的样例代码
    private static void TransformInvoice(NBElement outFileEl, NBElement inInvEl)
    {
         // This method creates a structure based on
         // the Invoice Element in the input message
         IEnumerable<NBElement> items = inInvEl.Children("Item");
         foreach (NBElement item in items)
         {
              NBElement record = outFileEl.CreateLastChild(null, "Record");
              string notgt = "";
              record.CreateLastChild(notgt, "Code1", (string)item["Code", 0]);
              record.CreateLastChild(notgt, "Code2", (string)item["Code", 1]);
              record.CreateLastChild(notgt, "Code3", (string)item["Code", 2]);
              record.CreateLastChild(notgt, "Description", (string)item["Description"]);
              record.CreateLastChild(notgt, "Category", (string)item["Category"]);
              record.CreateLastChild(notgt, "Price", (decimal)item["Price"]);
              record.CreateLastChild(notgt, "Quantity", (Int32)item["Quantity"]);
         }
    }

    您可以对 CopyMessageHeaders 方法(在添加 CreateNode.cs 时作为模板的一部分提供)不做任何修改。保存编辑后的 CreateNode.cs 文件:按 Ctrl-S 或使用 File 菜单中的选项。
  11. 在 Solution Explorer 中,右键单击 Solution 并选择 Build(或使用 F6 快捷键):

    Build the Solution

    如何在 Microsoft Visual Studio 中打开 Output 窗口

    如果没有显出 Output 窗口,而您使用的是 Microsoft Visual Studio 专业版,那么可以使用 Debug => Windows => Output 打开它。如果 Output 窗口不可见,而您使用的是 Microsoft Visual Studio 精简版,那么可以使用 View => Output 打开它。

  12. Output 窗口向您显示了 built assembly 文件在您的文件系统中的存放位置。根据您对 Microsoft Visual Studio 的配置方式,Build Output 窗口可能不会立即显示出来,对于这种情况,您应当根据侧栏中的提示打开 Output 窗口。 Build Output

    如果使用本教程中建议的默认命名,那么应当会发现编译文件被保存到以下位置:
    C:\student\DOTNET\lab_sample\visual studio 2010\Projects\SampleDotNetProject\
    SampleDotNetProject\bin\Debug\SampleDotNetProject.dll

本教程的下一小节将展示如何将消息流开发与 C# 编译结合起来并部署到 Message Broker。


部署到 Message Broker

使用 C# 代码构建编译文件后,可以从 Windows Explorer 窗口中将编译文件直接拖拽到消息流中的 .NETCompute 节点,从而将该节点与代码关联起来。该技巧为编译文件生成了一个硬编码的绝对位置,这在开发、测试和热交换 Broker 执行的 .NET 代码时很有用。然而,对于生产环境,更好的方法是定义一个 Message Broker Configurable 服务,它将指定一个 .NETCompute 节点来定位编译文件。该方法更加动态,更加适合在开发、测试和生产环境之间迁移部署。下图展示了可在多个环境中使用的相同消息流,以及在每个环境中定义编译文件的可配置服务,在每个环境中,编译文件在文件系统中的位置可能有所不同。

可配置的服务

通过下面的步骤,使用该方法并定义一个可配置的服务:

  1. 使用 Windows Explorer 窗口,对编译和调试文件执行复制,文件名分别为 SampleDotNetProject.dllSampleDotNetProject.pdb

    Copy both files from the directory:  
    C:\student\DOTNET\lab_sample\visual studio 2010\Projects\
    SampleDotNetProject\SampleDotNetProject\bin\Debug
    
    To the directory:
    C:\student\DOTNET\lab_sample\AssemblyFile
  2. 使用 Message Broker Explorer 为消息流定义所需的可配置服务,Message Broker Explorer 是一个图形用户界面,可根据 Eclipse 平台管理您的代理。Message Broker Explorer 是对 WebSphere MQ Explorer 的扩展。

    打开 Message Broker Explorer:选择 Start => IBM WebSphere Message Broker 8.0.0.0 => Message Broker Explorer。右键单击您正在使用的运行时代理的 Configurable Services 文件夹并选择 New => Configurable Service

    Message Broker Explorer
  3. 设置以下参数:

    Name:DotNetAppConfigService
    Type:DotNetDomain
    ApplicationBase:C:\student\DOTNET\lab_sample\AssemblyFile

    单击 Finish

    DotNetAppConfigService
  4. 返回到 WebSphere Message Broker Toolkit,并导航到名为 Filter 的 .NETCompute 节点的属性。切换到 Advanced 选项卡,并将 AppDomain 名设置为 DotNetAppConfigService

    .NETCompute 的 Advanced 选项卡
  5. 对消息流中的另外两个 .NETCompute 节点(即 Modify 和 Create 节点)重复最后一步。每个节点都会使用编译文件内部定义的一个类,并且每个节点都将使用前面定义的可配置服务在运行时定位编译文件。
  6. 本教程的其余部分假设您已经创建了一个名为 MB8QMGR 的队列管理器和一个名为 MB8BROKER 运行时代理,该代理也称为 Default Configuration。有关更多信息,请参见 Message Broker 信息中心中的 Creating the Default Configuration
  7. 消息流需要创建两个 MQ 队列,DOTNET.IN 和 DOTNET.OUT。返回到 Message Broker Explorer 并右键单击 Queue Manager 下面的 Queues 文件夹(在下面的屏幕截图中,队列管理器被命名为 MB8QMGR),然后选择 New => Local Queue

    New local queue 向导
  8. 指定名称 DOTNET.IN 并单击 Finish

    创建 DOTNET.IN
  9. 重复最后两个步骤,创建一个名为 DOTNET.OUT 的队列。
  10. 返回到 Message Broker Toolkit 并打开位于 DotNetApplication 内的名为 DotNet.bar 的 BAR 文件。单击 Rebuild and Save

    构建 BAR 文件
  11. 将 BAR 文件 DotNet.bar 拖拽到执行组中,执行部署:

    部署 BAR 文件

本教程的下一节将介绍如何对场景进行测试。


场景测试

本教程的最后一部分将展示如何使用 Message Broker Toolkit 的内置 Test Client,直接从 Message Broker Toolkit 中对整个场景进行测试。

  1. 要测试消息流的顶部分支,请在 DotNetApplication 内展开 Flow Tests 文件夹,并打开名为 DotNetApplication_LoyaltyProgram.mbtest 的文件。测试文件中包含的输入数据如下所示:
    清单 5. LoyaltyProgram 消息样例输入数据
    <LoyaltyProgram
          xmlns:applicant="http://www.example.org/applicant"
          xmlns:store="http://www.example.org/store">
      <applicant:ApplicantDetails>
        <applicant:FirstName>Ben</applicant:FirstName>
        <applicant:LastName>Thompson</applicant:LastName>
        <applicant:HouseNo>1</applicant:HouseNo>
        <applicant:Street>Happiness Avenue</applicant:Street>
        <applicant:Town>Grumpyville</applicant:Town>
      </applicant:ApplicantDetails>
      <store:StoreDetails>
        <store:StoreID>001</store:StoreID>
      </store:StoreDetails>
    </LoyaltyProgram>

    单击右下角的 Send Message 按钮:

    LoyaltyProgram 测试
  2. 运行测试后,应当看到消息的 StoreDetails 部分填充了 StoreName、StoreStreet 和 StoreTown,如下面的红框所示:

    LoyaltyProgram 结果
    下面是输出消息的清单:
    清单 6. LoyaltyProgram 消息样例输出数据
    <?xml version="1.0" encoding="utf-8" standalone="yes"?>
    <LoyaltyProgram
          xmlns:applicant="http://www.example.org/applicant"
          xmlns:store="http://www.example.org/store">
      <applicant:ApplicantDetails>
        <applicant:FirstName>Ben</applicant:FirstName>
        <applicant:LastName>Thompson</applicant:LastName>
        <applicant:HouseNo>1</applicant:HouseNo>
        <applicant:Street>Happiness Avenue</applicant:Street>
        <applicant:Town>Grumpyville</applicant:Town>
      </applicant:ApplicantDetails>
      <store:StoreDetails>
        <store:StoreID>001</store:StoreID>
        <store:StoreName>Broker Brothers Central</store:StoreName>
        <store:StoreStreet>Exuberant Avenue</store:StoreStreet>
        <store:StoreTown>Happyville</store:StoreTown>
      </store:StoreDetails>
    </LoyaltyProgram>
  3. 为了测试消息流的底部分支,在 DotNetApplication 中,展开 Flow Tests 文件夹并打开文件 DotNetApplication_SaleEnvelope.mbtest。测试文件中包含的输入数据见如下内容:
    清单 7. SaleEnvelope 消息样例输入数据
    <SaleEnvelope>
     <Header>
      <SaleListCount>1</SaleListCount>
     </Header>
     <SaleList>
      <Invoice>
       <Initial>K</Initial>
       <Initial>A</Initial>
       <Surname>Braithwaite</Surname>
       <Item>
        <Code>00</Code>
        <Code>01</Code>
        <Code>02</Code>
        <Description>Twister</Description>
        <Category>Games</Category>
        <Price>00.30</Price>
        <Quantity>01</Quantity>
       </Item>
       <Item>
        <Code>02</Code>
        <Code>03</Code>
        <Code>01</Code>
        <Description>The Times Newspaper</Description>
        <Category>Books and Media</Category>
        <Price>00.20</Price>
        <Quantity>01</Quantity>
       </Item>
       <Balance>00.50</Balance>
       <Currency>Sterling</Currency>
      </Invoice>
      <Invoice>
       <Initial>T</Initial>
       <Initial>J</Initial>
       <Surname>Dunnwin</Surname>
       <Item>
        <Code>04</Code>
        <Code>05</Code>
        <Code>01</Code>
        <Description>The Origin of Species</Description>
        <Category>Books and Media</Category>
        <Price>22.34</Price>
        <Quantity>02</Quantity>
       </Item>
       <Item>
        <Code>06</Code>
        <Code>07</Code>
        <Code>01</Code>
        <Description>Microscope</Description>
        <Category>Miscellaneous</Category>
        <Price>36.20</Price>
        <Quantity>01</Quantity>
       </Item>
       <Balance>81.84</Balance>
       <Currency>Euros</Currency>
      </Invoice>
     </SaleList>
     <Trailer>
      <CompletionTime>12.00.00</CompletionTime>
     </Trailer>
    </SaleEnvelope>

    单击右下角的 Send Message 按钮:

    SaleEnvelope 测试
  4. 运行测试后,应当可以看到输出消息采用逗号分隔的形式,如下面的红框所示:

    SaleEnvelope 结果
    下面是输出消息的清单:
    清单 8. SaleEnvelope 消息样例输出数据
    00,01,02,Twister,Games,0.30,1
    02,03,01,The Times Newspaper,Books and Media,0.20,1
    04,05,01,The Origin of Species,Books and Media,22.34,2
    06,07,01,Microscope,Miscellaneous,36.20,1

参考资料

学习

讨论

条评论

developerWorks: 登录

标有星(*)号的字段是必填字段。


需要一个 IBM ID?
忘记 IBM ID?


忘记密码?
更改您的密码

单击提交则表示您同意developerWorks 的条款和条件。 查看条款和条件

 


在您首次登录 developerWorks 时,会为您创建一份个人概要。您的个人概要中的信息(您的姓名、国家/地区,以及公司名称)是公开显示的,而且会随着您发布的任何内容一起显示,除非您选择隐藏您的公司名称。您可以随时更新您的 IBM 帐户。

所有提交的信息确保安全。

选择您的昵称



当您初次登录到 developerWorks 时,将会为您创建一份概要信息,您需要指定一个昵称。您的昵称将和您在 developerWorks 发布的内容显示在一起。

昵称长度在 3 至 31 个字符之间。 您的昵称在 developerWorks 社区中必须是唯一的,并且出于隐私保护的原因,不能是您的电子邮件地址。

标有星(*)号的字段是必填字段。

(昵称长度在 3 至 31 个字符之间)

单击提交则表示您同意developerWorks 的条款和条件。 查看条款和条件.

 


所有提交的信息确保安全。


static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=10
Zone=WebSphere
ArticleID=800972
ArticleTitle=在 WebSphere Message Broker V8 中使用 Microsoft .NET: 第 1 部分:使用 .NETCompute 节点样例
publish-date=03082012