代码之家  ›  专栏  ›  技术社区  ›  Sibeesh Venu

发送事件时出错:Azure函数输出适配器无法将事件Azure函数写入流分析作业输出

  •  0
  • Sibeesh Venu  · 技术社区  · 5 年前

    我有一个Azure IoT开发工具包MXChip,我正在将传感器数据发送到IoT中心。我还设置了流分析作业,输入作为物联网中心,输出作为SQL Server和Azure功能。输出正在写入SQL数据库,因此我正在确认查询是否正确。

    当我检查我的流分析作业日志时,我看到一些错误,如下所示。

    {
        "channels": "Operation",
        "correlationId": "4a9c9b61-631a-4f4f-a403-c2869b2af66c",
        "description": "",
        "eventDataId": "97250faf-fa47-4e78-9981-8429f293bab9",
        "eventName": {
            "value": "streamingNode0",
            "localizedValue": "streamingNode0"
        },
        "category": {
            "value": "Administrative",
            "localizedValue": "Administrative"
        },
        "eventTimestamp": "2018-12-18T15:54:22.9777487Z",
        "id": "",
        "level": "Error",
        "operationId": "a613bc6a-5f61-4064-bea5-83c3af232e68",
        "operationName": {
            "value": "Send Events: Azure Function Output Adapter failed to write events",
            "localizedValue": "Send Events: Azure Function Output Adapter failed to write events"
        },
        "resourceGroupName": "mlIoTPlatformDev",
        "resourceProviderName": {
            "value": "Microsoft.StreamAnalytics",
            "localizedValue": "Microsoft.StreamAnalytics"
        },
        "resourceType": {
            "value": "Microsoft.StreamAnalytics/streamingjobs",
            "localizedValue": "Microsoft.StreamAnalytics/streamingjobs"
        },
        "resourceId": "",
        "status": {
            "value": "Failed",
            "localizedValue": "Failed"
        },
        "subStatus": {
            "value": "",
            "localizedValue": ""
        },
        "submissionTimestamp": "2018-12-18T15:55:04.0799116Z",
        "subscriptionId": "",
        "properties": {
            "Message Time": "2018-12-18 15:54:22Z",
            "Error": "- An error occurred while sending the request.\r\n- The underlying connection was closed: An unexpected error occurred on a send.\r\n- Unable to read data from the transport connection: An existing connection was forcibly closed by the remote host.\r\n- An existing connection was forcibly closed by the remote host\r\n",
            "Message": "Failed to write events. Error encountered after writing [0] batches., - An error occurred while sending the request.\r\n- The underlying connection was closed: An unexpected error occurred on a send.\r\n- Unable to read data from the transport connection: An existing connection was forcibly closed by the remote host.\r\n- An existing connection was forcibly closed by the remote host\r\n, : OutputSourceAlias:AzureFunctionOutput;AdapterType:AzureFunction;ShardId:0;",
            "Type": "AzureFunctionOutputAdapterFailure",
            "Correlation ID": "4a9c9b61-631a-4f4f-a403-c2869b2af66c"
        },
        "relatedEvents": []
    }
    

    [FunctionName("GetData")]
    public static async Task < HttpResponseMessage > Run(
        [HttpTrigger(AuthorizationLevel.Anonymous, "get", "post")] HttpRequestMessage req,
        // [SignalR(HubName = "ml-iot-platform")] IAsyncCollector<SignalRMessage> signalRMessages,
        ILogger log) {
        log.LogInformation($ "GetData function triggered with Uri {req.RequestUri}");
        dynamic data = await req.Content.ReadAsAsync < object > ();
        log.LogInformation($ "Data count is {data.Count}");
    
        if (data.ToString().Length > 262144) {
            return new HttpResponseMessage(HttpStatusCode.RequestEntityTooLarge);
        }
    
        //await signalRMessages.AddAsync(new SignalRMessage()
        //{
        //   Target = "checkData",
        //   Arguments = new object[] { data }
        //});
    
        return req.CreateResponse(HttpStatusCode.OK, "Success");
    }
    

    你曾经面对过这个问题吗?

    1 回复  |  直到 5 年前
        1
  •  2
  •   Sibeesh Venu    5 年前

    我想我明白了,我改变了我的Azure函数代码如下。

    [FunctionName("GetData")]
    public static async Task < HttpResponseMessage > Run(
        [HttpTrigger(AuthorizationLevel.Anonymous, "post")] HttpRequestMessage req,
        ILogger log) {
        log.LogInformation($ "GetData function triggered with Uri {req.RequestUri}");
    
        string content = await req.Content.ReadAsStringAsync();
        log.LogInformation($ "String content is {content}");
        dynamic data = JsonConvert.DeserializeObject(content);
    
        log.LogInformation($ "Data count is {data?.Count}");
    
        if (data ? .ToString() ? .Length > 262144) {
            return new HttpResponseMessage(HttpStatusCode.RequestEntityTooLarge);
        }
    
        return req.CreateResponse(HttpStatusCode.OK, "Success");
    }
    

    当我监视我的Azure函数时,我可以看到我收到了一个错误,因为“没有MediaTypeFormatter可用于从媒体类型为“application/octet stream.”的内容中读取“object”类型的对象”,所以我将数据作为字符串获取,并将其反序列化。

    除此之外,我还设置了 TLS版本 对于我的1.0功能,这一点非常重要,Microsoft发出了更改的警告,但不是错误。

    enter image description here

    现在,从monitor选项看,该功能工作正常,没有任何错误。您还可以查看文档 here .

    enter image description here