Когда сообщение получено в теме служебной шины Azure, функция My Azure срабатывает, она отправляет одно новое сообщение в другую очередь и завершает текущее сообщение, чтобы оно не сработало снова. но в приведенном ниже коде SendMessageAsync завершается нормально, но когда вызовы CompleteMessageAsync получают исключение "Транзакция еще не объявлена или уже выполнена": требуется помощь, чтобы это исправить
public class Function1
{
[FunctionName("Function1")]
//public void Run([ServiceBusTrigger("%ServiceBusTopicName%", "%ServiceBusSubscriptionName%", Connection = "ServiceBusConnectionString", IsSessionsEnabled = true)]string mySbMsg, ILogger log)
// public async Task Run([ServiceBusTrigger("%ServiceBusTopicName%", "%ServiceBusSubscriptionName%", Connection = "ServiceBusConnectionString", IsSessionsEnabled = true)]string mySbMsg, ILogger log)
public async Task Run([ServiceBusTrigger("%ServiceBusTopicName%", "%ServiceBusSubscriptionName%", Connection = "ServiceBusConnectionString",IsSessionsEnabled =true)]
ServiceBusReceivedMessage message,
ServiceBusMessageActions messageActions)
{
string serviceBusConnectionstring = Environment.GetEnvironmentVariable("ServiceBusConnectionString");
string topicName = Environment.GetEnvironmentVariable("ServiceBusTopicName");
string subscriptionName = Environment.GetEnvironmentVariable("ServiceBusSubscriptionName");
string aiTopicName = Environment.GetEnvironmentVariable("ServiceBusAITopicName");
string aiTopicSubscriptionName = Environment.GetEnvironmentVariable("ServiceBusAISubscriptionName");
string zendeskUrl = Environment.GetEnvironmentVariable("ZendeskURL");
string userKey = Environment.GetEnvironmentVariable("UserKey");
var requestKey = 1;
var threadKey = 1;
Console.WriteLine($"C# ServiceBus topic trigger function processed message: {message}");
ServiceBusClientOptions options = new() { EnableCrossEntityTransactions = true };
await using var serviceBusClient = new ServiceBusClient(serviceBusConnectionstring, options);
ServiceBusSender sender = serviceBusClient.CreateSender(aiTopicName);
string jsonString = $@"{{""thread_key"": {threadKey}, ""request_key"": {requestKey}}}";
Console.WriteLine(jsonString); // Create a message and send it to the Service Bus queue
try
{
ServiceBusMessage msg = new ServiceBusMessage(jsonString)
{
SessionId = threadKey.ToString()
};
using (TransactionScope scope = new TransactionScope(TransactionScopeAsyncFlowOption.Enabled))
{
**await sender.SendMessageAsync(msg);**
Console.WriteLine("Connector Processor: SendMessageAsync completed");
**await messageActions.CompleteMessageAsync(message);**
Console.WriteLine("Connector Processor: CompleteMessageAsync completed");
scope.Complete();
}
}
catch (Exception ex)
{
string errorMessage = ex.Message.ToString();
Console.WriteLine("Connector Processor: Exception: {Message}- error log");
Console.WriteLine("Connector Processor: Exception: {Message}", errorMessage);
if (ex.InnerException != null)
{
errorMessage += " | Inner Exception: " + ex.InnerException.Message;
}
Console.WriteLine("Connector Processor: Exception: {Message}", errorMessage);
// Handle Service Bus message retries or deferral
/* if (messageActions != null)
{
try
{
// Option 1: Abandon the message so it can be retried
await messageActions.AbandonMessageAsync(message);
}
catch (Exception abandonEx)
{
Console.WriteLine("Connector Processor:Failed to abandon message: {Message}", abandonEx.Message);
}
}*/
}
}
}
Подробнее здесь: https://stackoverflow.com/questions/792 ... error-tran
SendMessageAsync и CompleteMessageAsync в одной AzureFunction?. ошибка Транзакция еще не объявлена или уже выполнена ⇐ C#
Место общения программистов C#
1732810657
Anonymous
Когда сообщение получено в теме служебной шины Azure, функция My Azure срабатывает, она отправляет одно новое сообщение в другую очередь и завершает текущее сообщение, чтобы оно не сработало снова. но в приведенном ниже коде SendMessageAsync завершается нормально, но когда вызовы CompleteMessageAsync получают исключение [b]"Транзакция еще не объявлена или уже выполнена"[/b]: требуется помощь, чтобы это исправить
public class Function1
{
[FunctionName("Function1")]
//public void Run([ServiceBusTrigger("%ServiceBusTopicName%", "%ServiceBusSubscriptionName%", Connection = "ServiceBusConnectionString", IsSessionsEnabled = true)]string mySbMsg, ILogger log)
// public async Task Run([ServiceBusTrigger("%ServiceBusTopicName%", "%ServiceBusSubscriptionName%", Connection = "ServiceBusConnectionString", IsSessionsEnabled = true)]string mySbMsg, ILogger log)
public async Task Run([ServiceBusTrigger("%ServiceBusTopicName%", "%ServiceBusSubscriptionName%", Connection = "ServiceBusConnectionString",IsSessionsEnabled =true)]
ServiceBusReceivedMessage message,
ServiceBusMessageActions messageActions)
{
string serviceBusConnectionstring = Environment.GetEnvironmentVariable("ServiceBusConnectionString");
string topicName = Environment.GetEnvironmentVariable("ServiceBusTopicName");
string subscriptionName = Environment.GetEnvironmentVariable("ServiceBusSubscriptionName");
string aiTopicName = Environment.GetEnvironmentVariable("ServiceBusAITopicName");
string aiTopicSubscriptionName = Environment.GetEnvironmentVariable("ServiceBusAISubscriptionName");
string zendeskUrl = Environment.GetEnvironmentVariable("ZendeskURL");
string userKey = Environment.GetEnvironmentVariable("UserKey");
var requestKey = 1;
var threadKey = 1;
Console.WriteLine($"C# ServiceBus topic trigger function processed message: {message}");
ServiceBusClientOptions options = new() { EnableCrossEntityTransactions = true };
await using var serviceBusClient = new ServiceBusClient(serviceBusConnectionstring, options);
ServiceBusSender sender = serviceBusClient.CreateSender(aiTopicName);
string jsonString = $@"{{""thread_key"": {threadKey}, ""request_key"": {requestKey}}}";
Console.WriteLine(jsonString); // Create a message and send it to the Service Bus queue
try
{
ServiceBusMessage msg = new ServiceBusMessage(jsonString)
{
SessionId = threadKey.ToString()
};
using (TransactionScope scope = new TransactionScope(TransactionScopeAsyncFlowOption.Enabled))
{
**await sender.SendMessageAsync(msg);**
Console.WriteLine("Connector Processor: SendMessageAsync completed");
**await messageActions.CompleteMessageAsync(message);**
Console.WriteLine("Connector Processor: CompleteMessageAsync completed");
scope.Complete();
}
}
catch (Exception ex)
{
string errorMessage = ex.Message.ToString();
Console.WriteLine("Connector Processor: Exception: {Message}- error log");
Console.WriteLine("Connector Processor: Exception: {Message}", errorMessage);
if (ex.InnerException != null)
{
errorMessage += " | Inner Exception: " + ex.InnerException.Message;
}
Console.WriteLine("Connector Processor: Exception: {Message}", errorMessage);
// Handle Service Bus message retries or deferral
/* if (messageActions != null)
{
try
{
// Option 1: Abandon the message so it can be retried
await messageActions.AbandonMessageAsync(message);
}
catch (Exception abandonEx)
{
Console.WriteLine("Connector Processor:Failed to abandon message: {Message}", abandonEx.Message);
}
}*/
}
}
}
Подробнее здесь: [url]https://stackoverflow.com/questions/79232777/sendmessageasync-and-completemessageasync-in-the-same-azurefunction-error-tran[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия