私はWindowsServer用のServiceBusを試してきました。
まず、私の環境に関するいくつかの情報。
私は2つのWindows7ボックスを持っています(それらをホストとクライアントと呼びましょう)。どちらもワークグループに属しています(ドメインなし)。各マシンには2つのユーザーアカウント(管理者とユーザーと呼びましょう)があり、パスワードは一致しています。ホストでは、管理者アカウントは無効になっており、ユーザーはAdministratorsグループのメンバーです。WindowsServer用のServiceBusがホストにインストールされています。ユーザーアカウントによってインストールされました。サービスはユーザーアカウントの資格情報の下で実行され、ユーザーはServiceBusDefaultNamespaceのManageUserとしてリストされます。
Service Busがインストールされているのと同じアカウントで同じマシン上で両方を実行すると、単純なSenderとReceiverが機能するようになりました(Azure Service Busの例からハッキングされました)。
次に、SenderをClientにコピーして実行してみました。証明書に問題がありましたが、それを乗り越えました。ユーザーとしてクライアントにログオンすると、送信者は機能します。管理者としてクライアントにログオンすると、送信者から(401)Unauthorizedが返されます。ホストで管理者アカウントを有効にすると、送信者は機能します。
上記のすべては、ある程度意味があります。ホストはリクエストを認証しようとしており、対応する管理者アカウントが無効になっていることを検出すると、リクエストを拒否しますが、すべてのマシンでアクティブなアカウントを持っている必要があるという点で少し不便なようです。
もう少し掘り下げてみると、アカウントを指定できるはずのようでした。MessagingFactoryを作成するとき、私はTokenProviderを作成していますが、TokenProviderを使用すると、別の資格情報のセットを指定できます。
MessagingFactorySettings mfSettings = new MessagingFactorySettings()
{
TokenProvider = TokenProvider.CreateWindowsTokenProvider(
new List<Uri>() { rootAddressManagement },
new NetworkCredential( "Host\\User", "<User's Password>" ) )
};
しかし、私はまだ401を取得します。
ホストマシンにアクティブなアカウントがある場合に送信者が実行する可能性のあるすべてのアカウントを必要とせずに、異なるマシンで(潜在的に)複数の送信者を実行する方法を理解しようとしていると思います。ドメインベースの環境でも、送信者が実行されているドメインアカウントにホストマシンにアクセスする権限がない場合、この問題が発生するようです。