0

我在 Progress ABL 中工作并使用我们所谓的 AppServers。应用程序服务器,可以与进度数据库对话并在服务器上运行业务逻辑然后将响应发送回客户端的进程。

它们有 4 种模式,但我最习惯于 state-reset,它是一个应用服务器,在整个连接过程中保留状态,而 state-free,是一种即发即弃模式。

该产品具有高度专有性,可与 .net 等其他客户端兼容。

我的问题是,是否有任何纯.NET 的解决方案可以做同样的事情。我不是在谈论做 ASP.net 或 Web 服务,因为它们解决了不同的问题。我想要一些可以运行代码的东西,这些代码可以连接到数据库并回传响应,而无需编写我自己的系统。

在 AppServer 上运行代码的示例。

将变量 handleToAppServer 定义为句柄 no-undo。将变量 charResponse 定义为字符不可撤消。

在服务器 hAppServer 上运行“AppServerProcedure.p”(输出 charResponse)。

4

4 回答 4

1

我是一名长期的 ABL 开发人员,我认为这是一个很好的问题。我也使用 C#,我喜欢并尊重这两个平台。但是,我从来没有真正理解过 C# 开发人员会如何做 OP 所描述的并且在 P4GL 中看起来如此简单。

p.marino 的上述回复假定您可以使用 SP 做您想做的事情。当然,这种情况经常发生,但我们 ABL 开发人员习惯于做的事情远远超出了 SQL 所能达到的范围。

那么,如果我想用 C# 编写业务逻辑并让它远程执行,而不是作为 SQL SP,我有什么选择?.NET 远程处理、Web 服务或 .NET 企业服务?我不认为其中任何一个都像 ABL AppServers 那样简单,而且除了 WS 之外,它们似乎都没有很大的吸引力。

(以免我听起来像个 P4GL 粉丝,他们的 GUI 完全崩溃,他们的工具令人作呕,而且许可费用相当高昂。我会用 C# 编写 GUI 或 Swing over P4GL。但是远程业务逻辑......我不太确定)。

于 2009-03-05T00:06:13.663 回答
1

Progress 应用服务器就像用于逻辑的 db 和 ui 中性容器。它们独立运行,而不是作为 Oracle 的一部分或 SQL Server 的一部分或其他任何东西运行,并且它们不关心客户端是 .NET、Java、WS 还是绿屏。他们不需要数据库连接,但如果这对他们来说是适当的事情,他们可以连接。

最初的提问者似乎并不想要大多数这些功能,并且从事情的声音来看,可能会对选择的数据库中的存储过程感到满意。

There is one other feature that might matter to the original question -- the real reason why Progress programmers like app servers is probably because it gives them a single programming language to work with. If you start using stored procedures you will need use a different language than the one that you code your UI in. And each target db will have its own language and quirks thereof to work through.

(Progress triggers run on the client, not inside the context of the server. So they aren't very stored procedure like.)

于 2009-06-16T15:40:58.013 回答
0

老实说,我不确定我理解实际问题是什么。

如果您担心客户端应用程序能够连接到单独的数据库服务器,这实际上是常态,而不是例外。只需使用任何 JDBC/ODBC 桥,您就可以在客户端上执行您的代码,而只需将数据移入和移出网络。

如果您希望您的逻辑在远程服务器上执行(您在命名 AppServer 上调用过程的示例建议使用后者),那么基础是相同的,即使用 ODBC 连接到数据库服务器,并移动您的大部分存储过程的逻辑。

(我认为您正在寻找的内容在大多数现代 RDBMS 中称为“存储过程”:即完全在数据库服务器本身上运行的完整代码单元,无论是函数还是过程。它们可以由客户端远程调用,但使用数据库服务器上的内存和计算资源)。

在使用 DB 时,这又是一个非常标准的架构选择。Progress ABL/4GL 有一个混合范式模型,可能会使您的观点有些混乱(如果没记错的话,APPServer 是作为某种无头“超级客户端”运行的进程,并且没有“存储过程”的概念,即代码在数据库本身内部运行,除了可能的触发器)。

于 2009-02-05T12:35:07.167 回答
0

Answering for future reference:

Yes, now there is. In OpenEdge 11.5 (released in December 2014) the "Pacific AppServer" was included as an alternative to the classic appserver. It's based on Apache Tomcat and is more lightweight than the old one.

See these for more information:

Complete set of 11.5 documentation

Introducing PAS for OpenEdge (PDF)

于 2015-04-16T07:35:39.660 回答