案例研究:If-Trader 订单流程系统
作者:台湾弈飞资讯
英文名称:iF Traders Case Study:i-Freelancer Demo Order Process System
简介
这是一个原应用程序建构在 IIS 6.0、COM 1.5、MSMQ 3.0的网络订单处理系统,利用Application
Server 的新增功能,在对源代码作稍许修改的情况下,对应用程序进行扩展,使之成为具有分单及自动化审核的新程序架构,真正达到“Do more with less”。
首先当我们计划建立一个电子商务网站,需要考虑的网络交易机制基本功能可能有下列几项:客户能在 Internet
24小时完成交易,而业务人员仅可能在某些时段进行审阅订单,在不希望遗失任何一笔订单机会且能非同步完成审核作业的前提下,用现有技术也可以简单地实现,将应用程序部署在 IIS 上,透过 COM 组件将订单资料先暂存于 MSMQ,业务人员从队列读取并审核订单资料,确认订单后再
通过 COM
组件写入数据库,系统架构示意图如下:

原系统架构图
当网站开始营运后,可能陆续引发当初规划时始料未及的需求,每当新需求产生后,程序开发人员便开始重新评估可行性、系统分析设计、编写程序或修改、测试与部署等一连串的繁重的系统开发工作,现在
Windows 2003 所具有的 Application Server
服务平台,在原本服务中新增加许多颇具弹性的功能及作法,使应用程序系统更具安全性、延展性和可管理性。
在上述范例中,我们可能会因使用者的不同,当完成网络下单后,系统能对应不同的作业流程,例如 VIP
级的客户或业务人员代理客户下单时,系统能直接完成确认订单,省略人工审核作业,而其他使用者(一般客户)仍遵循原作业流程。将原系统架构重新调整如下图:

新系统架构
应用 IIS 6.0 应用程序区域及 COM 分区(Partitions) 特性,将接单订单资料分别暂存不同队列中,自动化审阅订单的流程,可以使用 MSMQ 中的触发程序完成订单审核,并调用原有的 COM
组件执行资料处理,整个系统架构看似两个截然不同的应用程序,实际上仅进行少许程序开发,其余的系统改造部份均由 Application Server
平台服务来完成。透过范例程序逐步指引完成,应可以更加明了如何运用 Application Server 所带来的益处。
系统需求
操作系统:Windows 2003
Services:请确认以下服务均以安装并启动
IIS 6.0
COM 1.5
MSMQ 3.0
方法是:添加/删除 Windows 组件 >> Application Server >> 按 [详细信息] >> 选中 [消息队列服务] >>
按 [确定] >> 按 [下一步] >> 按 [完成]
SMTP
方法是:添加/删除 Windows 组件 >> Application Server >> 按 [详细信息] >> 选择[Internet
信息服务(IIS)] >> 按[详细信息] >> 选中 [SMTP Service] >>按 [确定] >> 按 [下一步] >> 按 [完成]
SQL Server 2000
Setup 原系统应用程序
源程序代码解压缩后(以下说明出现 %Root% 表示此路径),计有以下三个文件夹:
DataBase
Doc
SampleCode:包含 iFDemoApplication、iFDemoService 两个文件夹。
请按下列步骤安装:
1、安装 Trade 数据库
开启 [SQL Server 企业管理器]。
Microsoft SQL Server >> SQL Server 组 >> (local)(Windows NT) >>
数据库 >>
按右键 >> 所有任务 >> 还原数据库。
设定 [还原成数据库] 输入:Trade。
选择 [从设备] 还原 >> 按 [选择设备] >> 按 [添加]。
按 […] >> 选择 %Root%\DataBase 文件夹。
选定 [文件名称] 输入:Trade.dmp 。
连续按 3 次 [确定] >> 等候完成再按 [确定]。
关闭 [SQL Server 企业管理器] 。
修改表 config 中的记录为有效的 SMTP 服务器地址。
修改表 Users 中 Email 的字段,将其设定为有效的 Email。
2、部署 Server 端组件及设定
用资源管理器打开 %Root%\SourceCode\iFDemoService 文件夹
执行 [Visual Studio .NET 2003 vsvars32] 进入控制台命令行
在控制台命令行中输入 buildall,按回车生成应用程序
生成完毕后关闭控制台命令行窗口
3、COM 应用程序授权
打开 [组件服务]。
展开 组件服务 >> 计算机 >> 我的电脑 >> COM+ 应用程序 >> iFDemoOrderEntry >> 角色 >>
OrderEntryRole >> 用户
按 [右键] >> [新建] >> [用户] >> 输入:Network >> 按 [确定]
4. 安装效能计数器及环境变数
用资源管理器打开 %Root%\SourceCode\iFDemoService\SetupConfig\bin文件夹。
执行 SetupConfig.exe。
5. 安装 Web 应用程序
打开 [Internet 服务管理器]。
Internet 信息服务 >> (本地计算机) >> 默认 Web 站点 >> 按 [右键] >> [新建] >> [虚拟目录]。
按 [下一步] >> 在 [别名] 中输入:iFDemoWeb。
按 [下一步] >> 按 [浏览] 选择目录>> 选泽 %Root%\iFDemoApplication\iFDemoApplication\iFDemoWeb。
按 [确定]。
按 [下一步] >> 按 [下一步] >> 按 [完成]。
用资源管理器打开 %Root%\SourceCode\iFDemoApplication\iFDemoWeb 文件夹
用记事本打开 Web.config。
修改 ConnDBString 的 Value 设定为 SQL Server 连接字符串。
打开浏览器,输入网址: http://localhost/iFDemoWeb 检查网页是否正常启用,若否检查本项步骤是否正确。
6. 安装 Windows 管理程序
打开 %Root%\iFDemoApplication\iFDemoAdmin\bin 文件夹。
用记事本打开 iFDemoAdmin.exe.config。
修改 ConnDBString 的 Value 设定为 SQL Server 连接字符串。
7. 测试结果
打开浏览器,输入网址: http://localhost/iFDemoWeb。
测试登入:
i. VIP客户使用者名称:user1,密码:9999
ii. 一般客户使用者名称:user2,密码:9999
iii. 内部业务员名称: sales1,密码:9999
执行下单作业
i. 按产品编号右侧 [选择] >> 打开 [选择产品窗口] >> 选择产品分类 >> 选择产品一览表中按 [订购]。
ii. 回到主画面中 >> 按 [加入订购明细]。
iii. 可依上述步骤加入多项明细。
iv. 按下 [确认订单] 即完成下单作业。
执行审核作业
i. 打开 %Root%\iFDemoApplication\iFDemoAdmin\bin\ 文件夹,执行 iFDemoAdmin.exe。
ii. [客户订单处理] 窗口中,按下 [读取资料]。
iii. 按 [确认订单] 即完成审核,记录被添加到 SQL Server,同时系统发出 Email。
iv. 按 [取消订单] 即取消该笔记录。
Setup 新架构应用程序
1、新增本地用户,目的是 IIS 要添加 Pooling 以便指定此用户帐号。
打开控制面板中的管理工具 >> 计算机管理。
管理工具 >> 本地用户和组 >> 用户 >> 按 [右键] >> 新用户。
在用户名称中输入:NetUser1,输入密码并确认密码 >> 取消 [用户下次登入时须更改密码] >> 选中 [密码永
不过期] >>
按 [创建] >> 按 [关闭]。
选择 NetUser1 >> 按 [右键] >> [属性] >> 选择 [隶属于] 标签。
按 [添加] >> 输入:IIS_WPG >> 按 [确定] 。
按 [添加] >> 输入:Performance Log Users >> 按 [确定] 。
按 [添加] >> 输入:Performance Monitor User >> 按 [确定] 。
按 [确定]。
2. 在IIS 6.0上建立新的应用程序区域:
Internet 信息服务 >> (本地计算机) >> 应用程序区域 >> 按 [右键] >> [新
建] >> [应用程序区域] 。
[应用程序区域标识]输入:AppPoolDemo >> 按 [确定]。
Internet 信息服务 >> (本地计算机) >> 应用程序区域 >> AppPoolDemo >> 按 [右键] >> [属性] 。
选择 [身份标识] 标签 。
选中 [设置为],在用户名称栏输入:NetUser1,输入密码
按 [确定]。
3. 在新的应用程序集区中以原程序码建立应用程序:
打开 [Internet 服务管理器]。
Internet 信息服务 >> (本地计算机) >> 网站 >> 默认 Web 网站 >> 按 [右键] >> [新
建] >> [虚拟目录]。
按 [下一步] >> 在 [别名] 中输入:App1Demo 。
按 [下一步] >> 按 [浏览] >> 选择 %Root%\iFDemoApplication\iFDemoApplication\iFDemoWeb
。
按 [确定] >> 按 [下一步] >> 按 [下一步] >> 按 [完成]
Internet 信息服务 >> (本地计算机) >> 网站 >> 默认 Web 网站 >> >> App1Demo >>按 [右键] >> [属性] 。
在 [虚拟目录] 标签页下方的 [应用程序区域] 选择 AppPoolDemo
4. 修改登入画面的程序代码
启动 Microsoft Visual Studio.NET >> 打开 >> 项目 >> 选择
%Root%\ SourceCode\Solution.sln
在 [解决方案] 所列的项目中打开 iFDemoWeb\Login.aspx 源代码文件,将
#Region " 原架构 "
......
#End Region
中的程序代码选取并将它注释掉,使程序不执行。
在 Login.aspx.vb 源代码文件
#Region " 新架构程序码 "
......
#End Region
中的程序代码选取并取消注释,使程序可执行。
重新生成项目: [生成] >> [生成 iFDemoWeb]。
5. 生成第二个消息队列,并设定其触发程序
打开 [管理工具] >> [计算机管理]。
计算机管理(本地) >> 服务和应用程序 >> 消息队列 >> 触发程序 >> 规则 >> 按 [右键] >> [新增] >> [规则] 。
在规则名称输入:TransferOrder >> [下一步] 。
[条件:] 请选择 信息标签不包含,[筛选器数值/字串:] 请输入 Customer >> 按 [新增] >> 按[下一步]。
在[组件ProgID]中请输入:iFDemo.OrderProcess.QueueTrigger,在[方法名称] 中请输入: Transfer。
按 [参数] >> 打开 [调用参数] 窗口 。
选择参数的下拉菜单中的 [队列路径名称(String 类型)] >>按[新增] ,[消息ID(Variant 类型)] >>按[新增] >> 按
[确定] >> 按[完成]。
计算机管理(本地) >> 服务和应用程序 >> 消息队列 >> 专用队列 >> 按 [右键] >> [新增] >>
专用队列 。
在 队列名称 中输入: iFDemo_ExpressOrder >>按 [确定] 。
展开 iFDemo_ExpressOrder >> 触发程序 >> 按 [右键] >> [新增] >> [触发程序] 。
在[触发程序名称]中输入: TriggerTransferOrder >> 按 [下一步]。
左侧 [规则] 中选取 TransferOrder >> 按 [附加] >> 按 [完成]。
6. 建立 COM 分区
打开 [组件服务]。
主控台根目录 >> 组件服务 >> 我的电脑 >> 按 [右键] >> [属性]
选择 [选项] 标签页,选中 [启用分隔] >> 按 [确定] 。
主控台根目录 >>组件服务 >> 我的电脑 >> COM 分区 >> 按 [右键] >> [新增] >> [分区] >> [下一步] 。
按 [建立一个空的分区] >> 在 [名称] 中输入 COMPart2 >> [下一步] >> [完成]。
7. 指定 COM 分区用户
主控台根目录 >>组件服务 >> 我的电脑 >> COM 分区用户 >>按 [右键] >> [新增] >> [使用者] 。
按 [新增] >> 输入: NetUser1 >> [确定] >> [确定]。
主控台根目录 >>组件服务 >> 我的电脑 >> COM 分区 >> COMPart2 >> 角色 >> 启动器 >> [用户使用者] 。
按 [新增] >> 输入: NetUser1 >> [确定] >> [确定]。
8. 在新的 COM 分区中建立 COM 应用程序
主控台根目录 >>组件服务 >> 我的电脑 >> COM 分区 >> COMPart2 >> COM 应用程序 >>按 [右键] >>
[新增] >> [应用程序] 。
[下一步] >> [建立空的应用程序] >> 输入 iFDemoExpressOrder >> 按4次 [下一步] >> [完成] 。
选择 iFDemoExpressOrder>> 组件 >> 按[右键] >> [新增] >>组件
[下一步] >> 安装新组件 >> 选择
%Root%\ iFDemoService\OrderEntry\bin\iFDemo.OrderEntry.dll
>> [开启] >> [下一步] >> [完成] 。
展开 iFDemoExpressOrder >> 组件 >> iFDemo.OrderProcess.OrderEntry >> 按[右键]
>> [属性] 。
选择 [启动标签] >> 选中 [启动对象建立] >> 在 [建立函数字符串] 中请输入: .\\private$\\iFDemo_ExpressOrder。
主控台根目录 >>组件服务 >> 我的电脑 >> COM 分区 >> COMPart2 >> COM 应用程序 >> iFDemoExpress >> 角色 >> OrderEntryRole >>
用户
按 [右键] >> [新增] >> [用户] >> 输入: NetUser1 >> 按 [确定]
9. 测试结果
打开浏览器输入网址: http://localhost/iFDemoWeb,
用VIP客户用户名称: user1,密码: 9999,登入成功后网址应为http://localhost/App1Demo/Order/OrderProcess.aspx,接续完成下单作业,系统将直接确认订单并发出 Email。
一般客户用户名称: user2,密码: 9999,登入成功后网址应为http://localhost/iFDemoWeb/Order/OrderProcess.aspx,接续完成下单作业,系统将订单
记录保留在消息队列中,等候执行
%Root%\iFDemoApplication\iFDemoAdmin\\bin\ iFDemoAdmin.exe
进行订单人工审核确认作业。
用业务用户名称: sales1,密码: 9999,登入成功后网址应为http://localhost/App1Demo/Order/OrderProcess.aspx,接续完成下单作业,系统将直接确认订单并发出 Email。