我正在跟踪this tutorial,并且不断收到调用QueueClient.Send()
的异常。
首先,这是我在App.Config中的连接字符串设置(其中{computername}替换为实际的计算机名称):
<add key="Microsoft.ServiceBus.ConnectionString" value="Endpoint=sb://{computername}/ServiceBusDefaultNamespace;StsEndpoint=https://{computername}:9355/ServiceBusDefaultNamespace;RuntimePort=9354;ManagementPort=9355" />
这是我正在运行的代码:
NamespaceManager namespaceManager = NamespaceManager.Create();
TokenProvider nameSpaceManagerTokenProvider = TokenProvider.CreateWindowsTokenProvider(
new List<Uri>() { namespaceManager.Address }, new NetworkCredential(user, password));
TokenProvider messagingToken = TokenProvider.CreateWindowsTokenProvider(
new List<Uri>() { namespaceManager.Address }, new NetworkCredential(user, password));
namespaceManager.Settings.TokenProvider = nameSpaceManagerTokenProvider;
MessagingFactorySettings messageFactorySettings = new MessagingFactorySettings {TokenProvider = messagingToken};
MessagingFactory messagingFactory = MessagingFactory.Create(namespaceManager.Address, messageFactorySettings);
if (namespaceManager.QueueExists(QueueName))
{
namespaceManager.DeleteQueue(QueueName);
}
QueueDescription qd = new QueueDescription(QueueName);
namespaceManager.CreateQueue(qd);
QueueClient myQueueClient = messagingFactory.CreateQueueClient(QueueName);
BrokeredMessage sendMessage = new BrokeredMessage("Hello, World!");
myQueueClient.Send(sendMessage); // <---- This is where I'm getting the exception
队列被删除/创建没有问题。调用
.Send()
方法会给我以下错误:Microsoft.ServiceBus.Messaging.MessagingCommunicationException
“套接字连接已中止。这可能是由于处理您的消息时出错或远程主机超出了接收超时,或者是潜在的网络资源问题。本地套接字超时为'00:00:59.9579976'。”
内部异常只是“远程主机强行关闭了现有连接”
这是堆栈跟踪:
at Microsoft.ServiceBus.Messaging.Sbmp.SbmpMessageSender.EndSendCommand(IAsyncResult result)
at Microsoft.ServiceBus.Messaging.Sbmp.SbmpMessageSender.OnEndSend(IAsyncResult result)
at Microsoft.ServiceBus.Messaging.Sbmp.SbmpMessageSender.OnSend(TrackingContext trackingContext, IEnumerable`1 messages, TimeSpan timeout)
at Microsoft.ServiceBus.Messaging.MessageSender.Send(TrackingContext trackingContext, IEnumerable`1 messages, TimeSpan timeout)
at Microsoft.ServiceBus.Messaging.MessageSender.Send(BrokeredMessage message)
at Microsoft.ServiceBus.Messaging.QueueClient.Send(BrokeredMessage message)
at SBDemo.Program.Main(String[] args) in c:\Users\hartez\Documents\bitbucket\SBDemo\SBDemo\Program.cs:line 51
at System.AppDomain._nExecuteAssembly(RuntimeAssembly assembly, String[] args)
at System.AppDomain.ExecuteAssembly(String assemblyFile, Evidence assemblySecurity, String[] args)
at Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly()
at System.Threading.ThreadHelper.ThreadStart_Context(Object state)
at System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)
at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)
at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
at System.Threading.ThreadHelper.ThreadStart()
我目前正在Windows 7 64位开发人员框中同时运行客户端代码和服务总线。我最初在2012 Server计算机上运行Service Bus,但遇到了同样的问题。
WindowsTokenProvider
和OauthTokenProvider
都出现问题。用户帐户是管理员(希望这只是权限问题);这似乎没有帮助。我也尝试过停用Windows防火墙,但这也无济于事。我在事件查看器中启用了“分析”和“调试”日志,但在这些日志中没有看到任何提示问题的可能。
如果有人对可能出什么问题或其他调试方法有任何建议,我将非常感谢。
最佳答案
很高兴您已经知道了这一点。
MessagingFactoryessagingFactory = MessagingFactory.Create(namespaceManager.Address,messageFactorySettings);
您在原始代码中遇到的问题是,它正在使用MessagingFactory的NamespaceManager地址。 MessagingFactory使用与NamespaceManager不同的端口。
NamespaceManager用于管理(CRUD)操作,而SB具有管理端点。
MessagingFactory用于运行时操作(发送/接收/ ..),并且SB具有运行时内生符。
QueueClient.Create(QueueName)在内部创建消息传递工厂,并使用默认地址和端口进行运行时操作。