Получение внутренней ошибки сервера при запуске моей функции Azure на портале - PullRequest
0 голосов
/ 06 сентября 2018

Я создал и опубликовал функцию Azure, активируемую по протоколу HTTP, из Visual Studio. Эта функция предназначена для подключения к концентратору iot и получения двойниковых свойств модуля.

Я настроил файл local.settings.json со строкой подключения модуля, а также добавил его в настройки приложения на портале. Но когда я запускаю функцию на портале, она дает мне внутреннюю ошибку сервера 500.

Я использую версию функции Azure v1.

json-файлы, которые я использую:

local.settings.json

{
      "IsEncrypted": false,
      "Values": {
        "AzureWebJobsStorage": "xxxxxxxx",
        "AzureWebJobsDashboard": "xxxxxx",
        "FUNCTIONS_WORKER_RUNTIME": "dotnet",
        "ModuleConnectionString": "xxxxxxxxx"
      }
    }

host.json

{
  "http": {

"routePrefix": "api",

"maxOutstandingRequests": 20,

"maxConcurrentRequests": 10,

"dynamicThrottlesEnabled": false

    },

 "version": "2.0"

}

function.json

{
  "generatedBy": "Microsoft.NET.Sdk.Functions-1.0.19",
  "configurationSource": "attributes",
  "bindings": [
    {
      "type": "httpTrigger",
      "methods": [
        "get",
        "post"
      ],
      "authLevel": "function",
      "name": "req"
    }
  ],
  "disabled": false,
  "scriptFile": xxxx.dll",
  "entryPoint": "xxxxxxxx.Run"
}

следующий код:

function1.cs

    public static class Function1
    {
        [FunctionName("Function1")]
        public static async Task Run([HttpTrigger(AuthorizationLevel.Function, "get", "post", Route = null)]HttpRequest req, ILogger log)
        {
            log.LogInformation("C# HTTP trigger function processed a request.");


            var moduleConnectionString = Environment.GetEnvironmentVariable("ModuleConnectionString", EnvironmentVariableTarget.Process);


            ModuleClient _moduleClient = ModuleClient.CreateFromConnectionString(moduleConnectionString, TransportType.Amqp);

            var sample = new TwinSample(_moduleClient);
            await sample.RunSampleAsync();
       }
    }

twin.cs

class TwinSample
    {

        private ModuleClient _moduleClient;


        public TwinSample(ModuleClient moduleClient)
        {
            this._moduleClient = _moduleClient;
        }


        public async Task<string> RunSampleAsync()
        {
            Console.WriteLine("Retrieving twin...");
            Twin twin = await _moduleClient.GetTwinAsync().ConfigureAwait(false);

            Console.WriteLine("\tInitial twin value received:");

            Console.WriteLine($"\t{twin.ToJson()}");
            return twin.ToJson();
        }
    }

Я попытался изменить версию среды выполнения с 1 на 2 и наоборот. Все еще не работает. Также в настройках приложения я установил

WEBSITE_NODE_DEFAULT_VERSION

до 8.11.1. От 6.5.0.

Может ли кто-нибудь помочь мне решить эту проблему?

1 Ответ

0 голосов
/ 06 сентября 2018

Функция HTTP должна фактически возвращать результат HTTP, попробуйте изменить функцию на

public static async Task<HttpResponseMessage> Run(
    [HttpTrigger(AuthorizationLevel.Function, "get", "post", Route = null)] HttpRequestMessage req, 
    ILogger log)
{
    // your code goes here
    return req.CreateResponse(HttpStatusCode.OK, "Done");
}
...