Я отправляю сообщения в тему служебной шины Azure с помощью REST API — https://learn.microsoft.com/en-us/rest/api/servicebus/send-message-to-queue.
Сообщения становятся недействительными по причине: «Объект с включенным сеансом не разрешает сообщение, идентификатор сеанса которого равен нулю». Поскольку в подписке включен сеанс, ожидается, что будет передан «sessionId». Я вижу, что SDK поддерживает отправку sessionId, но REST API — нет. Но мне нужно использовать REST API, и я не могу подключиться с помощью SDK, поскольку вызов выполняется из продаваемого продукта.
Есть мысли о том, как преодолеть эту проблему? Как можно передать идентификатор сеанса через API?
Спасибо @Thomas за ваш вклад, но упомянутое вами свойство SessionId
является частью .NET SDK для Azure Service Bus, который доступен при работе в приложении .NET, ссылающемся на пространство имен Microsoft.ServiceBus.Messaging
.
Это свойство позволяет вам установить идентификатор сеанса для сообщения при его отправке в очередь или тему с включенным сеансом с помощью SDK.
Однако, поскольку вы ограничены использованием REST API и не можете использовать SDK, вам нужно будет найти способ имитировать функциональность установки SessionId
через REST API.
SessionId
при отправке сообщений, внедрив небольшой прокси-сервер или используя функцию Azure или приложение логики.consoleapp.cs с Rest API, используя SessionId
:
using System;
using System.IO;
using System.Net.Http;
using System.Text;
using System.Threading.Tasks;
class Program
{
static async Task Main(string[] args)
{
// Replace with your Service Bus details
string serviceNamespace = "sampath";
string queueName = "sampath";
string sasToken = "";
string messageBody = "This is a message.";
// Create the HTTP client
using (HttpClient client = new HttpClient())
{
// Set the request URI
string requestUri = $"https://{serviceNamespace}.servicebus.windows.net/{queueName}/messages?timeout=60";
// Create the message content with corrected content type
StringContent content = new StringContent(messageBody, Encoding.UTF8, "application/xml");
// Add required headers
client.DefaultRequestHeaders.Add("Authorization", sasToken);
// Adding the BrokerProperties header with SessionId
client.DefaultRequestHeaders.Add("BrokerProperties", "{\"Label\":\"M1\",\"State\":\"Active\",\"TimeToLive\":10,\"SessionId\":\"Hello\"}");
client.DefaultRequestHeaders.Add("Priority", "High");
client.DefaultRequestHeaders.Add("Customer", "12345,ABC");
client.DefaultRequestHeaders.ExpectContinue = true;
HttpResponseMessage response = await client.PostAsync(requestUri, content);
// Check the response
if (response.IsSuccessStatusCode)
{
Console.WriteLine($"Message sent successfully with status code: {response.StatusCode}");
}
else
{
Console.WriteLine($"Failed to send message. Status code: {response.StatusCode}, Reason: {response.ReasonPhrase}");
}
}
}
}
Сообщение отправлено:
Выход: