Azure 函数 - 无法为运行时启动新的语言工作者:dotnet-isolated

Posted

技术标签:

【中文标题】Azure 函数 - 无法为运行时启动新的语言工作者:dotnet-isolated【英文标题】:Azure Function - Failed to start a new language worker for runtime: dotnet-isolated 【发布时间】:2021-09-06 05:43:42 【问题描述】:

我有一个 dotnet 5 函数应用程序,我已经从 devops 管道构建和部署了几周。

在最新版本之后,我在 App Insights 中看到以下错误:

异常类型 System.TimeoutException 异常消息 操作已超时。 日志级别错误 prop__OriginalFormat 无法为运行时启动新的语言工作者:dotnet-isolated。 类别 Microsoft.Azure.WebJobs.Script.Workers.Rpc.RpcFunctionInvocationDispatcher System.TimeoutException:操作已超时。 在 Microsoft.Azure.WebJobs.Script.Grpc.GrpcWorkerChannel.StartWorkerProcessAsync()

csproj 文件:

<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
    <OutputType>Exe</OutputType>
    <TargetFramework>net5.0</TargetFramework>
    <Nullable>enable</Nullable>
    <UserSecretsId>4f786da6-0d47-4ccc-b343-638a6e34e1cf</UserSecretsId>
  </PropertyGroup>

  <ItemGroup>
    <None Remove="local.settings.json" />
  </ItemGroup>

  <ItemGroup>
    <Content Include="local.settings.json">
      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
      <CopyToPublishDirectory>Never</CopyToPublishDirectory>
    </Content>
  </ItemGroup>

  <ItemGroup>
    <PackageReference Include="Microsoft.AspNetCore.Mvc.Abstractions" Version="2.2.0" />
    <PackageReference Include="Microsoft.AspNetCore.Mvc.Core" Version="2.2.5" />
    <PackageReference Include="Microsoft.Azure.Functions.Worker" Version="1.2.0" />
    <PackageReference Include="Microsoft.Azure.Functions.Worker.Extensions.Abstractions" Version="1.0.0" />
    <PackageReference Include="Microsoft.Azure.Functions.Worker.Extensions.Http" Version="3.0.13" />
    <PackageReference Include="Microsoft.Azure.Functions.Worker.Extensions.Storage" Version="4.0.4" />
    <PackageReference Include="Microsoft.Azure.Functions.Worker.Sdk" Version="1.0.3" />
    <PackageReference Include="Microsoft.Azure.Services.AppAuthentication" Version="1.6.1" />
    <PackageReference Include="Microsoft.Data.SqlClient" Version="3.0.0" />
    <PackageReference Include="Microsoft.Extensions.Configuration.UserSecrets" Version="5.0.0" />
    <PackageReference Include="NSwag.AspNetCore" Version="13.11.1" />
    <PackageReference Include="Serilog.AspNetCore" Version="4.1.0" />
    <PackageReference Include="Serilog.Sinks.ApplicationInsights" Version="3.1.0" />
    <PackageReference Include="Serilog.Sinks.MSSqlServer" Version="5.6.0" />
  </ItemGroup>

  <ItemGroup>
    <ProjectReference Include="..\infrastructure\SmsRouter.GovNotify\SmsRouter.GovNotify.csproj" />
    <ProjectReference Include="..\SmsRouter.Infrastructure\SmsRouter.EntityFramework.csproj" />
    <ProjectReference Include="..\SmsRouter.Utrn\SmsRouter.Utrn.csproj" />
  </ItemGroup>

  <ItemGroup>
    <None Update="host.json">
      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
    </None>
  </ItemGroup>

</Project>

host.json:


  "version": "2.0"

功能应用配置:

[
  
    "name": "APPINSIGHTS_INSTRUMENTATIONKEY",
    "value": "<my key is here>",
    "slotSetting": true
  ,
  
    "name": "AzureWebJobsStorage",
    "value": "DefaultEndpointsProtocol=https;AccountName=storesmsroutermsdn;AccountKey=<my key is here>;EndpointSuffix=core.windows.net",
    "slotSetting": false
  ,
  
    "name": "FUNCTIONS_EXTENSION_VERSION",
    "value": "~3",
    "slotSetting": false
  ,
  
    "name": "FUNCTIONS_WORKER_RUNTIME",
    "value": "dotnet-isolated",
    "slotSetting": false
  ,
  
    "name": "WEBSITE_CONTENTAZUREFILECONNECTIONSTRING",
    "value": "DefaultEndpointsProtocol=https;AccountName=storesmsroutermsdn;AccountKey=<my key is here>;EndpointSuffix=core.windows.net",
    "slotSetting": false
  ,
  
    "name": "WEBSITE_CONTENTSHARE",
    "value": "func-smsrouter-msdn-01b300",
    "slotSetting": false
  ,
  
    "name": "WEBSITE_ENABLE_SYNC_UPDATE_SITE",
    "value": "true",
    "slotSetting": false
  ,
  
    "name": "WEBSITE_RUN_FROM_PACKAGE",
    "value": "1",
    "slotSetting": false
  
]

函数定义

[Function("HttpExample")]
    public static HttpResponseData Run([HttpTrigger(AuthorizationLevel.Function, "get", "post")] HttpRequestData req,
        FunctionContext executionContext)
    
        var response = req.CreateResponse(HttpStatusCode.OK);
        response.Headers.Add("Content-Type", "text/plain; charset=utf-8");

        response.WriteString("Welcome to Azure Functions!");

        return response;
    

