Delphi.NET多层应用系统开发技术研讨会

Delphi.NET多层应用系统开发技术研讨会

从上个星期就开始有朋友问我为什么很久没有更新Blog了,其实我想我写Blog已经很勤快了,这次10多天没有更新Blog想当然是我又开始出差了。上星期台湾进行了『Delphi.NET多层应用系统开发技术研讨会』,在DevCo重新在台湾举办活动1,2个月之后,的确发现慢慢的一些客户开始回流来参加研讨会了,这是个好现象,也让我有机会和一些朋友谈谈他们的工作近况以及他们希望能够听到什么主题的研讨会。而之所以DevCo会在上星期举行『Delphi.NET多层应用系统开发技术研讨会』就是因为许多朋友都在询问如何把应用程序移植到.NET以及如何让他们能够使用ASP.NET开发新的Web应用程序但是又能够同时使用现有的Midas/DataSnap应用系统。

其实要让新的.NET应用系统和现有的Midas/DataSnap应用系统整佑在一起不困难,要解决的问题就只是让.NET客户端呼叫到Midas/DataSnap应用系统以及如何在两个执行环境中进行数据型态的转换。

<shapetype id="_x0000_t75" stroked="f" filled="f" path="m@4@5l@4@11@9@11@9@5xe" o:preferrelative="t" o:spt="75" coordsize="21600,21600"><img height="398" alt="" width="531" src="http://tkfiles.storage.msn.com/x1phiCZJPhsUYg-Rf0H_plhORTWNMjgFIHt76JwRq26c6f1TGqbOJIItzXC0q1zmURx2gBIAD1v3DR_hKj9siTA_rsqJ6UKKgG8whUkAMxl3BMtMxE3iuEK_W2VedABA5QwupJYJDX4hyc"><stroke joinstyle="miter"></stroke><formulas><f eqn="if lineDrawn pixelLineWidth 0"></f><f eqn="sum @0 1 0"></f><f eqn="sum 0 0 @1"></f><f eqn="prod @2 1 2"></f><f eqn="prod @3 21600 pixelWidth"></f><f eqn="prod @3 21600 pixelHeight"></f><f eqn="sum @0 0 1"></f><f eqn="prod @6 1 2"></f><f eqn="prod @7 21600 pixelWidth"></f><f eqn="sum @8 21600 0"></f><f eqn="prod @7 21600 pixelHeight"></f><f eqn="sum @10 21600 0"></f></formulas><path o:connecttype="rect" gradientshapeok="t" o:extrusionok="f"></path><lock aspectratio="t" v:ext="edit"></lock></shapetype><shape id="_x0000_i1025" style="WIDTH: 398.25pt; HEIGHT: 298.5pt" alt="" type="#_x0000_t75"><imagedata src="file:///C:%5CDOCUME~1%5CADMINI~1.1F0%5CLOCALS~1%5CTemp%5Cmsohtml1%5C01%5Cclip_image001.jpg" o:href="http://tkfiles.storage.msn.com/x1phiCZJPhsUYg-Rf0H_plhORTWNMjgFIHt76JwRq26c6f1TGqbOJIItzXC0q1zmURx2gBIAD1v3DR_hKj9siTA_rsqJ6UKKgG8whUkAMxl3BMtMxE3iuEK_W2VedABA5QwupJYJDX4hyc"></imagedata></shape>

使用.NETInterOp2技术就可以让.NET客户端呼叫到Midas/DataSnap应用系统,至于数据型态转换就有点困难。最简单的想法就是让两边都使用XML来交换数据,但是唯一的麻烦就是Midas/DataSnap在许多方法中都是以OleVariant的型态来封装数据,因此.NET的客户端必须知道如何处理Midas/DataSnap传递来的OleVariant资料封包,并且从其中撷取出以XML封装性的真正数据。

