这次真是糟糕了……我们踏入了未知的领域。感到这次项目中新技术的采用有点不受我控制了……
我们组的人本来尝试从老师那里获得支持的次数就比其他组少,现在在页面上我们看来难以获得老师的技术支持了。
上个星期五我们进入了页面原型的设计和制作阶段。一开始组员们是装了DreamWeaver 8准备写HTML的页面原型。但是他们对HTML的熟悉度实在不够高,用DW8感到十分不顺手。我得说,在DW8那样有layout可用的WYSIWYG(所见即所得)编辑器里写HTML都觉得不顺手的话,那还是放弃的比较好。
我很着急,因为别的组的人虽然也未必对HTML有多熟悉,但还是在用DW硬啃。也有用VS2005直接写ASPX+MasterPage的方式的页面原型的组(好重……),无非就是想借助VS2005的Web表单设计器来减轻HTML带来的负担;也不愧是个歪招。那我们组怎么办呢?
我突然想起我们还有Flex 2可用。在星期六的时候把Flex Builder 2传给了组员们,让他们摸索和感受Flex,并用它来实现页面原型的快速构建。基于Eclipse的Flex Builder 2所提供的WYSIWYG设计器比DW的确实是强悍多了;没办法,背后的支持不一样嘛,FB2背后的Flex 2有内建的Layout manager,那比HTML里需要用table或者frame来解决排版问题的状况确实是好多了。组员们似乎很快就上手了,并且喜欢上了Flex 2。或许是跟DW8的使用体验相比反差太大了。
YLY做的短信管理系统中写短信的界面截图:
看他们做得那么有动力,我也就没再继续使用Dojo,而是也转到Flex上来制作我这部分的页面。到今天中午为止,我们的页面算是有了个原型。
但是有问题:我们的页面原型看上去感觉还不错(至少,相对于另外几组?),而且也已经有了许多功能,例如数据校验之类的Flex内建功能,问题是PX和YLY都提出要在后期继续使用Flex来搭建系统的表现层。
我犹豫了,心想如果组里熟悉HTML的只有我的话,到时候做页面就痛苦了;既然他们主动提出想用Flex,干脆就用吧。只不过,原本我预想的是用Dojo+ASP.NET或者直接用ASP.NET AJAX的方式来制作页面,Aspx+C#的开发至少跟JSP+Java非常像,我心里多少还能有个数;现在决定用Flex的话,很多事情都是我原本没做过的,难以估算风险。
然后咬咬牙,豁出去了。就用Flex好了。这下我们就从我相对熟悉一些的Ajax开发转换为RIA开发了。呜呜。
那么问题就转变为如何让Flex的前端与ASP.NET的后端整合起来。我知道的方法有4种(算是吧):
1、HTTPService
2、WebService
3、Remote Object
4、FDS (Flex Data Service)
其中后两种虽然是Flex的比较native的方式,我这次却不太想用,觉得它们离ASP.NET更远了。嗯不,其实是因为我完全没接触过,不会用,不想冒险。用HTTPService的话又得自己拼装/解析XML数据来序列化/反序列化需要传递的对象,嫌麻烦。所以决定采用WebService的方式来实现Flex与ASP.NET的整合。
决定好了就赶紧开工做点技术验证。这个验证能达到以下效果:
先启动WebService。我机上的VS2005在debug模式把这个Web Service project启动到了http://localhost:34270/Service1.asmx。
然后启动Flex端的“页面”:
按下按钮后,获取到WebService提供的"Hello World"字串,并显示在Flex端。
该项目包括以下三个文件:HelloWorldFlex.mxml,这是Flex端的“页面”;Service1.asmx.cs,这是ASP.NET端提供的Web Service;最后是Web.Config,架设WebService不可缺少的配置文件。文件内容如下:
HelloWorldFlex.mxml:
<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="vertical">
<mx:WebService id="hwService"
wsdl="http://localhost:34270/Service1.asmx?WSDL"
useProxy="false">
<mx:operation name="HelloWorld">
<mx:request>
</mx:request>
</mx:operation>
</mx:WebService>
<mx:Script>
<![CDATA[
private function clicked():void {
hwService.HelloWorld.send();
}
]]>
</mx:Script>
<mx:Panel x="10" y="10" width="313" height="200" layout="absolute"
fontFamily="Times New Roman" fontSize="12" title="Hello world!">
<mx:Label x="10" y="24" text="{hwService.HelloWorld.lastResult}" />
<mx:Button x="10" y="53" label="get" click="clicked();"/>
</mx:Panel>
</mx:Application>
Service1.asmx.cs:
using System.Web.Services;
using System.Web.Services.Protocols;
namespace WebService1
{
/// <summary>
/// A hello world web service.
/// </summary>
// 这里的namespace是VS2005给生成的默认命名空间,实际使用时要该到自己的URI上
[WebService( Namespace = "http://tempuri.org/" )]
[WebServiceBinding( ConformsTo = WsiProfiles.BasicProfile1_1 )]
public class Service1 : System.Web.Services.WebService
{
[WebMethod]
public string HelloWorld( )
{
return "Hello World";
}
}
}
Web.Config:
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<appSettings/>
<connectionStrings/>
<system.web>
<compilation debug="true" />
<authentication mode="Windows" />
</system.web>
</configuration>
========================================================================
在此基础上,明天会放个以Flex为前端的小型原型,把上次放的SampleWebSite改造过来。