0

私の組織では、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 を使用すると、この問題を解決するのに役立つ場合があります。
  • 管理者になれないホストを実行するには、制限付きアカウントを使用する必要があります。
4

1 に答える 1

0

私はどちらかを試してINeedToInstallInfrastructure<T>、そこにアクセス許可を設定します。または、これはを使用するパフォーマンスカウンターのようなものかもしれませんIWantToRunBeforeConfigurationIsFinalized。後者が必要な場合がありますINeedToInstallInfrastructure<T>

于 2013-01-09T15:09:39.420 に答える