GVKun编程网logo

如何在 Delphi REST Datasnap 中声明 POST 请求?(delphi发送post请求)

11

关于如何在DelphiRESTDatasnap中声明POST请求?和delphi发送post请求的问题就给大家分享到这里,感谢你花时间阅读本站内容,更多关于Delphi2010Datasnap–设计查

关于如何在 Delphi REST Datasnap 中声明 POST 请求?delphi发送post请求的问题就给大家分享到这里,感谢你花时间阅读本站内容,更多关于Delphi 2010 Datasnap – 设计查询、DELPHI DATASNAP 2010 入门操作(1)为什么要用datasnap 2010、DELPHI DATASNAP 2010 入门操作(2)不写一行代码、Delphi Datasnap REST Server中的异常处理等相关知识的信息别忘了在本站进行查找喔。

本文目录一览:

如何在 Delphi REST Datasnap 中声明 POST 请求?(delphi发送post请求)

如何在 Delphi REST Datasnap 中声明 POST 请求?(delphi发送post请求)

通过不使用函数的字符串参数,而是通过传递 JSONObject 使用 Custom body,我找到了我希望它工作的方式。 方法为 POST,内容类型为 application/JSON

function TDM_Test.DS_insertArticles(pUrlJsonObj: TJSONObject): string;

JSonValue := TJSONObject.ParseJSONValue(pUrlJsonObj);

// Retrieve data for database fields
artCode  := JSONValue.GetValue<string>('article[0].code');
artName  := JSONValue.GetValue<string>('article[0].name');
artPrice := JSONValue.GetValue<string>('article[0].price');

//... Proceed to INSERT SQL with these values

Delphi 2010 Datasnap – 设计查询

Delphi 2010 Datasnap – 设计查询

我正在研究将基于sql的胖客户端Delphi应用程序移动到Multi Tier瘦客户端,并且一直在考虑在Delphi 2010中使用Datasnap.我已经完成了Bob Swart撰写的白皮书并进一步扩展了这一点.

我的主要问题是,我想让服务器端在连接和SQL查询方面高效,因为多个查询正在运行并且同时保持打开以查询数据,任何人都可以向我指明如何获取指导设计一个真实世界的Datasnap Server应用程序,因为该演示没有详细介绍.

谢谢
马特

解决方法

你必须决定你的设计:

>(中间服务器)将管理会话或客户端将识别他们的会话每个连接(有状态与无状态)
>(中间服务器)您希望拥有多少缓存数据.你可以只缓存一些烦人的非常稳定的表,只在它们发生变化时查询它们(如果所有修改都通过服务器中间,如果没有,你需要像任意标记一样的东西 – 一个GUID,一个计数器 – 在表上匹配数据改变).
>(客户端/中间服务器)如​​果您的客户端将始终获得完整的数据集合或集合的片段.
(例如:产品可以有categoryId列,它是Category表的FK.您可以一直发送两者,或者客户端只能请求产品数据).
>(Mid-Server / RDBMS)您可能需要提供某种形式的自定义搜索.如果您对最常用的搜索条件有所了解,则可以提供(如果需要)索引覆盖来执行此操作.
>(中间服务器/ RDBMS)除非您计划对数据进行一些积极的缓存和/或对它们有一些好用,否则不要将大数据集带到中间服务器.中间服务器只是RDBMS的另一个客户端应用程序 – 如果两者都在同一台机器上,您可以与RDBMS进入内存/ cpu / IO竞争.
>(Mid-Server / RDBMS)在Mid-Server上执行您的业务规则,是许多纯粹主义者的口头禅.对我来说,均衡是关键.假设RDBMS有2000个存储过程(我没有说明,有真正的业务有这么多的SP),你的中型服务器可以在SP,GREAT解决2000个问题中的1500个问题上做出很好的工作.但如果最后的500可以改变最坏的情况,那就让他们独自一人.它可能比1500更麻烦.所以将两者混合,并使这500个软件项目成为另一个版本.
>(中间服务器/ RDBMS)我对存储过程的说法也可以应用于触发器和其他任何其他类型的RDBMS服务器功能,可以使您的生活更轻松.
>(Mid-Server / DataSnap)大多数原始细节都可以让数据集提供者使用.但学会利用OnBeforeUpdateRecord事件在需要时进行自定义处理.
>(Mid-Server / DataSnap)您知道只能使用修改后的数据创建ClientDataset
这种代码如下?你无法想象它有多么有用……

总结

以上是小编为你收集整理的Delphi 2010 Datasnap – 设计查询全部内容。

如果觉得小编网站内容还不错,欢迎将小编网站推荐给好友。

DELPHI DATASNAP 2010 入门操作(1)为什么要用datasnap 2010

DELPHI DATASNAP 2010 入门操作(1)为什么要用datasnap 2010

总结

以上是小编为你收集整理的DELPHI DATASNAP 2010 入门操作(1)为什么要用datasnap 2010全部内容。

如果觉得小编网站内容还不错,欢迎将小编网站推荐给好友。

DELPHI DATASNAP 2010 入门操作(2)不写一行代码

DELPHI DATASNAP 2010 入门操作(2)不写一行代码

总结

以上是小编为你收集整理的DELPHI DATASNAP 2010 入门操作(2)不写一行代码全部内容。

如果觉得小编网站内容还不错,欢迎将小编网站推荐给好友。

Delphi Datasnap REST Server中的异常处理

Delphi Datasnap REST Server中的异常处理

我正在努力处理我的Datasnap REST服务中的异常处理(Delphi XE3,但也尝试使用Delphi 10 Seattle).多年来我写了六个 Windows服务,我总是包含一个TApplicationEvents组件,以便我可以将任何应用程序异常记录到Windows事件日志中.

但是,Datasnap服务不会发生此行为. TApplicationEvents.OnException事件永远不会被触发,所以我假设其他东西正在吃异常并在它到达之前处理它.

Web服务方法的结果中显示异常,这很好,因为这意味着我至少可以在客户端显示某些内容,但我还想在此之前捕获它,以便我可以处理不同的异常服务器-侧.

到目前为止我唯一一致的方法是将每个单独的方法包装在try..except块中,并在重新引发异常之前处理每个方法中的异常.但是,随着20种方法的Web服务不断增长,这种情况并没有真正扩大.

我也尝试过实现一些Datasnap组件的OnError,OnTrace和其他事件(TDSServer,TDSHTTPService,TDSTcpserverTransport等),但这些事件似乎也从未被解雇过.

有没有人遇到这样的事,拜托?

解决方法

Tl; Dr:它没有以可用的方式实现(在柏林10.1).

我遇到了同样的问题,在阅读了大量资料后,我发现没有实际的解决方案.

所以示例(我的)StackTrace看起来像这样:

MyClass::MyServerMethod()
/* skipping some funny unimportant RTTI/TValue handling here */
System::Rtti::TRttiMethod::Invoke
Dsreflect::TDSMethod::Invoke(TObject,TDSMethodValues)
TDSServerConnectionHandler::DbxExecute(const TDBXExecuteMessage)
TDSServerCommand::DerivedExecuteUpdate
TExecuteCallback
TDSService::Execute(const string,const TRequestCommandHandler,TExecuteCallback)
TDSService::ProcessRequest(const string,TExecuteCallback)
TDSRESTService::ProcessREST(const string,const string,const TArray<Byte>,const TRequestCommandHandler)
TDSRESTService::ProcessGETRequest(const string,TStrings,TArray<Byte>,TRequestCommandHandler)
TDSRESTServer::DoDSrestcommand(TDSHTTPRequest,TDSHTTPResponse,string)
TDSRESTServer::DoCommand(TDSHTTPContext,TDSHTTPRequest,TDSHTTPResponse)
Dshttpwebbroker::TDSRESTWebdispatcher::dispatchRequest(TObject,Web::Httpapp::TWebRequest,Web::Httpapp::TWebResponse)

注意:这完全取决于您对DataSnap的使用.在上述情况下,请求通过TDSRESTWebdispatcher(来自TIdCustomHTTPServer)传递到DataSnap API.

> ServerMethod中引发的每个异常都将以TDSService :: ProcessRequest结束.
>在此过程中,捕获每个异常,并且仅将其消息添加到TRequestCommandHandler-> CommandList.
>此外,Message将作为JSON / DBX命令写入输出.

因此,我们永远不能处理异常对象并访问StackTrace或其他信息.所以这一点是不可接受的,必须改变

好消息是,这个程序是虚拟的,可以被覆盖.坏消息是,在上面的示例中,您必须使用自己的ProcessRequest过程(包括错误处理程序)扩展TDSRESTService,使用自己的DoDSrestcommand扩展TDSRESTServer(在那里TDSRESTService是在一个极大的过程中创建的)和TDSRESTWebdispatcher(取决于您的用法).

我个人的建议是不要使用DataSnap.

注意:在编写本文时,我没有找到任何OnError事件的调用.

关于如何在 Delphi REST Datasnap 中声明 POST 请求?delphi发送post请求的问题就给大家分享到这里,感谢你花时间阅读本站内容,更多关于Delphi 2010 Datasnap – 设计查询、DELPHI DATASNAP 2010 入门操作(1)为什么要用datasnap 2010、DELPHI DATASNAP 2010 入门操作(2)不写一行代码、Delphi Datasnap REST Server中的异常处理等相关知识的信息别忘了在本站进行查找喔。

本文标签: