Tag: servicebus

如何更改异步方法调用以防止强制异步调用堆栈

如果我需要调用一个方法,在内部调用一些异步方法,作为一个fire and forget操作,我怎么能阻止这个调用强制“async”需要用完调用栈来说… MVC控制器? 例如:我的MVC控制器(非异步)调用业务层方法,该方法又调用Windows Azure Service Bus QueueClient.SendAsync(BrokeredMessage),将消息放入队列中,但不需要等待它完成。 通常,在调用此控制器操作时,编译器将抛出一个错误,指出此时无法启动异步操作。 我知道不是等待或只是调用SendAsync()方法,我可以使用ContinueWith()跟进它,以便在异步操作的回调上执行代码,但我被告知这不是一个正确的解决方案。 (请参阅对控制器中调用异步方法的响应) 有人会关心如何解决这种情况的最佳方法吗? 并告诉我为什么ContinueWith()方法不正确?

MessageReceiver.ReceiveBatch()未按预期工作

我试图使用MessageReceiver中的ReceiveBatch方法从ServiceBus批量接收消息: IEnumerable messages; var messagingfactory = MessagingFactory.CreateFromConnectionString(“ConnectionString”); var msgrcvr = messagingfactory.CreateMessageReceiver(“queueName”, ReceiveMode.ReceiveAndDelete); messages = msgrcvr.ReceiveBatch(20, timeoutInSecs); 我已经使用Service Bus Explorer检查了我的队列包含20条消息。 此代码仅在消息结构中返回一条消息。 我遗失了一些财产吗?

为什么BrokeredMessage.RenewLock()只更新锁几秒钟?

我有一个BrokeredMessageContext类,它使用Timer定期检查并更新BrokeredMessage实例上的锁,以防处理此消息的进程运行的时间超过预期。 它通过调用BrokeredMessage实例上的RenewLock()方法来更新锁。 我希望这个调用给我一个与原始锁相同超时的新锁( MSDN声明“你可以在与实体锁定超时相同的持续时间内更新锁定,并且没有锁定续订的最大持续时间。” ) ,但在调试时,锁定超时似乎增加了“任意”10-15秒。 我在BrokeredMessage实例上设置了一个监视器,我可以看到每次调用RenewLock()时,LockedUntilUtc属性都会增加10-15秒。 有谁知道为什么会这样? 可以做任何事情来延长锁定时间吗? 编辑: Mike的回答如下,是正确的。 事实上,我发现事实上,我试图从一开始就每隔十秒更新一次锁,即使我的代码是为了在锁定到期之前的20秒之前更新锁定。 这一切都归结为时间比较问题以及我的机器上的时间错误(它提前了将近一分钟)。 D’哦!

Azure ServiceBus在Client.Receive()上返回null

我有一个问题,从我在azure中设置的队列接收消息。 我以前使用相同的代码成功完成了这个,但现在我在尝试获取消息时只是为null。 当我在azure管理控制台中查看队列时,我清楚地看到队列包含5条消息。 这是代码: ServiceBus SB = new ServiceBus(); Microsoft.ServiceBus.Messaging.BrokeredMessage message; while (true) { message = SB.ReceiveMessage(“orders”); if (message == null) { break; } Procurement.Order order = message.GetBody(); order.id = Guid.NewGuid().ToString(); order.remindercount = 0; using (DbManager db = new DbManager()) { if (db.SetSpCommand(“CreateOrderHead”, db.Parameter(“@companyId”, order.companyId), db.Parameter(“@orderId”, order.orderId), db.Parameter(“@suppliercode”, order.suppliercode), db.Parameter(“@supplierorderId”, order.supplierorderId), db.Parameter(“@orderdate”, order.orderdate), db.Parameter(“@desireddate”, order.desireddate), […]

ServiceBus抛出401 Unauthorized Error

我正在使用Windows Service Bus 1.0 Brokered消息传递的简单实现来跟踪用户与特定Web应用程序的交互。 每次将某些内容保存到数据库中的“敏感”表时,我都会设置存储库层,发送如下消息: ServiceBus.MessageQueue.PushAsync(entity); 然后将序列化实体并从中创建消息。 我的MessageQueue类是这样的。 public static class MessageQueue { static string ServerFQDN; static int HttpPort = 9355; static int TcpPort = 9354; static string ServiceNamespace = “ServiceBusDefaultNamespace”; public static void PushAsync(T msg) { ServerFQDN = System.Net.Dns.GetHostEntry(string.Empty).HostName; //Service Bus connection string var connBuilder = new ServiceBusConnectionStringBuilder { ManagementPort = HttpPort, RuntimePort […]

Service Bus 1.1使用WindowsAzure.ServiceBus dll创建队列

我正准备开发连接到Azure Service Bus的应用程序。 对于开发,我想使用Service Bus 1.1。 我已经安装了localy Service Bus 1.1,当我连接Service Service.v1_1 ver时,它工作正常。 1.0.5 。 但是,正如我想最终使用Azure,我更喜欢使用WindowsAzure Service Bus,我知道sholud与Service Bus 1.1一起使用。 但是当我想执行时: namespaceManager.QueueExists(queueName) 使用WindowsAzure.ServiceBus ver 3.1.2包我收到: ‘System.ArgumentException’ …. The remote server returned an error: (400) Bad Request. The api-version in the query string is not supported. Either remove it from the Uri or use one of ‘2012-03,2012-08,2013-04,2013-07’. […]

在Azure Logic App中反序列化ServiceBus内容

我正在尝试在Azure Logic App中阅读邮件的内容正文,但我没有取得多大成功。 我已经看到很多建议说机体是base64编码的,并建议使用以下代码进行解码: @{json(base64ToString(triggerBody()?[‘ContentData’]))} base64ToString(…)部分正在将内容正确解码为字符串,但字符串似乎包含一个前缀,在开头有一些额外的序列化信息: @string3http://schemas.microsoft.com/2003/10/Serialization/ 3{“Foo”:”Bar”} 该字符串中还有一些额外的字符未在我的浏览器中显示。 所以json(…)函数不接受输入,而是给出错误。 InvalidTemplate。 无法在第1行和第2451行的“HTTP”输入中处理模板语言表达式:’模板语言函数’json’参数无效。 提供的值@string3http://schemas.microsoft.com/2003/10/Serialization/ 3{“Foo”:”bar” }无法解析: Unexpected character encountered while parsing value: @. Path ”, line 0, position 0. Unexpected character encountered while parsing value: @. Path ”, line 0, position 0. 。 有关使用详情,请参阅https://aka.ms/logicexpressions#json 。’。 作为参考,使用.NET服务总线客户端将消息添加到主题中(客户端应该无关紧要,但这看起来更像C#-ish): await TopicClient.SendAsync(new BrokeredMessage(JsonConvert.SerializeObject(item))); 如何在Logic App中将其正确读取为JSON对象?

Azure Service Bus消息泵是否真的是事件驱动的?

所以我们最近一直在研究Azure Service Bus,我们对是否应该使用无限循环轮询队列/订阅或者是否应该使用OnMessage回调/消息泵function感到困惑。 什么会执行更少的操作,从而降低成本? 理想情况下,我们需要一个事件驱动的系统,因此我们不会浪费操作,而且通常只是一种更好的方法。 我的问题是,使用OnMessage定义为“在事件驱动的消息泵中处理消息”真的是事件驱动的吗? 如果你看看这个页面(QueueClient.OnMessage): https ://msdn.microsoft.com/library/azure/microsoft.servicebus.messaging.queueclient.onmessage.aspx你会注意到底部的评论它基本上是一个无限循环的包装器,它调用Receive()方法。 这对我来说听起来不是事件驱动的。 现在,如果您查看此页面(SubscriptionClient.OnMessage): https : //msdn.microsoft.com/en-us/library/azure/dn130336.aspx ,该注释不存在。 那么主题/订阅和队列是一样的,还是它实际上是订阅的事件驱动而不是队列? 为什么他们甚至说这是事件驱动的,显然不是? QueueClient.OnMessage页面上的注释具有“无限循环”和“每个接收操作是可计费事件”这一事实有点可怕。 而且,我并不是真的担心它会花多少钱/多少钱,我更感兴趣的是让它尽可能高效。

没有依赖关系的C#队列或ServiceBus?

是否有可以实现零依赖部署的产品(理想情况下是开源的,但不是必需的)? 我能够找到的每个服务总线或队列库都依赖于其中一个队列应用程序(如msmq)或数据库。 我想要一个非常轻量级的解决方案,我可以添加对我的应用程序的引用,构建它,并使用尽可能少的配置部署它。 在理想的世界中,队列/服务总线将在IIS上运行,并允许Web和富客户端与之通信。 这样的工具对于本地开发机器上的大型分布式系统的快速原型设计是理想的。

Azure托管服务总线:“X.509证书CN = servicebus.windows.net不在受信任的人员商店中。”

在我的vs2013开发VM上使用Azure SDK 2.3我可以轻松地使用Azure中托管的 Service Bus队列。 但是,在Windows Server 2008 R2 Standard SP1上,看起来Windows无法信任所涉及的证书并引发exception。 抛出的线: // Send the message await queueclient.SendAsync(message); exception消息: X.509证书CN = servicebus.windows.net不在受信任的人员商店中。 X.509证书CN = servicebus.windows.net链建设失败。 使用的证书具有无法validation的信任链。 替换证书或更改certificateValidationMode。 无法将证书链构建到受信任的根颁发机构。 CAPI2日志(附在下面)指向信任问题,因此我比较了两台计算机上安装的证书。 服务器上不存在以下证书: 中级证书颁发机构> Microsoft Internet Authority (由Baltimore Cyber​​Trust Root发布) 中级证书颁发机构> MSIT Machine Auth CA 2 (由Microsoft Internet Authority颁发) 问题: 证书来自哪里? 为什么他们从服务器中丢失? 如何解决这个问题? 可能的路径(更新): 在服务器上安装Azure SDK 2.3 for […]