我在Progress ABL中工作并使用我们称之为AppServers的东西。应用程序服务器,可以与Progress数据库通信并在服务器上运行业务逻辑,然后将响应发送回客户端的进程。
这些有四种模式,但我最习惯于state-reset,这是一个appserver,它在整个连接中保持状态,并且是无状态的,这是一种火灾和遗忘模式。
该产品具有高度专有性,可与其他客户兼容,例如.net。
我的问题是,有没有任何解决方案是纯.NET做同样的事情。我不是在谈论ASP.net或Web服务,因为它们解决了不同的问题。我想要一些可以运行代码的东西,这些代码可以连接到数据库并在不编写我自己的系统的情况下传回响应。
在AppServer上运行代码的示例。
将变量handleToAppServer定义为句柄no-undo。 将变量charResponse定义为字符no-undo。
在服务器hAppServer上运行'AppServerProcedure.p'(输出charResponse)。
答案 0 :(得分:1)
我是ABL的长期开发人员,我认为这是一个很好的问题。我也使用C#,我喜欢并尊重这两个平台。但是,我从来没有真正理解C#开发人员如何做OP所描述的并且在P4GL中看起来如此简单。
p.marino的上述回应假设你可以做你想要用SP做的事情。通常情况确实如此,但是我们ABL开发人员习惯于远远超出使用SQL实现的目标。
因此,如果我想在C#中编写业务逻辑并让它远程执行,而不是作为SQL SP,那么我的选择是什么? .NET Remoting,Web服务或.NET Enterprise Services可能吗?我不认为其中任何一个都像ABL AppServers一样简单,并且除了WS之外没有一个可能具有很大的牵引力。
(为了让我听起来像一个P4GL粉丝,他们的GUI完全打击,他们的工具很恶心,许可证费用相当高。我会用C#编写GUI或者用P4GL编写Swing。但是远程业务逻辑......我不太确定。)
答案 1 :(得分:1)
Progress app服务器就像db&用于逻辑的中性容器。它们独立运行而不是作为Oracle的一部分或作为SQL Server的一部分或其他任何东西运行,并且它们不关心客户端是.NET,Java,WS还是绿屏。它们不需要数据库连接,但如果这对他们来说是合适的话就可以连接。
原始提问者似乎并不想要大多数这些功能,而且根据事物的声音,可能会对选择的数据库中的存储过程感到满意。
还有另一个功能可能对原始问题很重要 - Progress程序员喜欢app服务器的真正原因可能是因为它为他们提供了一种编程语言。如果您开始使用存储过程,则需要使用与您对UI进行编码的语言不同的语言。并且每个目标数据库都有自己的语言和怪癖可以通过。
(进度触发器在客户端上运行,而不是在服务器的上下文中运行。所以它们不像存储过程那样。)
答案 2 :(得分:0)
说实话,我不确定我明白实际问题是什么。
如果您担心客户端应用程序能够连接到单独的数据库服务器,这实际上是常态,而不是例外。只需使用任何JDBC / ODBC桥,您就可以在客户端上执行代码,只需将数据移入和移出网络。
如果您希望在远程服务器上执行逻辑(您在命名的AppServer上调用过程的示例会建议后者),那么基础是相同的,即使用ODBC连接到DB服务器,并将大部分逻辑移到存储过程。
(我认为你所寻找的是大多数现代RDBMS中的名称“存储过程”:即完全代码单元,无论是函数还是程序,都是在DB服务器本身上运行的。它们可以远程调用由客户端,但在数据库服务器上使用内存和计算资源。)
在使用DB时,这又是一个非常标准的架构选择。进度ABL / 4GL有一个混合范式模型可能会让你的观点有些混乱(如果内存服务,APPServers是作为某种无头“超级客户端”运行的进程,并且没有“存储过程”的概念,即代码在内部运行数据库本身,除了可能的触发器)。
答案 3 :(得分:0)
回答以后的参考:
是的,现在有了。在OpenEdge 11.5(2014年12月发布)中," Pacific AppServer"被包含作为经典appserver的替代品。它基于Apache Tomcat,比旧版更轻量级。
有关详细信息,请参阅以下内容: