您的服务的描述语言可能是 Delphiinterface
本身。由于您不需要发布它,因此它是一个安全且简单的解决方案。
考虑到您的要求:
我想以可以描述和检索的方式重写此服务器的服务提供。很像 DCOM Iunknown 和 Idispatch 功能。我不需要它是像 WSDL 这样的公共完全实现的语言。
您可以考虑使用我们基于开源mORMot 接口的服务来发布和使用您的服务。
他们在 HTTP 和 REST 上使用 JSON,并且几乎所有操作都是自动化的。您只需要使用将用作服务合同interface
的 plain定义您的服务:
type
ICalculator = interface(IInvokable)
['{9A60C8ED-CEB2-4E09-87D4-4A16F496E5FE}']
/// add two signed 32 bit integers
function Add(n1,n2: integer): integer;
end;
然后在服务器端,将其实现为常规的 Delphi 类:
type
TServiceCalculator = class(TInterfacedObject, ICalculator)
public
function Add(n1,n2: integer): integer;
end;
function TServiceCalculator.Add(n1, n2: integer): integer;
begin
result := n1+n2;
end;
Server.ServiceRegister(TServiceCalculator,[TypeInfo(ICalculator)],sicShared);
您在客户端使用服务,无需生成任何包装器:
var I: ICalculator;
begin
if Client.Services['Calculator'].Get(I)) then
result := I.Add(10,20);
end;
mORMot服务器在设计上是独立的(不需要 IIS 或 Apache),您可以将它们作为应用程序或服务运行。你有额外的特性,比如安全性、身份验证或会话处理,并且性能非常好。从 Delphi 6 到 XE4,针对 Win32 和 Win64 平台。
PS:
您甚至可以设置TServiceContainerServer.PublishSignature := true
并使用_signature_
伪方法来检索简单的 JSON 签名:
[
{
"contract":"Calculator",
"implementation":"shared",
"methods":
[
{
"method":"Add",
"arguments":
[
{"argument":"Self","direction":"in","type":"self"},
{"argument":"n1","direction":"in","type":"integer"},
{"argument":"n2","direction":"in","type":"integer"},
{"argument":"Result","direction":"out","type":"integer"}
]
}
]
}
]