0

我一直在试验 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。

我想我想弄清楚如何在不同的机器上运行(可能)多个发件人,而不需要发件人可能在主机上运行的每个帐户都具有活动帐户。即使在基于域的环境中,如果发件人正在运行的域帐户没有访问主机的权限,我似乎也会遇到这个问题。

4

1 回答 1

0

对于工作组机器,在指定网络凭据时,不要添加主机名,只添加用户。这应该让您的请求得到正确的身份验证:

MessagingFactorySettings mfSettings = new MessagingFactorySettings()
{
    TokenProvider = TokenProvider.CreateWindowsTokenProvider( 
        new List<Uri>() { rootAddressManagement }, 
        new NetworkCredential( "User", "<User's Password>" ) )
};

如果您仍然遇到问题,这个其他线程有更多关于设置的信息。

于 2013-01-05T22:32:56.487 回答