创建DataSnap Server
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的更多相关文章
- [SDK2.2]Windows Azure Virtual Network (3) 创建AD Server并添加至Virtual Network
<Windows Azure Platform 系列文章目录> 在之前的文章中,笔者已经向大家介绍了如何创建一个简单的Azure Virtual Network. 本章我将创建一台域服务器 ...
- 创建link server链接服务器碰到的问题及解决办法
问题描述 今天在做数据库迁移,然后新建link server(链接服务器)的时候,碰到以下问题. 我的sql 脚本是这样的. 然后,执行的时候就收到以下错误信息. Msg 468, Level 16, ...
- c++ 创建 socket server
下面一段代码是创建socket server的代码片段: 需要引用的库包括: #include <sys/types.h> #include <sys/socket.h> #i ...
- DataSnap Server HTTP json格式修改 返回图片
DataSnap Server HTTP json 格式修改 http://127.0.0.1:8080/datasnap/rest/TServerMethods1/EchoString/hello ...
- 客户端如何连接 DataSnap Server 调用服务的方法
一般http访问的地址是 http://localhost:8099/datasnap/rest/TServerMethods1/EchoString/abc 一.用FDConnection1连接Da ...
- [SDK2.2]Windows Azure Virtual Network (4) 创建Web Server 001并添加至Virtual Network
<Windows Azure Platform 系列文章目录> 在上一章内容中,笔者已经介绍了以下两个内容: 1.创建Virtual Network,并且设置了IP range 2.创建A ...
- sqlserver 使用脚本创建Sql Server代理作业
use master GO /* --开启sql server代理 sp_configure 'show advanced options', 1; GO RECONFIGURE; GO sp_con ...
- Windows下创建ArcGIS Server站点
原创文章,转载须标明出处自: https://www.cnblogs.com/gisspace/p/8126261.html ------------------------------------- ...
- 通过 Ansible 创建 Jenkins Server
创建 CI 流程的第一件事应该是安装 CI 工具,本文以最常见的 Jenkins 为例,介绍如何使用 Ansible 自动安装 Jenkins Server.说明:本文的演示环境为 ubuntu 16 ...
随机推荐
- 编译libmad库
libmad是一个开源的音频解码库,下面说说关于这个库工程的编译过程: 1.首先从网上下载libmad开源库,自己百度就能够找到关于这个库的下载链接地址,我这里提供一个: http://downloa ...
- 系列文章--从零开始学习ASP.NET MVC 1.0
从零开始学习ASP.NET MVC 1.0 (一) 开天辟地入门篇 从零开始学习 ASP.NET MVC 1.0 (二) 识别URL的Routing组件 从零开始学习 ASP.NET MVC 1.0 ...
- js模板引擎之juicer,特别好用
中文文档地址 https://www.npmjs.com/package/juicer Juicer基础知识:语法2 http://blog.163.com/lvshutao@126/blog/st ...
- FastAdmin 使用 Git 更新的新用法 (2019-02-28)
FastAdmin 使用 Git 更新的新用法 2019-02-28 新流程 增加一个 fastadmin 的远程仓库. 在项目的开发或主分支. 如果有代码更新将代码提交 commit. git pu ...
- 使用crypto-js的md5加密
官方地址:https://github.com/brix/crypto-js md5加密代码: let CryptoJS = require('crypto-js') let yxcsigns = C ...
- JSP 执行流程
一.jsp执行流程 1. 发送请求 ,请求访问jsp文件. 2. 服务器(Tomcat)提供的jsp parser 解析器解将jsp转化为java文件. jsp本质上是一个servlet. 3.ser ...
- ML(1): 入门理论
机器学习相关的文章太多,选取一篇本人认为最赞的,copy文章中部分经典供自己学习,摘抄至 http://www.cnblogs.com/subconscious/p/4107357.html#firs ...
- C#连接Oracle数据库的方法(Oracle.DataAccess.Client也叫ODP.net)
官方下载地址(ODP.net)(中文):http://www.oracle.com/technetwork/cn/topics/dotnet/downloads/index.html 官方下载地址(O ...
- android开发常用组件【持续更新中。。。】
UI相关 图片 Android-Universal-Image-Loader:com.nostra13.universalimageloader:异步加载.缓存.显示图片 ImageLoader:co ...
- Hadoop专业解决方案-第5章 开发可靠的MapReduce应用
本章主要内容: 1.利用MRUnit创建MapReduce的单元测试. 2.MapReduce应用的本地实例. 3.理解MapReduce的调试. 4.利用MapReduce防御式程序设计. 在WOX ...