如何从 C# 中的 Azure 函数在设备中执行方法?
Posted
技术标签:
【中文标题】如何从 C# 中的 Azure 函数在设备中执行方法?【英文标题】:How can I execute a method in a device from an Azure function in C#? 【发布时间】:2019-10-10 10:44:13 【问题描述】:我有一个流分析,它根据接收到的内容将一些数据输出到 C# 中的 Azure 函数。此函数必须向设备发送 JSON,当它读取 JSON 时,它会根据接收到的数据运行本地方法。我的问题是我找不到这样做的方法。
我已经在 Java 中完成了这项工作,但我找不到在 C# 中执行此操作的方法。我这样做的方法是使用 HTTP 触发器和下面的代码。
这就是我反序列化接收到的数据的方式:
String body = request.getBody().get().toString().replace("[", "").replace("\"", "\'");
JSONObject bodyJson = new JSONObject(body);
String deviceMac = bodyJson.getString("deviceid");
deviceId = bodyJson.getString("receiveruuid");
这就是我将结果发送到设备的方式:
DeviceMethod methodClient = DeviceMethod.createFromConnectionString(iotHubConnectionString);
Map<String, Object> payload = new HashMap<String, Object>()
//PAYLOAD DATA
;
MethodResult result = methodClient.invoke(deviceId, methodName, responseTimeout, connectTimeout, payload);
感谢您的帮助
更新
我终于通过这种方式解决了问题。
var serviceClient = ServiceClient.CreateFromConnectionString(iotHubConnectionString);
var methodname = new CloudToDeviceMethod("method_defatult").SetPayloadJson(" \"message\": \""+ message +"\"");
await serviceClient.InvokeDeviceMethodAsync("moviltest", methodname);
使用第一行,您可以创建到 iotHub 的连接字符串。第二行是创建 CloudToDeviceMethod 并设置有效负载。确保 JSON 是正确的。 最后调用设备中的方法。
【问题讨论】:
【参考方案1】:您需要从消息中获取字节并将其发送到设备:
private async static Task SendCloudToDeviceMessageAsync()
var serviceClient = ServiceClient.CreateFromConnectionString(iotHubConnectionString);
var commandMessage = new
Message(Encoding.ASCII.GetBytes("Cloud to device message."));
await serviceClient.SendAsync("myFirstDevice", commandMessage);
更多信息在这里:https://docs.microsoft.com/en-us/azure/iot-hub/iot-hub-csharp-csharp-c2d
【讨论】:
【参考方案2】:我终于这样解决了问题。
var serviceClient = ServiceClient.CreateFromConnectionString(iotHubConnectionString);
var methodname = new CloudToDeviceMethod("method_defatult").SetPayloadJson(" \"message\": \""+ message +"\"");
await serviceClient.InvokeDeviceMethodAsync("moviltest", methodname);
使用第一行创建到 iotHub 的连接字符串。第二行是创建 CloudToDeviceMethod 并设置有效负载。确保 JSON 是正确的。最后调用设备中的方法。
【讨论】:
以上是关于如何从 C# 中的 Azure 函数在设备中执行方法?的主要内容,如果未能解决你的问题,请参考以下文章
如何从 C# Core 中的 azure blob 存储中读取所有文件
WinSCP .NET 程序集失败,在 C# Azure 函数中的 Session.Open 中出现“未找到 winscp.exe 可执行文件”