Delphi Xe DataSnap Rest + Flex 开发 基本探索1
2014-09-04 14:55
483 查看
关于delphi 的datasnap Rest 模式在网上有很多的相关基本文章,大家可以参考,大多数讲的都是 服务器Datasnap +Delphi 客户端的调用方式,
关于这种方式网上资料很多.本系列主要讲讲 服务器 datasnap+rest 和 客户端为 Flex 的开发模式.基本上其他的前端技术如asp.net 等 应该和flex 差别不大.
先说明几个观点:
1 由于delphi Datasnap Rest 模式是一Json的数据格式封装的,所以客户端 只要只是Json格式基本都可以.这样 datasnap 可以说是跨平台了.
2 由于网络上和 datasnap 白皮书 以及一些相关的资料 只介绍了 客户端为 delphi 开发模式,所以本文讲的 Flex 客户端 对于想开发Web 程序的同学很有好处
3 由于也是出于探索阶段,有些问题还不是特别清楚,希望有同样开发需求的同学 多多交流,多多指点
废话少说 下面的开发环境是 delphi xe + Flex 4.0
1.建立Datasnap服务器,记得选择上tcp + http通讯方式 (如何建立datasnap服务器 ,请在网上自己搜索,我就不废话了)
![](http://img.blog.csdn.net/20140904150853424?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvaGVjb25nemhlbg==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
我建立了一个TSMTest 类来发布rest方法 声明的代码如下
2.在前台flex 先试试最简单的字符串调用
![](http://img.blog.csdn.net/20140904151325925?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvaGVjb25nemhlbg==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
前台的代码
注意 ReadDataFromServer 是本人自己封装的一个http 传输类,也把代码公布出来吧 无私奉献了
关于这种方式网上资料很多.本系列主要讲讲 服务器 datasnap+rest 和 客户端为 Flex 的开发模式.基本上其他的前端技术如asp.net 等 应该和flex 差别不大.
先说明几个观点:
1 由于delphi Datasnap Rest 模式是一Json的数据格式封装的,所以客户端 只要只是Json格式基本都可以.这样 datasnap 可以说是跨平台了.
2 由于网络上和 datasnap 白皮书 以及一些相关的资料 只介绍了 客户端为 delphi 开发模式,所以本文讲的 Flex 客户端 对于想开发Web 程序的同学很有好处
3 由于也是出于探索阶段,有些问题还不是特别清楚,希望有同样开发需求的同学 多多交流,多多指点
废话少说 下面的开发环境是 delphi xe + Flex 4.0
1.建立Datasnap服务器,记得选择上tcp + http通讯方式 (如何建立datasnap服务器 ,请在网上自己搜索,我就不废话了)
我建立了一个TSMTest 类来发布rest方法 声明的代码如下
TSMTest = class(TDSServerModule) ADOConnection1: TADOConnection; ADOQuery1: TADOQuery; dsp: TDataSetProvider; procedure DSServerModuleCreate(Sender: TObject); private stream :Tstream; { Private declarations } public { Public declarations } function EchoString(Value: string): string; function ReverseString(Value: string;id:integer): string; function SetArr(JsonStr:string):string; function updateSetBytes(stream:TJSONObject):string; function GetServerDateTime:string; function GetInt:integer; function GetArr:TJSONArray; function GetDataset:Tdataset; function GetJsonDataset:TJSONObject; function GetStream:TStream; function GetStream2:Tstream; function GetJsonStream:TJSONArray; end;
2.在前台flex 先试试最简单的字符串调用
前台的代码
protected function edtstring_clickHandler(event:MouseEvent):void { var read : ReadDataFromServer = new ReadDataFromServer; read.onLoadComplete = onStrLoad; read.Load('datasnap/rest/TSMTest/GetServerDateTime'); } public function onStrLoad(e:Event):void{ edtstring.text = JSON.decode(e.target.data).result[0]; }
注意 ReadDataFromServer 是本人自己封装的一个http 传输类,也把代码公布出来吧 无私奉献了
package { import flash.events.Event; import flash.events.IOErrorEvent; import flash.net.URLLoader; import flash.net.URLLoaderDataFormat; import flash.net.URLRequest; import flash.net.URLRequestMethod; import flash.utils.ByteArray; import flash.xml.XMLDocument; import mx.charts.DateTimeAxis; import mx.controls.Alert; import mx.managers.CursorManager; import mx.rpc.events.FaultEvent; import mx.rpc.events.ResultEvent; import mx.rpc.http.HTTPService; //从服务器返回数据 public class ReadDataFromServer { public static var RemoateAddress:String = 'http://localhost:8080/';//'/'; public function ReadDataFromServer() { } public var onLoadComplete:Function; private function onIoError(event:IOErrorEvent):void{ Alert.show("取数据失败!检查网络是否正常!错误:"+event.text); CursorManager.removeBusyCursor(); } public function Post(RequestUrl:String,xml:XML):void{ var abs :HTTPService = new HTTPService(); abs.addEventListener(ResultEvent.RESULT,onLoadComplete); abs.addEventListener(FaultEvent.FAULT,onIoError); abs.url= ReadDataFromServer.RemoateAddress+ RequestUrl; abs.method="POST"; abs.resultFormat = HTTPService.RESULT_FORMAT_XML; abs.contentType="application/xml"; abs.send(xml); } public function PostJson(RequestUrl:String,Jsonstr:String):void{ var abs :HTTPService = new HTTPService(); abs.addEventListener(ResultEvent.RESULT,onLoadComplete); abs.addEventListener(FaultEvent.FAULT,onIoError); abs.url= ReadDataFromServer.RemoateAddress+ RequestUrl; abs.method="POST"; abs.resultFormat = HTTPService.RESULT_FORMAT_XML; abs.contentType="text/xml"; abs.send(Jsonstr); } public function PostBytes(RequestUrl:String,bytes:ByteArray):void{ var Loader :URLLoader = new URLLoader(); Loader.dataFormat = URLLoaderDataFormat.TEXT; if (RequestUrl.indexOf('?')==-1)//没有参数的 RequestUrl = RequestUrl;//+'?LastTime=' + GvFunc.dateTimeToStr(new Date()); else//有参数的请求 RequestUrl = RequestUrl;// +'&LatTime='+ GvFunc.dateTimeToStr(new Date()); Loader.addEventListener(Event.COMPLETE,onLoadComplete); var request :URLRequest = new URLRequest(RemoateAddress+ RequestUrl); request.data = bytes; request.method =URLRequestMethod.POST; try { Loader.load(request); Loader.addEventListener(IOErrorEvent.IO_ERROR,onIoError); } catch (e:Error) { Alert.show("取数据失败!"+e.message); } /* var abs :HTTPService = new HTTPService(); abs.addEventListener(ResultEvent.RESULT,onLoadComplete); abs.addEventListener(FaultEvent.FAULT,onfaultEvent); abs.url= ReadDataFromServer.RemoateAddress+ RequestUrl; abs.method="POST"; // abs.contentType="application/xml"; abs.send(bytes); */ } private function onfaultEvent(event:FaultEvent):void{ Alert.show("取数据失败!检查网络是否正常!错误:"+event.messageId); CursorManager.removeBusyCursor(); } public function Load(RequestUrl:String):void{ var Loader :URLLoader = new URLLoader(); Loader.dataFormat = URLLoaderDataFormat.TEXT; if (RequestUrl.indexOf('?')==-1)//没有参数的 RequestUrl = RequestUrl;//+'?LastTime=' + GvFunc.dateTimeToStr(new Date()); else//有参数的请求 RequestUrl = RequestUrl ;//+'&LatTime='+ GvFunc.dateTimeToStr(new Date()); Loader.addEventListener(Event.COMPLETE,onLoadComplete); var decodeurl :String = encodeURI(RequestUrl); var request :URLRequest = new URLRequest(RemoateAddress+ decodeurl); // Alert.show(RemoateAddress+ RequestUrl); try { Loader.load(request); Loader.addEventListener(IOErrorEvent.IO_ERROR,onIoError); } catch (e:Error) { Alert.show("取数据失败!"+e.message); } } } }这是最基本的flex 调用 delphi datasnap 的rest 服务了..目前来看数据已经通了..对了 里面还有一个JSON 封装类这个 是flex 的一个控件,大家可以在网上下
相关文章推荐
- Delphi Xe DataSnap Rest + Flex 开发 基本探索2(取得Json 数组)
- Delphi Xe DataSnap Rest + Flex 开发 基本探索4(返回字节流 stream)
- Delphi Xe DataSnap Rest + Flex 开发 基本探索3(取得后台 DataSet 数据集)
- Delphi Xe DataSnap Rest + Flex 开发 基本探索6(flex 前台 Post 字节流 参数)
- Delphi Xe DataSnap Rest + Flex 开发 基本探索5(Rest 服务参数传递)
- 我的在线讨论和白皮书关于Delphi XE开发REST服务用DataSnap
- delphi xe datasnap rest 相關
- (DELPHI_XE)Datasnap 'ERROR_CODE'. The allowed range is 0 to 4294967295'
- 桥接让XE2 DATASNAP中间层支持DELPHI低版本开发客户端
- Delphi XE程序设计系列 2-开发DataSnap/REST服务器
- Delphi XE程序设计系列 2-开发DataSnap/REST服务器
- delphi XE Datasnap SERVER 在windows 7 下为服务添加描述信息
- Delphi XE程序设计系列 2-开发DataSnap/REST服务器 .
- ASP如何调用Delphi开发的DataSnap/Restful接口服务
- Delphi XE程序设计系列 2-开发DataSnap/REST服务器
- Delphi XE程序设计系列 2-开发DataSnap/REST服务器
- Delphi XE程序设计系列 2-开发DataSnap/REST服务器
- DELPHI DATASNAP 入门操作(3)简单的主从表的简单更新【含简单事务处理】
- delphi datasnap 心跳包
- 视频:连接 Android应用和DataSnap服务-巴西 2010 Delphi 大会