フローティングライセンス
フローティングライセンスは、ネットワーク上のユーザーまたはコンピューターの間で共有されるライセンスのプールです。Babel Licensing では、Babel Desktop を使って Babel Licensing Service 上にフローティングライセンスを作成します。このページでは、Babel Desktop でフローティングライセンスを作成する方法と、Babel Licensing ライブラリを使ってクライアントの .NET アプリケーションでそのライセンスを使用するための設定方法を説明します。
前提条件
Babel Licensing Service でフローティングライセンスの機能を使えるようにするには、次の手順に従います。まず、はじめにセクションの説明に従って、Babel Licensing Service がサーバーで稼働していることを確認します。次に、この後の説明を参照して、テスト用の製品と、それに対応するライセンステンプレートを作成します。これが、フローティングライセンスを生成するための土台になります。
続いて、フローティングライセンスのクライアントのソースコードを GitHub からダウンロードします。このクライアントコードは、.NET アプリケーションにフローティングライセンスの機能を組み込むために使用します。
git clone https://github.com/babelfornet/floating-license-console-example.gitこの例のフローティングライセンスを作成するには、対応するライセンステンプレートを作成しておく必要があります。
フローティングライセンスの作成
Babel Desktop は Babel Licensing Service に接続し、フローティングライセンスの作成と設定ができます。ライセンスプールのサイズ、つまりライセンスを同時に使用できるユーザーまたはコンピューターの数を定義します。アプリケーションは、必要なときにプールからライセンスを取得し、使い終わると解放します。チェックアウトされたシートはそれぞれ 1 つのトークンであり、サービスのトークンの上限に対してカウントされます。ライセンストークンを参照してください。
Babel Desktop でフローティングライセンスを登録するには、次の手順に従います。
サービスに接続する
Babel Desktop を開き、アクティビティバーで Babel Licensing Service のプロファイルのアイコンをクリックします。ライセンスの生成には「ローカル管理」に設定した「ローカル テスト」プロファイルが必要なため、Babel Desktop はサービスのコンピューターで実行します。リモートのサービスには、Web アプリケーションまたは Management API を使用します。
ライセンスを生成する
「ライセンス」ビューを開き、ツールバーの「ライセンスを生成」を選択します。
テンプレートと署名キーを選択する
「テンプレート」グループで、前の段落で作成したライセンスの「テンプレート」(ライセンステンプレートを参照)と「署名キー」を選択します。署名キーを選択しない場合は、テンプレートのキー、またはその製品のキーが使用されます。
モードをフローティングに設定する
「条件」グループで、「モード」を「フローティング」に設定します。
プールサイズを設定する
「サイト」に、フローティングプールのサイズ、つまり同時に使用できるライセンスの数を入力します。
ユーザーキーを生成する
「ライセンス情報」グループで、「ユーザー キー」の項目の右端にある「生成」ボタンを押します。クライアントアプリケーションは、この一意のコードを使ってフローティングライセンスを要求します。
ライセンシーとライセンスの詳細を入力する
ライセンシーの情報(ライセンシーの名前または会社のいずれかが必須)と、このライセンスに追加する「フィールド」、「機能」、「制限」を入力します。
形式を選択する
ライセンスの「形式」を、「XML」、「XML 署名」、「ASCII」、「Base32」から選択します。
ライセンスを保存する
フォームを保存します。サービスがライセンスを生成し、署名します。
ライセンスの検証に必要な、「Keys.snk」ファイルから抽出した公開キーは、サンプルのソースコードにすでに設定されています。
新しく登録したフローティングライセンスは、一意のライセンスキーとその他の関連情報とともに、ライセンスのグリッドに表示されます。Data Center エディションでは、Web アプリケーションの「Licenses」ページでもフローティングライセンスを作成できます。
Babel Licensing Service は、ライセンスの同時使用数を、入力したフローティングサイト数に制限します。
クライアントの設定
Babel Licensing Service でフローティングライセンスを作成したら、クライアントの .NET アプリケーションがそのライセンスを使用するように設定する必要があります。そのためには、Babel Licensing ライブラリをアプリケーションに組み込み、フローティングライセンスのプールからライセンスを要求して解放するために必要なコードを実装します。Babel Licensing ライブラリは、ライセンスの検証と適用のための API を提供します。
フローティングライセンスのサンプルプロジェクトを開くには、次の手順に従います。
ソリューションを開く
フローティングライセンスのサンプルプロジェクトが保存されている場所に移動し、ソリューションファイル「ClientFloating.sln」をダブルクリックして、Visual Studio などの使い慣れた統合開発環境(IDE)で開きます。
クライアントライブラリの参照を確認する
プロジェクトが開いたら、Babel Licensing のクライアントライブラリが正しく参照されていることを確認します。参照がない場合は、クライアントコンポーネントの段落を参照して、ローカルの NuGet リポジトリを設定してください。
ソリューションをビルドする
参照が正しいことを確認したら、IDE のメニューから「Build」または「Rebuild」を選択して、ソリューションをビルドします。
アプリケーションを実行する
ソリューションのビルドに成功したら、「Start Debugging」ボタンを押すか、IDE のキーボードショートカット(Visual Studio では F5 など)を使って、デバッグ構成でアプリケーションを実行できます。フローティングライセンスのサンプルアプリケーションが起動し、ライセンス機能を操作して、フローティングライセンスのワークフローをテストできます。
フローティングライセンスキーを入力する
ライセンス用に生成されたフローティングライセンスキーを入力し、ENTER を押します。

フローティングライセンスのコンソール
サンプルの完全なソースコードは次のとおりです。
using Babel.Licensing;
// Create a new configuration object
BabelLicensingConfiguration config = new BabelLicensingConfiguration() {
// Set the service URL
ServiceUrl = "http://localhost:5005",
// Set the public key used to verify the license signature
SignatureProvider = RSASignature.FromKeys("MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDE1VRiIdr6fiVZKve7NVgjIvGdRiRx0Mjjm+Yzf6tLbzFnxLs0fat5EoRcubxx0QQQDfydsJBE/fc7cwRWSrE2xK6X4Eb4W8O47pCMjqvTQZfDqQywEZJrLlxpp9hlKz6FDYX4SagrjmP1gdw8olo+n+IBz8ubkNxRhvycikxuDQIDAQAB"),
// Set a unique client ID in case multiple instances of the application are running on the same machine
ClientId = Guid.NewGuid().ToString()
};
// Create the client object used to communicate with the server
BabelLicensing client = new BabelLicensing(config);
// Ask the user to enter the floating license key
Console.WriteLine("Please enter your floating license key: ");
string? userKey = Console.ReadLine();
try
{
var result = await client.RequestFloatingLicenseAsync(userKey, typeof(Program));
Console.WriteLine($"License {result.License.Id} requested.");
}
catch (Exception ex)
{
Console.WriteLine($"Could not request floating license: {ex.Message}");
return;
}
try
{
// Simulate a long task which requires the allocation of a license
for (int i = 0; i < 10; i++)
{
// Validate the license
// This will contact the server to validate the license
var result = await client.ValidateLicenseAsync(userKey, typeof(Program));
Console.WriteLine($"{i}) License {result.License.Id} valid.");
// Wait 1 second
await Task.Delay(1000);
}
try
{
// Release the license to allow other clients to use it
await client.ReleaseFloatingLicenseAsync(userKey);
Console.WriteLine("License released.");
}
catch (Exception ex)
{
Console.WriteLine($"Could not release license: {ex.Message}");
}
}
catch (Exception ex)
{
Console.WriteLine($"License not valid: {ex.Message}");
return;
}
BabelLicensing クラスをインスタンス化して、ライセンスサーバーと通信します。ライセンスを検証するための公開キーと、サービスと通信するための URL は、サービスの構成で指定します。
ユーザーは、フローティングライセンスキーの入力を求められます。クライアントは、このライセンスキーを使い、RequestFloatingLicenseAsync メソッドを呼び出してフローティングライセンスを要求します。パラメーターとして、ユーザーキーとプログラムの型を渡します。成功すると、メソッドは要求したライセンスの情報を含む結果オブジェクトを返します。
このコードは、割り当てられたライセンスを必要とする、時間のかかるタスクをシミュレートします。ループの中で、ValidateLicenseAsync メソッドを使ってライセンスを検証します。パラメーターとして、ユーザーキーとプログラムの型を渡します。ライセンスが有効な場合、メソッドはライセンス情報を含む結果オブジェクトを返します。ループには、タスクの所要時間をシミュレートするための 1 秒の遅延も含まれています。
タスクが完了すると、クライアントは ReleaseFloatingLicenseAsync メソッドを使ってフローティングライセンスを解放します。
フローティングライセンスを使うと、限られた数のライセンスをネットワーク上のユーザーまたはコンピューターの間で共有でき、1 つずつライセンスを割り当てる場合よりも管理の手間が少なくなります。ユーザー数が増えていく場合や、部門やチームの間でライセンスを共有する場合に適しています。