私の組織では、Microsoft TFS を使用してコンポーネントを展開しています。NServiceBus コンポーネントは、BuildPortal によって Windows サービスとして展開されます。通常、自動化された MSI パッケージが作成され、ターゲット サーバーに展開されます。MSI パッケージを展開するために、ビルド ポータルはサービス アカウント (管理者/スーパーユーザー) を使用します。NServiceBusHost は、同じサービス アカウントでは実行されません。システム アカウントまたは別のサービス アカウントが使用され、サーバーに対するアクセス許可が制限されており、そのアカウントは管理者グループの一部ではありません。
つまり、Host /install コマンドは、実際の NServiceBusHost の実行とは異なるアカウントで実行されます。インストール中に、必要なすべてのキューがインストーラーによって (NServiceBus.Integration プロファイルを使用して) 作成されます。さて、問題は、キューが元のサービス アカウントとは異なるアカウントによって作成されたため、次のエラーがスローされることです。
Message:Could not create queue error@xxxxxxx01 or check its existence. Processing will still continue.
NServiceBus.Utils.MsmqUtilities.CreateQueueIfNecessary(:0)
System.Messaging.MessageQueueException (0x80004005): Access to Message Queuing system is denied.
at System.Messaging.MessageQueue.SetPermissions(AccessControlList dacl)
at NServiceBus.Utils.MsmqUtilities.SetPermissionsForQueue(String queue, String account)
at NServiceBus.Utils.MsmqUtilities.CreateQueueIfNecessary(Address address, String account)
上記のエラーを解決するために、INeedToInstallSomething. ただし、Install() メソッド内での使用方法や使用対象に関する適切なドキュメント/サンプルはありません。Configure.Instance.ForInstallationOn().Install()を呼び出すと、インストーラーは期待どおりにキューを作成しません。私たちが望んでいたのは、現在のインストーラーの依存キューのリストを取得し、次のようなパーミッションを設定することだけです >> messageQueue.SetPermissions(serviceAccount, MessageQueueAccessRights.FullControl)
現在のホストのすべての依存キューを取得し、ホストのインストール中にのみ許可を割り当てることは可能ですか?
ノート:
- 今のところ、このロジックをホストの外に移動したくありません。はい、単純な PSS を使用すると、この問題を解決するのに役立つ場合があります。
- 管理者になれないホストを実行するには、制限付きアカウントを使用する必要があります。