Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/user-interface/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Azure functions 如何在Azure服务总线触发的Azure功能V3之后获取底层MessageReceiver引用_Azure Functions_Azureservicebus - Fatal编程技术网

Azure functions 如何在Azure服务总线触发的Azure功能V3之后获取底层MessageReceiver引用

Azure functions 如何在Azure服务总线触发的Azure功能V3之后获取底层MessageReceiver引用,azure-functions,azureservicebus,Azure Functions,Azureservicebus,我已将Azure功能配置为在触发Azure功能时不“自动完成”消息。我的问题是我需要自己标记消息完成,并在事务上下文中这样做(见下文)。此使用“via”路由的事务在控制台应用程序中工作,但在Azure中由于缺少对消息出列的原始接收方的引用而失败 如何获取底层接收器引用,以便我可以完成并以原子方式发送?在Azure函数中似乎无法做到这一点 using (var ts = new TransactionScope(TransactionScopeAsyncFlowOption.Enabled)) {

我已将Azure功能配置为在触发Azure功能时不“自动完成”消息。我的问题是我需要自己标记消息完成,并在事务上下文中这样做(见下文)。此使用“via”路由的事务在控制台应用程序中工作,但在Azure中由于缺少对消息出列的原始接收方的引用而失败

如何获取底层接收器引用,以便我可以完成并以原子方式发送?在Azure函数中似乎无法做到这一点

using (var ts = new TransactionScope(TransactionScopeAsyncFlowOption.Enabled))
{
      try
      {
         await receiver.CompleteAsync(completeMessage.SystemProperties.LockToken);

         for (var i = 0; i <= sendMessages.Length - 1; i++)
            await sender.SendAsync(sendMessages[i]);

         ts.Complete();
      }
      catch (Exception ex)
      {
         // This rolls back send and complete in case an exception happens
      }
}

您需要注入函数用于接收传入消息的消息接收器。注入通过功能参数完成。详细介绍。

这是一篇非常有用的帖子。它让我走得更远,我现在得到错误:Microsoft.Azure.ServiceBus.ServiceBusException:事务尚未声明,或已被解除。因此,我正在逐行调试。这是对您确切问题的回答。我还确认,我的第二个问题是因为我从配置创建了一个新的连接对象,而不是重用传递给函数的Run()方法的连接。这样就可以了。你们不需要建立一个新的连接,因为信息接收者会给你们自己的。我可以确认肖恩·费尔德曼的答案是完美的。
ERROR: Microsoft.Azure.ServiceBus.MessageLockLostException: The lock supplied is invalid. Either the lock expired, or the message has already been removed from the queue, or was received by a different receiver instance.