DataSnap REST Application

http://edn.embarcadero.com/article/41305

2017.1.19 官方例子

https://community.embarcadero.com/blogs/entry/in-the-c-builder-of-rad-server-firedac-sqlserver-connection

官方创建datasnapServer的步骤说明

http://docwiki.embarcadero.com/RADStudio/Tokyo/en/DataSnap_Server_Wizard_for_Windows

这个是创建 Datasnap Rest 服务的步骤。

http://docwiki.embarcadero.com/RADStudio/Tokyo/en/DataSnap_REST_Application_Wizard_for_Windows

http://docwiki.embarcadero.com/RADStudio/Tokyo/en/Tutorial:_Using_a_REST_DataSnap_Server_with_an_Application

http://docwiki.embarcadero.com/RADStudio/Tokyo/en/Tutorial:_Using_a_REST_DataSnap_Server_with_an_Application_and_FireDAC

建立DataSnap/REST服务器,请点选Files|New菜单,在DataSnap Server选项中选择DataSnap Server图像,如下图所示:3个选项都可以选择,创建后都是DataSnap服务器

官方例子参考D:\Users\Public\Documents\Embarcadero\Studio\14.0\Samples\CPP\DataSnap\SimpleDataSnapDemo\CppDataSnapServer\CppDataSnapServerApp.cbproj

注意:TDSTCPServerTransport.poolsize 线程池

TDSTCPServerTransport.maxThreads  并发连接数量

TDSServerClass.LIFECycle,  SESSION/SERVER/INVOCATION

Representational State Transfer (REST) is a new architecture for Web Services that is having a significant impact on the industry

ServerMethodsUnit1.cpp

DSServerModuleCreate是每个客户端连接的时候触发,两个客户端连接就触发两次,所以用到全局指针的话,第二次的触发就可能影响了第一次的指针,必须注意特别小心。

关于数据库操作必须写到ServerMethodsUnit1,包括数据库连接,ServerMethodsUnit1具有线程功能, 一个客户端连接一个线程实例,一个实例就是new一个ServerMethodsUnit1类,各个互不影响。

普通的datamodule无线程功能。

视频教程

http://www.embarcadero.com/rad-in-action/datasnap

服务器可以创建exe,app,也可以是服务;可以是windows 平台,也可以是firemonkey跨平台。

一路完成后会生成控件

TDSServer,TDSTCPServerTransport以及TDSServerClass、TDSHTTPService

USEFORM("MainForm.cpp", Form1);
USEFORM("ServerContainerUnit1.cpp", ServerContainer1); /* TDataModule: File Type */
//---------------------------------------------------------------------------
int WINAPI _tWinMain(HINSTANCE, HINSTANCE, LPTSTR, int)
{
try
{
Application->Initialize();
Application->MainFormOnTaskBar = true;
Application->CreateForm(__classid(TForm1), &Form1);
Application->CreateForm(__classid(TServerContainer1), &ServerContainer1);
Application->Run();
}
} //---------------------------------------------------------------------------- #ifndef ServerMethodsUnit1H
#define ServerMethodsUnit1H
//----------------------------------------------------------------------------
#include <Classes.hpp>
#include <DSServer.hpp>
//----------------------------------------------------------------------------
class DECLSPEC_DRTTI TServerMethods1 : public TComponent
{
private: // User declarations
public: // User declarations
System::UnicodeString EchoString(System::UnicodeString value);
System::UnicodeString ReverseString(System::UnicodeString value);
};
#endif //--------------------------------------------------------------------------- // This software is Copyright (c) 2014 Embarcadero Technologies, Inc.
// You may only use this software if you are an authorized licensee
// of an Embarcadero developer tools product.
// This software is considered a Redistributable as defined under
// the software license agreement that comes with the Embarcadero Products
// and is subject to that software license agreement. //---------------------------------------------------------------------------
//----------------------------------------------------------------------------
#include <SysUtils.hpp>
#pragma hdrstop #include "ServerMethodsUnit1.h"
#include <Datasnap.DSProviderDataModuleAdapter.hpp>
//----------------------------------------------------------------------------
#pragma package(smart_init)
//----------------------------------------------------------------------------
System::UnicodeString TServerMethods1::EchoString(System::UnicodeString value)
{
return value;
}
//----------------------------------------------------------------------------
System::UnicodeString TServerMethods1::ReverseString(System::UnicodeString value)
{
return ::ReverseString(value);
}
//----------------------------------------------------------------------------
//----------------------------------------------------------------------------