还有其他人遇到过这个问题吗?

注意:我现在已经通过 Azure 门户为此创建了一个支持票证 - ID 是 2106280050000196。Github 问题here

编辑: 根据@Kaylan 的建议,我使用 Azure CLI 创建了一个带有 --runtime dotnet-isolated 参数的新函数应用程序。然后我将我的函数部署到其中(使用带有 Deploy Azure Function 任务的 devops 管道),但恐怕我会继续看到同样的错误。

我也尝试部署到固定应用服务计划(而不是消费),但仍然遇到同样的问题。

【问题讨论】:

能否请您发布您的 host.json 文件和 .csproj 以便我们查看配置和依赖项? @KalyanChanumolu-MSFT 请查看请求文件内容的更新问题 能否请您将 ExtensionBundle 配置添加到 host.json 并尝试? "version": "2.0", "extensionBundle": "id": "Microsoft.Azure.Functions.ExtensionBundle", "version": "[2.*, 3.0.0)" 另外,请将 Microsoft.Azure.Functions.Worker 升级到 1.3.0 我在本地遇到了同样的问题。我已经尝试了@KalyanChanumolu-MSFT 的上述建议,但没有任何运气。我还尝试将 azure-functions-core-tools 更新到 3.0.3568 甚至是预览版 4.0.3594,但没有任何运气。可能与运行时持有端口有关,因为包含 --port 参数似乎允许进程有时启动。 【参考方案1】:

请对您的 host.json 文件进行以下更改以包含 extensionBundle


  "version": "2.0",
    "extensionBundle": 
      "id": "Microsoft.Azure.Functions.ExtensionBundle",
      "version": "[2.*, 3.0.0)"
    
  

升级到 Microsoft.Azure.Functions.Worker 1.3.0 或更高版本

Install-Package Microsoft.Azure.Functions.Worker -Version 1.3.0

确保在创建函数应用程序时指定了适当的运行时。

az functionapp create --consumption-plan-location westus --name <FunctionAppName> --resource-group <ResourceGroupName> --runtime dotnet-isolated --runtime-version 5.0 --functions-version 3 --storage-account <StorageAccountName>

【讨论】:

请查看评论以了解问题。我还注意到,在进行这些更改后,我无法再在本地模拟器中运行该应用程序,因为它给出了以下错误:“找不到工作功能。尝试将你的工作类和方法公开。如果你正在使用绑定扩展(例如 Azure 存储、ServiceBus、计时器等)确保您在启动代码中调用了扩展的注册方法” 但是,如果我从 host.json 中删除更改(只留下“版本”:“2.0”),那么应用程序将在本地模拟器中运行。我只是在部署到 Azure 时尝试相同... 你能发布你的函数定义吗?是否只有您遇到问题的 HTTP 触发端点?这是一个示例 [Function("GetHeartBeatEndPoint")] public HttpResponseData GetHeartBeatEndPoint([HttpTrigger(AuthorizationLevel.Anonymous, "get")] HttpRequestData req, FunctionContext executionContext) 对不起,我得走了,但我会在一天结束之前发布函数定义 嗨 Kalyan,请在主要问题上找到我的函数定义【参考方案2】:

我刚刚运行了 NuGet 包更新:

Microsoft.Azure.Functions.Worker v1.3.0 → v1.4.0 Microsoft.Azure.Functions.Worker.sdk v1.0.3 → v1.0.4

这似乎解决了问题。

【讨论】:

虽然在我们的“开发”天蓝色订阅中更新 nuget 包似乎可以解决问题 - 这是一个错误的黎明:( 相同的代码已部署到我们的“测试”订阅中。这给出了同样的 grpc 超时错误 - 尽管“开发”订阅中的功能继续工作 您是否在测试订阅上正确创建了函数应用: az functionapp create --consumption-plan-location westus --name --resource-group --runtime dotnet-隔离 --runtime-version 5.0 --functions-version 3 --storage-account ? @mslot 函数应用是使用与“开发”环境相同的 ARM 模板创建的 - 它们具有不同的参数文件。函数应用程序代码使用 DevOps 发布管道任务“部署 Azure 函数应用程序”版本“1.*”部署到应用程序中。用于此的唯一参数是 Azure 订阅、“Windows 上的函数应用程序”的应用程序类型、应用程序名称和包含应用程序代码的 zip - 由 DevOps 构建管道发布【参考方案3】:

我遇到了这个问题,因为我已经从一个“普通”的 dotnet 服务转移,需要将 FUNCTIONS_WORKER_RUNTIMEdotnet 调整为 dotnet-isolated

local.settings.json


  "IsEncrypted": false,
  "Values": 

    "FUNCTIONS_WORKER_RUNTIME": "dotnet-isolated",
    ....

  

【讨论】:

以上是关于Azure 函数 - 无法为运行时启动新的语言工作者:dotnet-isolated的主要内容,如果未能解决你的问题,请参考以下文章

Azure Function v3 - 在启动中添加标识时“无法访问 Azure Functions 运行时”

Azure 数据工厂集成运行时将无法启动

函数“FunctionName”的侦听器无法在 .net core azure 中启动

无法登录到新的 Azure B2C 目录

从 Azure 函数获取 401 时,Azure 逻辑应用停止执行

Azure 函数绑定类型面临的问题