65.9K
CodeProject 正在变化。 阅读更多。
Home

设计突破:低成本的企业 Web 服务

starIconstarIconstarIconstarIconstarIcon

5.00/5 (2投票s)

2006年9月5日

CPOL

10分钟阅读

viewsIcon

26960

使用我们快速的Web服务生成工具,为现有的大型机、AS/400、iSeries和UNIX应用程序快速启动您的项目。

没有服务的面向服务架构有什么用?

有许多很好的方法可以利用面向服务架构(SOA),也称为一堆Web服务。熟悉Visual Studio Web引用功能的CodeProject成员都知道,指向服务器并访问其可用Web服务调用是多么容易。除了Visual Studio之外,还有许多可用的商业产品和库可以消费Web服务,但前提是Web服务可用!

如今,消费现有Web服务并在创建新颖酷炫事物(例如用户设计的可视化工作流解决方案)中利用它的能力已经广泛可用。

在已经拥有在后端UNIX服务器上运行的完整基于终端的订单录入系统的组织中,实现那十五个Web服务调用以启用一个像样的订单录入系统?这并不那么容易实现,也不那么容易。需要花费大量时间(数天/数周/数月)来实施,还需要更多时间(数天/数周/数月)来可靠地测试并投入生产。

谁还在乎老旧的UNIX VT100或IBM大型机应用程序?

如果您唯一需要处理的应用程序都是现代的、架构良好的SQL/Server .NET应用程序,那么您可能有比阅读本文更好的事情要做。但是,如果您工作的任何组织或合作的任何组织正在使用IBM大型机、IBM iSeries/i5 (AS/400)、DEC/VAX或UNIX应用程序,那么我们将解释我们在Web服务开发方面的**突破**。

这为什么是“突破”?

自1970年代以来,使用API连接现有终端环境以利用底层业务功能一直被使用。尽管许多人不喜欢,但它通常被称为“屏幕抓取”。过去,使用低级API集读写“绿屏”,然后模拟“ENTER”键以进入下一个屏幕,可能涉及一些繁琐、混乱的编码。因此,有些人倾向于避免“绿屏”,转而选择“绿地”项目,从头开始,也许使用现代的关系数据库...

但是,如果所有这些屏幕背后的现有功能(包括数据输入和更新)都可以通过高级工具集轻松快速地封装起来呢?如果您的“绿地”不是空的SQL Server目录,而是一套全面的Web服务,可以处理所有繁重的工作,而您只需要实现一个全新的用户界面或工作流解决方案呢?

这就是我正在撰写的突破,它已于本月随着Flynet Viewer Studio的普遍发布而推出。这是Flynet Viewer版本4发布的一部分,这是一个开发工具套件和功能强大的基于Windows的终端仿真服务器。

隆重推出Flynet Viewer V4 Studio

我们Inventu公司自大型机集成伊始就参与其中,从未见过任何产品在开发简易性、成功速度和最终产品深度方面能与本产品媲美。Flynet Viewer Studio,来自英国的Flynet LTD,是一款100% .NET产品,与Flynet Viewer V4一同,包含以下功能:

  • 熟悉的集成开发环境(IDE)用户界面
  • 记录器用于记录和编码用户如何与主机应用程序交互
  • 可视化映射用于定义和命名已记录的屏幕和数据字段
  • 可视化工作流建模器用于定义ASMX模块和可用方法
  • 集成的CodeSmith代码生成技术
  • VS2003和VS2005生成100% Visual Studio Web服务解决方案
  • 对于Framework 2.0,可选即时发布Web服务(无需Visual Studio)

该产品最具革命性的功能是代码生成框架。只需记录用户与现有应用程序的几次交互(以及在IDE的属性表中进行的开发人员设置),该框架就能够分析屏幕之间的导航并生成一个完整的Web服务文件夹,包括查询和输入/更新操作。

有了这个新的开发框架,如果你能在用户的终端模拟屏幕上看到它运行,你就能用它来发布一个Web服务。

三步创建Web服务

感谢Flynet Viewer Studio强大、灵活且可扩展的代码生成架构,我们可以帮助您通过三个步骤快速创建Web服务:

图1:Flynet Viewer创建Web服务的三个步骤

