C# 使用HttpClient提供';脚本编译失败';在Azure函数中
我在编写Azure函数时遇到了一个奇怪的问题。我使用HttpClient从Web服务获取数据,但当我运行该函数时,得到一个“脚本编译失败”。 为了解决这个问题,我编写了一个新的Azure函数,在其中我只检索HTML响应:C# 使用HttpClient提供';脚本编译失败';在Azure函数中,c#,azure,azure-functions,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.In
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.testfunctionsync
Microsoft.Azure.WebJobs.Host.FunctionInvocationException:异常
执行函数时:Functions.testfunctionsync-->
Microsoft.CodeAnalysis.Scripting.CompilationErrorException:脚本
编译失败。异步
Microsoft.Azure.WebJobs.Script.Description.DotNetFunctionInvoker.CreateFunctionTarget(CancellationToken
取消令牌)在
C:\azure webjobs sdk脚本\src\webjobs.script\Description\DotNet\DotNetFunctionInvoker.cs:343异步
Microsoft.Azure.WebJobs.Script.Description.FunctionLoader`1.GetFunctionTargetAsync[T](Int32)
尝试计数)在
C:\azure webjobs sdk脚本\src\webjobs.script\Description\FunctionLoader.cs
:异步时为0
Microsoft.Azure.WebJobs.Script.Description.DotNetFunctionInvoker.GetFunctionTargetAsync()
在
C:\azure webjobs sdk脚本\src\webjobs.script\Description\DotNet\DotNetFunctionInvoker.cs:192异步
Microsoft.Azure.WebJobs.Script.Description.DotNetFunctionInvoker.InvokeCore(对象[])
参数,FunctionInvocationContext)位于
C:\azure webjobs sdk脚本\src\webjobs.script\Description\DotNet\DotNetFunctionInvoker.cs:260异步
Microsoft.Azure.WebJobs.Script.Description.FunctionInvokerBase.Invoke(对象[])
参数)在
C:\azure webjobs sdk脚本\src\webjobs.script\Description\FunctionInvokerBase.cs
:171异步时
Microsoft.Azure.WebJobs.Host.Executors.FunctionInvoker`1.InvokeAsync[TReflected](对象[])
参数)异步
Microsoft.Azure.WebJobs.Host.Executors.FunctionExecutor.InvokeAsync(IFunctionInvoker
调用程序,ParameterHelper ParameterHelper,CancellationTokenSource
timeoutTokenSource,CancellationTokenSource
functionCancellationTokenSource,布尔throwOnTimeout,TimeSpan
异步时的timerInterval、IFunctionInstance和instance)
Microsoft.Azure.WebJobs.Host.Executors.FunctionExecutor.ExecuteWithWatchersAsync(IFunctionInstance
实例,ParameterHelper ParameterHelper,TraceWriter
traceWriter、ILogger记录器、CancellationTokenSou
示例中有两个编译错误:在
等待之后缺少()
,并且没有将日志作为参数传递给调用HttpClient
您根本不应该使用Wait()
,而是使Run
async
以下是一个正确的版本:
公共静态异步任务运行(TimerInfo myTimer、TraceWriter日志)
{
log.Info($“C#计时器触发器函数在:{DateTime.Now}执行”);
等待调用HttpClient(日志);
}
公共静态异步任务CallHttpClient(TraceWriter日志)
{
使用(var httpClient=new httpClient())
{
var str=await httpClient.GetStringAsync(“https://www.google.com");
日志信息(str);
}
}
尝试使用System.Net添加;
使用System.Net;
没有任何区别。尝试通过添加参数调用Wait
:Wait()
也许你可以从这个例子中挽救一些东西:如果Run
像@4c74356b41链接的例子那样支持异步,那么你肯定应该Wait
而不是Wait()
以避免异步阻塞。谢谢,没有传递log
是个问题。函数现在可以编译了。我知道这应该是显而易见的。。。