UDF Azure Stream Analytics c# на Edge с использованием сложного параметра

У меня есть сценарий, когда устройство отправляет данные в этом формате

[   
{
 "Metadata":{"DeviceID":"MWS55V","GatewayID":"abc1"},
 "Payload": [{"Type":"401","Data":"17.51"}],
 "Timestamp":"2018-11-01T09:33:05Z"},
{
 "Metadata":{"DeviceID":"MWS55V","GatewayID":"abc1"},
 "Payload": [{"Type":"401","Data":"18.28"}],
 "Timestamp":"2018-11-01T09:34:05Z"
}
]

Я добавил Azure Stream Analytics C# UDF с идеей использовать весь объект в качестве параметра и изменять каждый Payload.Data на основе Payload.Type.

Но когда я пытаюсь передать объект Payload в качестве параметра c# UDF, возникает исключение

Ошибка: ** Системное исключение ** ASA передал неподдерживаемый тип System.Object для маршалирования в CSharp UDF Func с переменной полезной нагрузкой

Единственный способ, которым это сработало, - это когда я пробовал параметры типа (длинные, строки и т. Д.).

Хотя это doc явно указывает поддерживаемые типы, есть ли способ получить весь объект внутри c# udf или этот сервис не лучший для этого сценария, и мне нужно использовать что-то еще?


person gneric    schedule 01.11.2018    source источник


Ответы (1)


Объект Payload — это массив, поддерживаемый в UDF Stream Analytics C#. Сигнатура вашей функции должна выглядеть так:

public static string SampleUDF(Object[] input)

При этом вы не должны увидеть ошибку. Дайте мне знать, если у вас все еще возникнут проблемы.

person Sid Ramadoss    schedule 03.11.2018
comment
Да, этот сценарий работает. Я также пытался передать этот объект как параметр { "Metadata":{"DeviceID":"MWS55V","GatewayID":"abc1"}, "Payload": [{"Type":"401","Data":"17.51"}], "Timestamp":"2018-11-01T09:33:05Z"}, { с Object input в качестве подписи, но он выдает исключение. - person gneric; 05.11.2018
comment
Я не уверен, что полностью понимаю. Вы пытаетесь передать все входящее событие в UDF? Можете ли вы объяснить, чего вы пытаетесь достичь? Вы должны указать, какие поля вы хотите передать в UDF. - person Sid Ramadoss; 05.11.2018
comment
Да, я пытался пройти весь ивент. Но то, что вы сказали You have to specify which fields you want to pass to the UDF., объясняет, почему это не работает. - person gneric; 06.11.2018