#ifndef ServerContainerUnit1H
#define ServerContainerUnit1H
//---------------------------------------------------------------------------
#include <Classes.hpp>
#include <DSCommonServer.hpp>
#include <DSServer.hpp>
#include <DSTCPServerTransport.hpp>
#include <DSAuth.hpp>
#include <IPPeerServer.hpp>
//----------------------------------------------------------------------------
class TServerContainer1 : public TDataModule
{
__published: // IDE-managed Components
TDSServer *DSServer1;
TDSTCPServerTransport *DSTCPServerTransport1;
TDSServerClass *DSServerClass1;
void __fastcall DSServerClass1GetClass(TDSServerClass *DSServerClass, TPersistentClass &PersistentClass);
private: // User declarations
public: // User declarations
__fastcall TServerContainer1(TComponent* Owner);
};
//----------------------------------------------------------------------------
extern PACKAGE TServerContainer1 *ServerContainer1;
//----------------------------------------------------------------------------
#endif //--------------------------------------------------------------------------- // This software is Copyright (c) 2014 Embarcadero Technologies, Inc.
// You may only use this software if you are an authorized licensee
// of an Embarcadero developer tools product.
// This software is considered a Redistributable as defined under
// the software license agreement that comes with the Embarcadero Products
// and is subject to that software license agreement. //---------------------------------------------------------------------------
//---------------------------------------------------------------------------- #include <vcl.h>
#pragma hdrstop
#include <tchar.h>
#include <stdio.h>
#include <memory>
#include "ServerMethodsUnit1.h" #include "ServerContainerUnit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TServerContainer1 *ServerContainer1;
//---------------------------------------------------------------------------
__fastcall TServerContainer1::TServerContainer1(TComponent* Owner)
: TDataModule(Owner)
{
}
//----------------------------------------------------------------------------
void __fastcall TServerContainer1::DSServerClass1GetClass(TDSServerClass *DSServerClass,
TPersistentClass &PersistentClass)
{
PersistentClass = __classid(TServerMethods1);
}
//----------------------------------------------------------------------------
//---------------------------------------------------------------------------

多个类文件

ServerMethodsUnit1.cpp文件中就是类 class TServerMethods1 : public TDSServerModule,如果想多个类,例如分模块分业务多个类,File>new>Other>DataSnap Server》选择 Server Module新添加一个类。没有打开任何功能时Server Module是不可见的。只有打开了某个应用服务器的工程,再new的时候才能看见!

https://newsgroups.embarcadero.com/thread.jspa?threadID=229169

https://forums.embarcadero.com/thread.jspa?messageID=833882

ServerMethodsUnit1、ServerMethodsUnit2

DSServerClass1、DSServerClass2

procedure TWebModule1.DSServerClass2GetClass(DSServerClass: TDSServerClass;
var PersistentClass: TPersistentClass);
begin
PersistentClass := ServerMethodsUnit2.TDSServerModule2;
end;

这样就注册上第二个单位类,多模块,多个类、多个业务、多个接口、分离

创建DataSnap Server的更多相关文章

  1. [SDK2.2]Windows Azure Virtual Network (3) 创建AD Server并添加至Virtual Network

    <Windows Azure Platform 系列文章目录> 在之前的文章中,笔者已经向大家介绍了如何创建一个简单的Azure Virtual Network. 本章我将创建一台域服务器 ...

  2. 创建link server链接服务器碰到的问题及解决办法

    问题描述 今天在做数据库迁移,然后新建link server(链接服务器)的时候,碰到以下问题. 我的sql 脚本是这样的. 然后,执行的时候就收到以下错误信息. Msg 468, Level 16, ...

  3. c++ 创建 socket server

    下面一段代码是创建socket server的代码片段: 需要引用的库包括: #include <sys/types.h> #include <sys/socket.h> #i ...

  4. DataSnap Server HTTP json格式修改 返回图片

    DataSnap Server HTTP json 格式修改  http://127.0.0.1:8080/datasnap/rest/TServerMethods1/EchoString/hello ...

  5. 客户端如何连接 DataSnap Server 调用服务的方法

    一般http访问的地址是 http://localhost:8099/datasnap/rest/TServerMethods1/EchoString/abc 一.用FDConnection1连接Da ...

  6. [SDK2.2]Windows Azure Virtual Network (4) 创建Web Server 001并添加至Virtual Network

    <Windows Azure Platform 系列文章目录> 在上一章内容中,笔者已经介绍了以下两个内容: 1.创建Virtual Network,并且设置了IP range 2.创建A ...

  7. sqlserver 使用脚本创建Sql Server代理作业

    use master GO /* --开启sql server代理 sp_configure 'show advanced options', 1; GO RECONFIGURE; GO sp_con ...

  8. Windows下创建ArcGIS Server站点

    原创文章,转载须标明出处自: https://www.cnblogs.com/gisspace/p/8126261.html ------------------------------------- ...

  9. 通过 Ansible 创建 Jenkins Server

    创建 CI 流程的第一件事应该是安装 CI 工具,本文以最常见的 Jenkins 为例,介绍如何使用 Ansible 自动安装 Jenkins Server.说明:本文的演示环境为 ubuntu 16 ...

随机推荐

  1. 51Nod1526 分配笔名

    分析 在trie树上贪心,将所有串加入trie树中,在深度较深的地方匹配会更优. 由于只需要知道最后的总质量,所以直接取每个点的子树中最大的匹配即可 复杂度\(O(\sum len)\) 加串的时候把 ...

  2. java打jar包的几种方式详解

    经常会头疼于一个jar包是如何制作的,包括maven的打包方式,springboot的打jar包的原理,jar包稍稍有错误就会完全无法运行.在网上折腾了很久终于有些思路和步骤,在这里做个笔记 本文目录 ...

  3. FastAdmin 开发第三天:安装 FastAdmin

    环境安装安装好后就可以安装 FastAdmin 了. 根据文档说明安装步骤如下,推荐使用命令行安装: 克隆FastAdmin到你本地 git clone https://git.oschina.net ...

  4. js一种继承机制:用对象冒充继承构造函数的属性,用原型prototype继承对象的方法。

    js一种继承机制:用对象冒充继承构造函数的属性,用原型prototype继承对象的方法. function ClassA(sColor) { this.color = sColor; } ClassA ...

  5. centos 下nginx源码编译安装

    1.下载nginx 进入nginx官网下载nginx的稳定版本,我下载的是1.10.3. 下载:wget http://nginx.org/download/nginx-1.10.3.tar.gz 解 ...

  6. windows dos窗口下如何复制和粘贴

    这个帖子纯属为自己之前一些笨笨的操作做一次终结.使用计算机也有六年多了,很多计算机的基本操作也都掌握了,但毕竟是泥腿子出身,很多windows下的快捷操作和优化部分依然是不懂,就知道以窗口为基准,使用 ...

  7. 【Reporting Services 报表开发】— 如何设置报表分页列标题每一页都显示

    一.打开已经开发好的报表ReportTest,选择列组下的高级模式—>选择行组的静态(会关联列标题订单编号),修改下面的属性: 1.Hidden:False 2.FixedData:True 3 ...

  8. win xp 安装 VS2010 时要重启是因为没安装WINDOWS INSTALLER 4.5

    win xp 安装 VS2010 时要重启是因为没安装WINDOWS INSTALLER 4.5. 无意间看到VS2010安装列表中有一项是 WINDOWS INSTALLER 4.5 . 装这个玩意 ...

  9. Mycat 数据库分库分表中间件

    http://www.mycat.io/ Mycat 国内最活跃的.性能最好的开源数据库中间件! 我们致力于开发高性能的开源中间件而努力! 实体书Mycat权威指南 »开源投票支持Mycat下载 »s ...

  10. ES之七:配置文件详解

    安装流程 http://www.elasticsearch.org/overview/elkdownloads/下载对应系统的安装包(我下载的是tar的),下载解压以后运行es根目录下bin目录的el ...