1

我正在尝试从本地工作组计算机(Windows 7)(称为“客户端”)向工作组服务器(托管在 AWS EC2 上)上设置的 Service Bus 1.0 发送和接收消息。经过多次试验和研究,我无法将消息从客户端机器发送到服务器。我关注了许多似乎表明可以这样做的文章,但我无法解决我看到的身份验证问题。

连接到 AWS 上的 Windows Server 服务总线

Windows 工作组上的 Microsoft 服务总线

我注意到 Microsoft 系统要求似乎表明它“不受支持”和“不可能”。我的问题是这可以做到吗,有人成功了吗?任何帮助将不胜感激。

msdn.microsoft.com/en-us/library/windowsazure/jj193011(v=azure.10).aspx

我的尝试包括使用 WindowsTokenProvider 和 OAuthTokenProvider。我得到相同的结果:

System.UnauthorizedAccessException:访问“ https://xx.xx.xx.xx:9355/ServiceBusDefaultNamespace/ $STS/Windows/”时,令牌提供程序无法提供安全令牌。令牌提供者返回消息:''。---> System.IdentityModel.Tokens.SecurityTokenException:令牌提供程序在访问“ https://xx.xx.xx.xx:9355/ServiceBusDefaultNamespace/ $STS/Windows/”时无法提供安全令牌。令牌提供者返回消息:''。---> System.Net.WebException:远程服务器返回错误:(401)未经授权。

使用 AddressingScheme“路径”为工作组安装设置服务总线命名空间。客户端连接字符串包括到达服务器的 IP,我在创建队列之前设置了 RemoteCertificateValidationCallback。

Endpoint=sb://xx.xx.xx.xx/ServiceBusDefaultNamespace;StsEndpoint=https://xx.xx.xx.xx:9355/ServiceBusDefaultNamespace;RuntimePort=9354;ManagementPort=9355;WindowsUsername=SBUser;WindowsDomain=[NotUsed];WindowsPassword=[Password]

附加到远程队列并发送消息的代码如下:

ServiceBusConnectionStringBuilder connBuilder = new ServiceBusConnectionStringBuilder(ConfigurationManager.AppSettings["Microsoft.ServiceBus.ConnectionString"]); // Gets the connection string above
TokenProvider tokenProvider = WindowsTokenProvider.CreateWindowsTokenProvider(connBuilder.StsEndpoints, new NetworkCredential(connBuilder.WindowsCredentialUsername, connBuilder.WindowsCredentialPassword));
MessagingFactorySettings messagingFactorySettings = new MessagingFactorySettings();
messagingFactorySettings.TokenProvider = tokenProvider;
MessagingFactory messagingFactory = MessagingFactory.Create(connBuilder.GetAbsoluteRuntimeEndpoints(), messagingFactorySettings);
requestQueue = messagingFactory.CreateQueueClient("RequestQueue");
...
requestQueue.Send(sendMessage);  // Fails here

服务器帐户是带有密码的 SBUser,我在令牌提供程序上将指定的域/主机留空。我注意到服务器上的事件查看器显示正在尝试的身份验证是客户端的用户帐户,而不是来自令牌提供者的用户帐户。为什么是这样?为了在服务器上进行身份验证,我显然遗漏了一些东西。

An account failed to log on.

Subject:
  Security ID: NULL SID
  Account Name: -
  Account Domain: -
  Logon ID: 0x0

Logon Type: 3

Account For Which Logon Failed:
  Security ID: NULL SID
  Account Name: [ClientLogin]
  Account Domain: [ClientMahcine]

Failure Information:
  Failure Reason: Unknown user name or bad password.
  Status: 0xc000006d
  Sub Status: 0xc0000064

感谢任何帮助。谢谢。

4

3 回答 3

1

尝试使用 OAuthTokenProvider 并确保 connBuilder 传递了正确的值。

TokenProvider tokenProvider = TokenProvider.CreateOAuthTokenProvider (connBuilder.StsEndpoints, new NetworkCredential(connBuilder.WindowsCredentialUsername, connBuilder.WindowsCredentialPassword));

尝试此操作后,请回复您在客户端中遇到的例外情况。此外,在服务器中,搜索服务总线部分中的事件,该事件将提供有关异常的更多详细信息。

有了这些信息,我们应该继续下一步。

于 2013-07-12T21:30:46.810 回答
0

我们有同样的问题。服务器 W2k12R2,独立,工作组;客户端 Windows 7,相同的工作组。

必须在两个系统上拥有相同的用户帐户。看起来这是某种正在运行的“身份验证代理”。

看看上面提到的兼容性矩阵:http: //msdn.microsoft.com/en-us/library/windowsazure/jj193011 (v=azure.10).aspx

谢谢,

霍尔格

于 2014-10-14T10:07:43.480 回答
0

你有没有深究?

通过在客户端计算机主机文件中设置证书绑定到的服务器的完全限定域名,我设法解决了完全相同的问题。

因此,如果您在连接字符串中输入了 IP 地址,则应改为输入“AMAZONA-PQxxxxx”。在您的主机文件中,将“AMAZONA-PQxxxxx”解析为 IP 地址。

于 2013-09-16T11:31:19.227 回答