我一直在试验 Windows Server 的服务总线。
首先是关于我的环境的一些信息。
我有两个 Windows 7 盒子(我们称它们为主机和客户端)。他们都属于一个工作组(没有域)。每台机器都有两个用户帐户(我们称它们为 Admin 和 User)并且密码匹配。在主机上,管理员帐户被禁用,用户是管理员组的成员。用于 Windows Server 的服务总线安装在主机上。它是由用户帐户安装的。该服务在用户帐户凭据下运行,并且用户被列为 ServiceBusDefaultNamespace 的 ManageUser。
当我在安装了服务总线的同一帐户下在同一台机器上运行它们时,我设法让一个简单的发送器和接收器工作(从 Azure 服务总线示例中破解)。
然后我尝试将发件人复制到客户端并运行它。我在证书方面遇到了一些问题,但我已经解决了这些问题。如果我以用户身份登录客户端,则发件人可以工作。如果我以管理员身份登录客户端,发件人会给我一个 (401) Unauthorized。如果我在主机上启用管理员帐户,那么发件人就可以工作。
以上所有内容都有一定的意义。主机正在尝试对请求进行身份验证,当它发现相应的管理员帐户被禁用时,它会拒绝该请求,但它似乎造成了一点不便,因为它要求我在所有机器上都有活动帐户。
经过更多的挖掘,似乎我应该能够指定帐户。创建 MessagingFactory 时,我正在创建一个 TokenProvider,而 TokenProvider 允许我指定一组不同的凭据。
MessagingFactorySettings mfSettings = new MessagingFactorySettings()
{
TokenProvider = TokenProvider.CreateWindowsTokenProvider(
new List<Uri>() { rootAddressManagement },
new NetworkCredential( "Host\\User", "<User's Password>" ) )
};
但我仍然得到401。
我想我想弄清楚如何在不同的机器上运行(可能)多个发件人,而不需要发件人可能在主机上运行的每个帐户都具有活动帐户。即使在基于域的环境中,如果发件人正在运行的域帐户没有访问主机的权限,我似乎也会遇到这个问题。