从上个星期就开始有朋友问我为什么很久没有更新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>
使用.NET的InterOp2技术就可以让.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可以对映成.NET的System.Object或是Delphi.NET重新定义的TObject。
有了这两个知识之后我们就可以让.NET客户端和Midas/DataSnap应用系统整合了,在『Delphi.NET多层应用系统开发技术研讨会』中,我从 BDE的项目开始讨论如何移植到.NET,接着讨论dbExpress项目,最后讨论移植Midas/DataSnap应用系统整合并且开发.NET的Windows From和ASP.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/DataSnap的COM+服务器也在运转中同时提供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年以来我第一次无法去大陆进行研讨会,在此先祝福他们顺利,成功了。
|
| ||||||||||||
| |||||||||||||
|
|
| |||||||||||
| |||||||||||||
|
|
| |||||||||||
|
李维先生简体版博客由博文视点陈元玉编辑负责繁转简以及版式设计,如有疑问敬请您与编辑联系,联系方式: