サービスの記述言語は、Delphiinterface
自体である場合があります。公開する必要がないため、安全で簡単なソリューションになります。
あなたのリクエストを考慮して:
このサーバーが提供するサービスを、記述して検索できるように書き直したいと思います。DCOM Iunknown および Idispatch 機能とほとんど同じです。WSDL のような完全に実装された公開言語である必要はありません。
サービスの公開と利用には、オープン ソースのmORMot インターフェイス ベースのサービスを使用することを検討してください。
彼らは JSON over HTTP と REST を使用しており、ほとんどすべてが自動化されています。サービス コントラクトとして使用されるinterface
プレーンなs でサービスを定義するだけで済みます。
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 は必要ありません)、アプリケーションまたはサービスとして実行できます。セキュリティ、認証、セッション処理などの追加機能があり、かなり優れたパフォーマンスを発揮します. Win32 および Win64 プラットフォームを対象とした、Delphi 6 から XE4 までの作業。
PS:
疑似メソッドを設定TServiceContainerServer.PublishSignature := true
して使用して、単純な JSON 署名を取得することもできます。_signature_
[
{
"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"}
]
}
]
}
]