<shape id="_x0000_i1026" style="WIDTH: 398.25pt; HEIGHT: 298.5pt" alt="" type="#_x0000_t75"><imagedata src="file:///C:%5CDOCUME~1%5CADMINI~1.1F0%5CLOCALS~1%5CTemp%5Cmsohtml1%5C01%5Cclip_image003.jpg" o:href="http://tkfiles.storage.msn.com/x1phiCZJPhsUYg-Rf0H_plhOfUMCKEoCkAyQRHMxxJarvXSJDOYTEEz35S94Oyar_OE_MfA21F0pdV0eRNAzE_xEX34R_6gWE50WOsmYTcaA0CSaqkdoKfSEhdXp1h3e2DfDVaWcFoRCzI"></imagedata></shape>

还好我们可以在Delphi『隐诲』的文件中找到一丝曙光:

<shape id="_x0000_i1027" style="WIDTH: 398.25pt; HEIGHT: 189.75pt" alt="" type="#_x0000_t75"><img height="253" alt="" width="531" src="http://tkfiles.storage.msn.com/x1phiCZJPhsUYg-Rf0H_plhOb9ua80j0uo9PwXgP0gGOSO_rl0DumrBYdVab9CHdpGnEEpZDrfRn1SLGCaj1k6lcOfCbWF4n30cbX4pdKTGPdeclpSgNoF4Io1H9CLFtuE9TDMS2tupv7A"><imagedata src="file:///C:%5CDOCUME~1%5CADMINI~1.1F0%5CLOCALS~1%5CTemp%5Cmsohtml1%5C01%5Cclip_image005.jpg" o:href="http://tkfiles.storage.msn.com/x1phiCZJPhsUYg-Rf0H_plhOb9ua80j0uo9PwXgP0gGOSO_rl0DumrBYdVab9CHdpGnEEpZDrfRn1SLGCaj1k6lcOfCbWF4n30cbX4pdKTGPdeclpSgNoF4Io1H9CLFtuE9TDMS2tupv7A"></imagedata></shape>

原来OleVariant/Variant可以对映成.NETSystem.Object或是Delphi.NET重新定义的TObject

有了这两个知识之后我们就可以让.NET客户端和Midas/DataSnap应用系统整合了,在『Delphi.NET多层应用系统开发技术研讨会』中,我从 BDE的项目开始讨论如何移植到.NET,接着讨论dbExpress项目,最后讨论移植Midas/DataSnap应用系统整合并且开发.NETWindows FromASP.NET应用程序来呼叫并且使用Midas/DataSnap应用系统提供的服务和数据, 例如下图是Win32 VCL Form以及.NET Windows Form同时呼叫COM+Midas/DataSnap服务器的执行画面:

<shape id="_x0000_i1028" style="WIDTH: 398.25pt; HEIGHT: 298.5pt" alt="" type="#_x0000_t75"><img height="398" alt="" width="531" src="http://tkfiles.storage.msn.com/x1phiCZJPhsUYg-Rf0H_plhOaQCV34SyiBM-HfF1QIekKNlbM8v8rgOCVSIySCYjTxSOxKRMZAskHrJ-fLP9cgmaIIXh7Gh7U-za-sv0I1YEn2Ec5AuLPZVzGWwntXUQIBUF1yBxsYYwa8"><imagedata src="file:///C:%5CDOCUME~1%5CADMINI~1.1F0%5CLOCALS~1%5CTemp%5Cmsohtml1%5C01%5Cclip_image007.jpg" o:href="http://tkfiles.storage.msn.com/x1phiCZJPhsUYg-Rf0H_plhOaQCV34SyiBM-HfF1QIekKNlbM8v8rgOCVSIySCYjTxSOxKRMZAskHrJ-fLP9cgmaIIXh7Gh7U-za-sv0I1YEn2Ec5AuLPZVzGWwntXUQIBUF1yBxsYYwa8"></imagedata></shape>

而下面是最后在研讨会中的范例,我使用Delphi 2006开发一个ASP.NET的应用程序来呼叫Midas/DataSnap应用系统提供的服务和数据并且显示在浏览器中,您可以看到使用Delphi 7开发的VCL Form应用程序也在执行,而且Midas/DataSnapCOM+服务器也在运转中同时提供Win32.NET的客户端服务。

<shape id="_x0000_i1029" style="WIDTH: 398.25pt; HEIGHT: 298.5pt" alt="" type="#_x0000_t75"><img height="398" alt="" width="531" src="http://tkfiles.storage.msn.com/x1phiCZJPhsUYg-Rf0H_plhOS6ZqkVW3p464AhgoLNHcJbeGG4jc6TsYv6jYIyq0JoiYRV3uaTdpTeQyKv-G88IvvVLwowntmH7Gn75HkBQVl7DDP2_hAR76BNnVRwbRCzyvwh3hZds7s0"><imagedata src="file:///C:%5CDOCUME~1%5CADMINI~1.1F0%5CLOCALS~1%5CTemp%5Cmsohtml1%5C01%5Cclip_image009.jpg" o:href="http://tkfiles.storage.msn.com/x1phiCZJPhsUYg-Rf0H_plhOS6ZqkVW3p464AhgoLNHcJbeGG4jc6TsYv6jYIyq0JoiYRV3uaTdpTeQyKv-G88IvvVLwowntmH7Gn75HkBQVl7DDP2_hAR76BNnVRwbRCzyvwh3hZds7s0"></imagedata></shape>

Delphi.NET多层应用系统开发技术研讨会』是有关Delphi/Delphi.NET多层应用系统开发的第一个研讨会,在下次DevCo将会举办第2次的『Delphi.NET多层应用系统开发技术研讨会』,内容是讨论如何在桌面型,主从架构,以及多层架构中都可以重复使用由ECO开发出来的企业逻辑模型。

<shape id="_x0000_i1030" style="WIDTH: 398.25pt; HEIGHT: 298.5pt" alt="" type="#_x0000_t75"><img height="398" alt="" width="531" src="http://tkfiles.storage.msn.com/x1phiCZJPhsUYg-Rf0H_plhOSLgxK8fvg_gAOqxmbReRJOEig-dgSLrYoi8_VGOEqPDidZoKY0bKY4rZvI7APGf6RQow4d0FjkhZwjEhBAY4v4b1nOmOKx8t3Di0FYSZJkYvSiiBhQYYEQ"><imagedata src="file:///C:%5CDOCUME~1%5CADMINI~1.1F0%5CLOCALS~1%5CTemp%5Cmsohtml1%5C01%5Cclip_image011.jpg" o:href="http://tkfiles.storage.msn.com/x1phiCZJPhsUYg-Rf0H_plhOSLgxK8fvg_gAOqxmbReRJOEig-dgSLrYoi8_VGOEqPDidZoKY0bKY4rZvI7APGf6RQow4d0FjkhZwjEhBAY4v4b1nOmOKx8t3Di0FYSZJkYvSiiBhQYYEQ"></imagedata></shape>

我知道我大陆的同事这星期也要开始在4个城市进行Delphi2006技术研讨会,这是3,4年以来我第一次无法去大陆进行研讨会,在此先祝福他们顺利,成功了。

<shape id="_x0000_i1031" style="WIDTH: 1in; HEIGHT: 54pt" alt="" type="#_x0000_t75" href="http://tkfiles.storage.msn.com/x1phiCZJPhsUYg-Rf0H_plhORTWNMjgFIHt76JwRq26c6f1TGqbOJIItzXC0q1zmURx2gBIAD1v3DR_hKj9siTA_rsqJ6UKKgG8whUkAMxl3BMtMxE3iuEK_W2VedABA5QwupJYJDX4hyc" target="_blank" o:button="t"><imagedata src="file:///C:%5CDOCUME~1%5CADMINI~1.1F0%5CLOCALS~1%5CTemp%5Cmsohtml1%5C01%5Cclip_image013.jpg" o:href="http://tkfiles.storage.msn.com/x1phiCZJPhsUYg-Rf0H_plhORTWNMjgFIHtOENQoHd_yWgo42N8L48qDbKnpTef0Rn8L-Ccfg9LJSIdi78fLw2oYYHEIRkykVvKedtmHRvCyNs"><font face="Times New Roman" size="3"></font></imagedata></shape>

<shape id="_x0000_i1032" style="WIDTH: 1in; HEIGHT: 54pt" alt="" type="#_x0000_t75" href="http://tkfiles.storage.msn.com/x1phiCZJPhsUYg-Rf0H_plhOfUMCKEoCkAyQRHMxxJarvXSJDOYTEEz35S94Oyar_OE_MfA21F0pdV0eRNAzE_xEX34R_6gWE50WOsmYTcaA0CSaqkdoKfSEhdXp1h3e2DfDVaWcFoRCzI" target="_blank" o:button="t"><imagedata src="file:///C:%5CDOCUME~1%5CADMINI~1.1F0%5CLOCALS~1%5CTemp%5Cmsohtml1%5C01%5Cclip_image014.jpg" o:href="http://tkfiles.storage.msn.com/x1phiCZJPhsUYg-Rf0H_plhOfUMCKEoCkAy3PcGjWdo7tlFQwPmaKRAxWy_f5vfI7nGKGtjH4H7SOYX7J_qky5dSo3Uod04powD12JlyjFLbfA"></imagedata></shape>

<shape id="_x0000_i1033" style="WIDTH: 1in; HEIGHT: 54pt" alt="" type="#_x0000_t75" href="http://tkfiles.storage.msn.com/x1phiCZJPhsUYg-Rf0H_plhOaQCV34SyiBM-HfF1QIekKNlbM8v8rgOCVSIySCYjTxSOxKRMZAskHrJ-fLP9cgmaIIXh7Gh7U-za-sv0I1YEn2Ec5AuLPZVzGWwntXUQIBUF1yBxsYYwa8" target="_blank" o:button="t"><imagedata src="file:///C:%5CDOCUME~1%5CADMINI~1.1F0%5CLOCALS~1%5CTemp%5Cmsohtml1%5C01%5Cclip_image015.jpg" o:href="http://tkfiles.storage.msn.com/x1phiCZJPhsUYg-Rf0H_plhOaQCV34SyiBMPLQxDwfPVWZaNSf0yb1tWJdbNIfYjQXHHORH-Qe91RT7C1Nfjo7_-RVgaXY7xrGyFIf5OZW13E8"><font face="Times New Roman"></font></imagedata></shape>

<shape id="_x0000_i1034" style="WIDTH: 1in; HEIGHT: 54pt" alt="" type="#_x0000_t75" href="http://tkfiles.storage.msn.com/x1phiCZJPhsUYg-Rf0H_plhOS6ZqkVW3p464AhgoLNHcJbeGG4jc6TsYv6jYIyq0JoiYRV3uaTdpTeQyKv-G88IvvVLwowntmH7Gn75HkBQVl7DDP2_hAR76BNnVRwbRCzyvwh3hZds7s0" target="_blank" o:button="t"><imagedata src="file:///C:%5CDOCUME~1%5CADMINI~1.1F0%5CLOCALS~1%5CTemp%5Cmsohtml1%5C01%5Cclip_image016.jpg" o:href="http://tkfiles.storage.msn.com/x1phiCZJPhsUYg-Rf0H_plhOS6ZqkVW3p46Cd4MzwOI2IoYpwHgAeiEYV-7Q86k0iI3DhTKC5aYsr-uyq7mTLoMkDQMRpEgQbr31OcuErzUv3s"></imagedata></shape>

<shape id="_x0000_i1035" style="WIDTH: 1in; HEIGHT: 34.5pt" alt="" type="#_x0000_t75" href="http://tkfiles.storage.msn.com/x1phiCZJPhsUYg-Rf0H_plhOb9ua80j0uo9PwXgP0gGOSO_rl0DumrBYdVab9CHdpGnEEpZDrfRn1SLGCaj1k6lcOfCbWF4n30cbX4pdKTGPdeclpSgNoF4Io1H9CLFtuE9TDMS2tupv7A" target="_blank" o:button="t"><imagedata src="file:///C:%5CDOCUME~1%5CADMINI~1.1F0%5CLOCALS~1%5CTemp%5Cmsohtml1%5C01%5Cclip_image017.jpg" o:href="http://tkfiles.storage.msn.com/x1phiCZJPhsUYg-Rf0H_plhOb9ua80j0uo9rIalOdqT8hSLWJSbGF1J522HiItHqMBMBl73MU7K4pZpi6vC0RHSCX7HCy7-NeSTlJGHvBthhfw"><font face="Times New Roman"></font></imagedata></shape>

<shape id="_x0000_i1036" style="WIDTH: 1in; HEIGHT: 54pt" alt="" type="#_x0000_t75" href="http://tkfiles.storage.msn.com/x1phiCZJPhsUYg-Rf0H_plhOSLgxK8fvg_gAOqxmbReRJOEig-dgSLrYoi8_VGOEqPDidZoKY0bKY4rZvI7APGf6RQow4d0FjkhZwjEhBAY4v4b1nOmOKx8t3Di0FYSZJkYvSiiBhQYYEQ" target="_blank" o:button="t"><imagedata src="file:///C:%5CDOCUME~1%5CADMINI~1.1F0%5CLOCALS~1%5CTemp%5Cmsohtml1%5C01%5Cclip_image018.jpg" o:href="http://tkfiles.storage.msn.com/x1phiCZJPhsUYg-Rf0H_plhOSLgxK8fvg_gfVKJM1-I1Jn8VSeMt-89YFNKf1N8Zd_g_3Y690LsBaNlTz9w-EfKQlS4UFWcilCwFC_z0RqEYJ0"></imagedata></shape>

李维先生简体版博客由博文视点陈元玉编辑负责繁转简以及版式设计,如有疑问敬请您与编辑联系,联系方式:

chenyy@broadview.com.cn

本方案用提供Delphi7与.NET程序的协同开发, .NET程序开发服务端, Delphi7客户端。客户端只需实现界面、用户输入操作 及错误显示(提示),其他操作(包括对客户端数据集或者单条记录的校验都是发回到服务端进行的)都在服务端完成。服务端 支持部署在Web服务器(IIS, Webservice)或者独立服务器(可作为Windows程序独立运行或者Windows服务运行,TCP协议)。 "友一分销管理系统"是基于该框架实现的,详见"POS管理用户手册.doc",初始设置见"Readme.doc"。 一 .NET(C#)服务组件说明 .NET(C#)服务组件开发基于DotNetFrame4.0, 服务端集成Castle实现对AOP的支持。只要在项目中引用BuleCommon.dll程序集, 类(Class)继承于BuleCommon.BuEntity.BuEntityObj, 并且在类和方法前指定[BuleCommon.BuEntity.BuEntityAttribute()] 特性, 实现Bule_EntityRegClass : IBule_EntityRegClass注册类完成服务组件注册即可。 服务组件类框架: using BuleCommon; using BuleCommon.BuEntity; namespace BuJxcData { [BuEntity()] //使客户端能获取该服务组件(class) public class BuIOBillValidate : BuEntityObj { [BuEntity(BuEntityMethod.bemValidate)] //使客户端能获取该服务组件单记录校验方法 public virtual bool Buf_CallCalcFields(ref BuleEntityCall EntityData, ref BuRecordSet RecordSet) { } [BuEntity(BuEntityMethod.bemValidates)]//使客户端能获取该服务组件多记录校验方法 public virtual bool Buf_RefreshPriceList(ref BuleEntityCall EntityData, ref DataSet ds) { } } [BuEntity()] //使客户端能获取该服务组件(class) public class BuCustomers : BuEntityObj { [BuEntity(BuEntityMethod.bemGetName)]//使客户端能获取该服务组件根据代码获取信息方法 public BuRecordSet Buf_GetCustData(ref BuleEntityCall EntityData) { } } [BuEntity()]//使客户端能获取该服务组件(class) public class BuStockCgInBill : BuEntityObj { [BuEntity(BuEntityMethod.bemOpen)]//使客户端能获取该服务组件打开方法 public virtual DataSet Buf_OpenBillData(ref BuleEntityCall EntityData) { } [BuEntity(BuEntityMethod.bemSave)]//使客户端能获取该服务组件保存方法 override public bool Buf_SaveBillData(ref BuleEntityCall EntityData, ref DataSet ds) { } [BuEntity(BuEntityMethod.bemAudit)]//使客户端能获取该服务组件审核方法 public bool Buf_SaveCgInAuditBill(ref BuleEntityCall EntityData, ref DataSet ds) { } } } 二. Bule VCL组件说明 1.Bu_ClientObj 用于提供模块注册信息(模块名称,子系统编号,模块编号等)及访问服务器的方法(通
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值