Как сохранить данные из служебной шины в таблицы Azure? - PullRequest
0 голосов
/ 18 сентября 2018

Я хочу сохранить данные, полученные через тему, в таблицы Azure. Для этого я использую функции Azure.

public static class Function1
{
    [FunctionName("Function1")]
    public static async Task Run([ServiceBusTrigger("simple_test_topic", "stt_subscription", AccessRights.Manage, Connection = "ServiceBusConnectionString")]string mySbMsg,
        [Table("RoomBasicInformation")] CloudTable outputTable, TraceWriter log)
    {
        log.Info($"C# ServiceBus topic trigger function processed message: {mySbMsg}");
        RoomEntry re = new RoomEntry(){ PartKey = "hpk", RoomId = "13", Temperature = "10"};
        var operation = TableOperation.Insert(re);
        await outputTable.ExecuteAsync(operation);
    }
}

public class RoomEntry : TableEntity
{
    public string PartKey { get; set; }
    public string RoomId { get; set; }
    public string Temperature { get; set; }
}

Но после выполнения в визуальной студии я получаю

mscorlib: Исключительная ситуация при выполнении функции: Function1. Microsoft.WindowsAzure.Storage: удаленный сервер возвратил ошибку: (400) Неверный запрос.

1 Ответ

0 голосов
/ 18 сентября 2018

Вы должны инициализировать PartitionKey и RowKey из TableEntity.

Добавить объект в таблицу

Изменить RoomEntity, чтобы инициализировать эти значения:

public class RoomEntry : TableEntity
{
    public RoomEntry() 
    {
    }

    public RoomEntry(string partitionKey, string roomId) 
    {
        this.PartitionKey = partitionKey;
        this.RowKey = roomId;
    }

    public string RoomId => this.RowKey;
    public string Temperature { get; set; }
}

Вам не нужно PartKey свойство TableEntity уже имеет его для этого.

Также измените инициализацию RommEntity в функции Azure на:

var roomEntry = new RoomEntry("hpk", "13") { Temperature = "10" };
...