Произошла ошибка Отправка событий: Адаптер вывода функции Azure не смог записать события Функция Azure в качестве вывода задания Stream Analytics - PullRequest
0 голосов
/ 19 декабря 2018

У меня есть MXChip Azure IoT Dev Kit, и я отправляю данные датчика в концентратор IoT.Я также настроил задание Stream Analytics с вводом в качестве концентратора 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": []
}

Ниже приведен мой код функции Azure.

[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 Ответ

0 голосов
/ 19 декабря 2018

Кажется, я понял это, я изменил свой код функции 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 недоступендля чтения объекта типа 'Object' из содержимого с типом носителя 'application / octet-stream'. ", поэтому я получаю данные в виде строки и десериализую их.

Кроме того, я также установил Версия TLS моей функции до 1.0, это очень важно, Microsoft дает предупреждение об изменении, но не об ошибке.

enter image description here

Теперь функция работает без ошибок, с опции монитора.Вы также можете посмотреть документацию здесь .

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...