QueueClient.Send()
<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
Microsoft.ServiceBus.Messaging.MessagingCommunicationException
“插座连接已中止。这可能是由于处理您的消息或远程主机超过接收超时的错误或基础网络资源问题引起的。本地套接字超时为'00:00:00:59.9579976'。
内部异常只是“现有连接被远程主机强行关闭”
这里是堆栈痕迹:
.Send()
我当前在Windows 7 64位开发框上同时运行客户端代码和服务总线。我最初在2012年服务器机器上运行了服务总线,并且遇到了同样的问题。 问题均与
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()
WindowsTokenProvider
I在事件查看器中启用了分析和调试日志,但是我没有看到这些日志中的任何内容来暗示问题可能是什么。
如果有人对可能出错的问题有任何建议,或者以其他调试方式有任何建议,我会非常感谢。
glad,您已经弄清楚了。
MessagingFactoryMessagingFactory = MessagingFactory.Create(namespaceManager.Address,MessageFactorySettings);
您在原始代码中遇到的问题是,它正在使用MessagingFactory的命名驱动器地址。 MesgagingFactory使用的端口与命名命名驱动器不同。
QueueClient.Create(QueueName)内部创建了一个消息工厂,并使用默认地址和端口进行运行时操作。
最终弄清楚了这一点,将其放在这里,以便在同一条船上的其他任何人都可以避免解决这个问题:明显地,问题在示例中使用MesgagingFactory的某个地方。我不太确定它甚至是什么(也许处理诸如AMQP之类的事情,它尚未真正得到服务巴士的支持吗?),但是您不需要它。您可以使用queueclient.create()创建客户端。我修改了看起来像这样的代码,现在它可以正常工作:
OauthTokenProvider
即使我可以阅读带有错误的消息,即使我可以读取消息:'现有连接被远程主机强行关闭,错误代码:连接reset
'..几个小时后,我发现我没有在启动时专门设置TransportType来使用AMQPWebsockets。我希望您需要明确指定运输类型,而不是依赖默认值。
NamespaceManager namespaceManager = NamespaceManager.Create();
TokenProvider nameSpaceManagerTokenProvider = TokenProvider.CreateWindowsTokenProvider(
new List<Uri>() { namespaceManager.Address }, new NetworkCredential(user, password));
namespaceManager.Settings.TokenProvider = nameSpaceManagerTokenProvider;
if (namespaceManager.QueueExists(QueueName))
{
namespaceManager.DeleteQueue(QueueName);
}
QueueDescription qd = new QueueDescription(QueueName);
namespaceManager.CreateQueue(qd);
QueueClient myQueueClient = QueueClient.Create(QueueName);
BrokeredMessage sendMessage = new BrokeredMessage("Hello, World!");
myQueueClient.Send(sendMessage);