【问题标题】:Azure Stream Analytics c# UDF on Edge using complex parameter使用复杂参数的 Azure 流分析 c# UDF on Edge
【发布时间】:2018-11-01 15:07:11
【问题描述】:

我有一个设备以这种格式发送数据的场景

[   
{
 "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.Type更改每个Payload.Data

但是当我尝试将Payload 对象作为参数传递给c# UDF 时,会引发异常

错误:** 系统异常 ** ASA 将不支持的类型 System.Object 传递给 CSharp UDF Func 以可变负载

它起作用的唯一方法是当我尝试类型(长、字符串等)的参数时。

虽然这个doc 明确表示支持的类型,有没有办法接收c# udf 内的整个对象,或者这个服务不是这个场景的最佳选择,我需要使用别的东西?

【问题讨论】:

    标签: azure user-defined-functions azure-stream-analytics azure-iot-edge


    【解决方案1】:

    Payload 对象是一个数组,它是流分析 C# UDF 中支持的类型。您的函数签名应如下所示:

    public static string SampleUDF(Object[] input)
    

    您应该不会看到此错误。如果您仍然遇到问题,请告诉我。

    【讨论】:

    • 是的,这种情况有效。我还尝试将此对象作为参数{ "Metadata":{"DeviceID":"MWS55V","GatewayID":"abc1"}, "Payload": [{"Type":"401","Data":"17.51"}], "Timestamp":"2018-11-01T09:33:05Z"}, {Object input 作为签名传递,但它会引发异常。
    • 我不确定我是否完全理解。您是否尝试将整个传入事件传递到 UDF 中?你能解释一下你想要完成什么吗?您必须指定要传递给 UDF 的字段。
    • 是的,我试图通过整个事件。但是你所说的You have to specify which fields you want to pass to the UDF. 解释了为什么它不起作用。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-19
    • 2021-11-17
    • 2021-09-23
    • 1970-01-01
    相关资源
    最近更新 更多