使用Flynet Viewer工具集构建Web服务涉及三个主要步骤:记录应用程序、映射字段和设计工作流,以及运行代码生成向导。映射字段、设置对象属性和设计工作流要求开发团队中至少有一名成员了解主机应用程序的工作原理以及Flynet工具集的工作原理。这对于现有的主机系统开发人员来说可能是一个理想的角色,也是COBOL或RPG开发人员接触和培训.NET开发的一个绝佳途径。

生成的Web服务

如果你和我一样,当你听到“代码生成器”时,你的第一个问题是“垃圾生成器?”毕竟,许多产品都基于专有二进制格式或晦涩难懂的专有脚本语言生成应用程序。我评估过的其他产品生成的代码则类似于《国际混淆C代码大赛》中的一个条目!

敏锐的读者可能会注意到,我只问那些我可以对我有利的问题。所以,不,Studio生成的代码不是垃圾!它的结构良好,有文档,并且具有清晰的类设计。事实上,生成的应用程序框架和代码类基于Inventu咨询服务交付的多个客户应用程序,这些应用程序已经上线并投入生产一年多。

即使是垃圾代码,您也对生成的代码拥有完全控制权,因为生成中使用的所有CodeSmith模板都以源代码格式随产品安装提供。我们期望并鼓励我们的客户和咨询合作伙伴调整模板以最适合他们的需求。

图2:生成的Web服务运行时环境

上面是组成生成的Web服务组件的高级图。作为一个标准的ASP.NET应用程序,Web服务获得了ASP.NET SOAP支持的所有优势,以及备受赞誉的HTML测试界面。上图中唯一的“黑盒”是核心仿真服务本身;所有用户逻辑和Web服务定义都使用标准的.NET和Visual Studio解决方案实现。

谢谢你,CodeSmith

几年前当我们开始设计Studio时,我们就知道应用程序生成对于产品的成功至关重要。我们也知道代码生成需要高度的可扩展性和灵活性,否则那些吹毛求疵的细节会剥夺我们交付高质量最终产品所需的生产力。

很早我们就选择了CodeSmith作为我们的代码生成“伙伴”,并且在Viewer Studio的每个副本中都获得了他们的代码生成技术许可。这使我们能够在“我们的”Studio中创建自定义属性网格类,以便在CodeSmith模板生成时插入属性和整套逻辑。

最终结果是一个功能强大的代码生成环境,具有我们早期所寻求的灵活性和可扩展性。用于编辑模板的CodeSmith Studio在实现我们的目标方面特别有价值。所以,谢谢你,CodeSmith :)

已准备好与Framework 2.0一起运行

代码生成框架同时支持.NET Framework 1.1 (VS2003) 和 Framework 2.0 (VS2005),只需在向导中通过一个简单的单选按钮选择目标。

对于Framework 2.0,由于与基础框架中包含的MSBUILD实用程序集成,生成的Visual Studio 2005解决方案“随时可用”MSBUILD。这意味着代码生成向导会询问

图3:Framework 2.0 包含 MSBuild 支持;无需 Visual Studio

准备在 Visual Studio 中加载

生成的解决方案包含多个项目,这些项目基于应用程序的功能区域。Visual Studio 2003 和 Visual Studio 2005 都受支持,并且为每个版本生成一个解决方案文件。为了使操作更简便,向导会创建一个可选的桌面文件夹,提供指向<解决方案名称>.sln 文件的便捷链接。

图4:带便捷链接的可选桌面文件夹

加载解决方案后,解决方案资源管理器将包含多个项目,包括对 web 文件夹的引用(如果安装了 ASP.NET 2.0 和 Visual Studio 2005),如下图所示:

此解决方案包含以下项目:

等等 包括杂项类、调试记录器、枚举等
.../web 这是ASP.NET 2.0的Web文件夹,包含提供Web服务接口的ASMX文件和代码隐藏文件
登录编辑器 可选的WinForms项目,用于维护池会话密码(使用RijndaelManaged .NET支持加密)
会话池 可选的池会话类,提供在共享主机会话池的请求之间的高速切换
Tasks(任务) 为ASMX模块提供会话控制、导航和视图状态管理的工作流管理类和方法
任务/列表 用于管理多行列表的特殊类,支持通过多个屏幕进行分页并选择行进行进一步操作

图5:生成的Visual Studio解决方案

生成的代码需要调整吗?

这个问题的明确答案是所有此类问题的标准答案:“也许吧。”

我们认为最能受益于调整的领域是Web服务接口和屏幕导航。在公共WebMethod方法中声明的参数以及返回的对象可以在不影响屏幕交互发生的情况下进行调整。

以下代码片段显示了一个生成的WebMethod调用,其中包含两个关键的可变参数,可以根据您希望发布此方法的方式进行重命名、删除或添加。

[WebMethod(Description="Start the UpdateAccount workflow, 
                        return the AcctUpdate data")]
public UpdateAccountInfo UpdateAccountGetAcctUpdate(string sessionKey, 
                         string Company, string AccountOrPolicy)
{
   UpdateAccountInfo info=new UpdateAccountInfo("ok");
   TaskSession ts=null;
   try
   {
      ts=TaskSession.GetSavedSession(sessionKey);
      #if DEBUG
      if (ts!=null)
       ts.Dbg.Explain("CodePoint #11",
          "Update.UpdateAccountGet Web Service Method...a data update method "
        + "The ioType for the ProjectTask and " 
        + "this ProjectScreen is Edit_Existing_Data. "
        + "The sessionKey ("+sessionKey+") was " 
        + "used to pull the TaskSession object "
        + "from the TaskSession static storage" 
        + " using the GetSavedSession method."); 
      #endif
      UpdateAccountTask task=
        (UpdateAccountTask) ts.SetActiveTask(TaskID.UpdateAccount);
      IOBag ioBag=new IOBag(7);
      ioBag[FieldID.Company]=Company;
      ioBag[FieldID.AccountOrPolicy]=AccountOrPolicy;
      ts.Dbg.Log("WSTask","Update.UpdateAccountGetAcctUpdate Top, 
                  ioBag contents=",ioBag);
      task.Start(ioBag);
      task.ReadAcctUpdate(info);
   } 
   catch (System.Exception ex)
   {
      info.status="Exception";
      info.message=ex.Message+":\r\n"+ex.ToString();
      ts.Dbg.Log(LogLevelEnum.ExceptionsOnly, "WSExcpt",
                 "Update.UpdateAccount Exception, " + 
                 "info.status=\""+info.status+"\", 
                 info.message=\""+info.message+"\""); 
   }
   return info;
}

图6:来自生成的ASMX模块的示例Web服务方法

支持非标准主机应用程序

主机应用程序用户面临的挑战之一是许多独特且有时古怪的用户界面。虽然这有力地证明了使用现代.NET应用程序作为这些屏幕的前端是合理的,但对于Flynet代码生成向导来说,这是一个挑战。

在Inventu和Flynet,我们预计并支持客户主机系统中会破坏或损害Flynet Studio代码生成向导的活动内部规则库的应用程序。支持这些非标准应用程序是一个简单的过程:

  • 在我们的网络帮助台提交工单
  • 描述无法正常生成的工作流目标
  • 将您的Studio项目文件和主机屏幕记录压缩并附加到工单中

使用标准的 Flynet Viewer 模拟主机服务,我们的支持团队将根据您提供的录制文件复制您的主机应用程序(无需连接到您的主机)。然后,我们将分析屏幕和工作流,并将缺失的规则添加到代码生成引擎和模板中。更新后的代码生成程序集和模板将发布回工单,并添加到产品更新下载中。

此服务对客户免费。我们也向愿意根据我们努力的成功而承诺未来购买的评估者提供此服务。

向导进行中

凭借代码生成技术为创建Web服务解决方案而生的强大功能,Flynet Viewer的开发人员正在忙于未来的应用程序向导。

其中第一个预计将于今年晚些时候推出,是一个用于从完整的绿屏到Visual Studio ASP.NET用户界面解决方案的生成向导。

结论

Flynet Viewer V4 Studio为.NET开发团队在将新的.NET项目与现有企业应用程序连接方面的能力带来了根本性的改进。Viewer“即见即用”地将现有基于屏幕的主机应用程序发布为Web服务的能力,将面向服务架构的真正承诺带给了.NET。

**CodeSmith和Microsoft是其各自组织在美国和/或其他国家的注册商标。

© . All rights reserved.