c# - 使用 HttpClient 在 Azure Function 中给出 'Script compilation failed'

标签 c# azure azure-functions

我在编写 Azure 函数时遇到了一个奇怪的问题。我使用 HttpClient 从 Web 服务获取数据,但是当我运行该函数时,我收到“脚本编译失败”的消息。 为了隔离问题,我编写了一个新的 Azure 函数,在其中仅检索 HTML 响应:

using System;
using System.Net.Http;
using System.Threading.Tasks;

public static void Run(TimerInfo myTimer, TraceWriter log)
{
    log.Info($"C# Timer trigger function executed at: {DateTime.Now}");
    CallHttpClient().Wait;
}

public static async Task CallHttpClient()
{
    using (var httpClient = new HttpClient())
    {
        var str = await httpClient.GetStringAsync("https://www.google.com");
        log.Info(str);
    }
}

我正在使用 Azure 门户。调用日志给我这个错误:

执行函数时出现异常:Functions.TestFunctionAsync

Microsoft.Azure.WebJobs.Host.FunctionInvocationException : Exception while executing function: Functions.TestFunctionAsync ---> Microsoft.CodeAnalysis.Scripting.CompilationErrorException : Script compilation failed. at async Microsoft.Azure.WebJobs.Script.Description.DotNetFunctionInvoker.CreateFunctionTarget(CancellationToken cancellationToken) at C:\azure-webjobs-sdk-script\src\WebJobs.Script\Description\DotNet\DotNetFunctionInvoker.cs : 343 at async Microsoft.Azure.WebJobs.Script.Description.FunctionLoader`1.GetFunctionTargetAsync[T](Int32 attemptCount) at C:\azure-webjobs-sdk-script\src\WebJobs.Script\Description\FunctionLoader.cs : 0 at async Microsoft.Azure.WebJobs.Script.Description.DotNetFunctionInvoker.GetFunctionTargetAsync() at C:\azure-webjobs-sdk-script\src\WebJobs.Script\Description\DotNet\DotNetFunctionInvoker.cs : 192 at async Microsoft.Azure.WebJobs.Script.Description.DotNetFunctionInvoker.InvokeCore(Object[] parameters,FunctionInvocationContext context) at C:\azure-webjobs-sdk-script\src\WebJobs.Script\Description\DotNet\DotNetFunctionInvoker.cs : 260 at async Microsoft.Azure.WebJobs.Script.Description.FunctionInvokerBase.Invoke(Object[] parameters) at C:\azure-webjobs-sdk-script\src\WebJobs.Script\Description\FunctionInvokerBase.cs : 171 at async Microsoft.Azure.WebJobs.Host.Executors.FunctionInvoker`1.InvokeAsync[TReflected](Object[] arguments) at async Microsoft.Azure.WebJobs.Host.Executors.FunctionExecutor.InvokeAsync(IFunctionInvoker invoker,ParameterHelper parameterHelper,CancellationTokenSource timeoutTokenSource,CancellationTokenSource functionCancellationTokenSource,Boolean throwOnTimeout,TimeSpan timerInterval,IFunctionInstance instance) at async Microsoft.Azure.WebJobs.Host.Executors.FunctionExecutor.ExecuteWithWatchersAsync(IFunctionInstance instance,ParameterHelper parameterHelper,TraceWriter traceWriter,ILogger logger,CancellationTokenSou…

最佳答案

您的示例中有两个编译错误:Wait 之后缺少 () 且未将 log 作为参数传递给 CallHttpClient.

您根本不应该使用 Wait(),而应使 Run 异步。

这是一个正确的版本:

public static async Task Run(TimerInfo myTimer, TraceWriter log)
{
    log.Info($"C# Timer trigger function executed at: {DateTime.Now}");
    await CallHttpClient(log);
}

public static async Task CallHttpClient(TraceWriter log)
{
    using (var httpClient = new HttpClient())
    {
        var str = await httpClient.GetStringAsync("https://www.google.com");
        log.Info(str);
    }
}

关于c# - 使用 HttpClient 在 Azure Function 中给出 'Script compilation failed',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45436486/

相关文章:

azure - Azure Functions 绑定(bind)如何工作?

dockerfile - 系统未授权访问异常 : Access to the path 'C:\runtime\Secrets\host.json' is denied in Azure Functions Windows container

c# - 如何在请求过滤器的 ViewResult 上设置 View 模型?

javascript - Microsoft QnA Maker - 欢迎消息循环

c# - 如何存储不同环境的凭据.NET Core 2.1

.net - 我可以在 Azure 上为常规网站设置 SSL吗? (不是 WCF 或 MVC)

java - Java Servlet 中的 UTF-8 在部署到 Azure 网站时不起作用

Azure,我正在尝试通过二头肌向我的函数应用程序添加函数,但不确定如何操作

c# - 对 Web 方法的 Ajax 调用在内容类型设置为 ` application/json; charset=utf-8` 时不起作用

c# - 测量每个 Entity Framework 查询的时间