为了账号安全,请及时绑定邮箱和手机立即绑定

在 Azure Functions 上使用 AdWords API

在 Azure Functions 上使用 AdWords API

C#
慕妹3242003 2021-08-29 17:49:53
我正在尝试制作一个使用 AdWords API 的 Azure 函数。我的代码工作正常,我所要做的就是让函数以给定的时间间隔运行。但是,当我尝试在本地运行该函数时,我收到以下错误消息:[22-Jun-18 19:08:58] Executed 'KeywordPlanner' (Failed, Id=ab7c3ecf-1238-4370-ab5b-17d547d354b3)[22-Jun-18 19:08:58] System.Private.CoreLib: Exception while executing function: KeywordPlanner. System.Configuration.ConfigurationManager: Configuration system failed to initialize. System.Configuration.ConfigurationManager: Unrecognized configuration section system.serviceModel. (C:\Users\frede\AppData\Local\Azure.Functions.V2.Cli\func.dll.config line 204)如果我尝试上传函数并运行它,我会收到此错误:2018-06-22T18:50:35  Welcome, you are now connected to log-streaming service.2018-06-22T18:50:40.967 [Information] Executing 'KeywordPlanner' (Reason='This function was programmatically called via the host APIs.', Id=321756f7-3cf1-4235-a741-daf97d304058)2018-06-22T18:50:40.972 [Error] System.Private.CoreLib: Exception while executing function: KeywordPlanner. Google.AdWords: Could not load file or assembly 'System.Private.ServiceModel, Version=4.1.2.1, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a'. The system cannot find the file specified. System.Private.CoreLib: Could not load the specified file.2018-06-22T18:50:41.039 [Error] Executed 'KeywordPlanner' (Failed, Id=321756f7-3cf1-4235-a741-daf97d304058)我正在使用 .NET Standard 2.0。我该怎么做才能修复此错误并使我的函数运行?更新:在 Jerry Liu 的帮助下解决问题后,出现以下错误:2018-06-25T07:43:20.517 [Error] System.Private.CoreLib: Exception while executing function: KeywordPlanner. System.Net.Http.WinHttpHandler: WinHttpHandler is only supported on .NET Framework and .NET Core runtimes on Windows. It is not supported for Windows Store Applications (UWP) or Unix platforms.2018-06-25T07:43:20.679 [Error] Executed 'KeywordPlanner' (Failed, Id=4231f32f-f83f-4f37-99a7-b90484933e2f)
查看完整描述

2 回答

?
宝慕林4294392

TA贡献2021条经验 获得超8个赞

问题现在在这里跟踪。运行时文件夹[FunctionProject]\bin\Debug\netcoreapp2.1\bin\runtimes中的程序集不会加载到函数上下文中。


在@Adrian 的帮助下,事实证明问题WinHttpHandler is only supported on .NET Framework and .NET Core runtimes on Windows是由于%USERPROFILE%\.nuget\packages\system.net.http.winhttphandler\4.4.0\lib\netstandard2.0在我们需要运行时程序集时从 lib 复制的错误程序集所致。


解决方法是将这些运行时程序集复制到bin文件夹以使其由函数宿主加载。后Google.AdWords安装24.1.0,右键单击项目,Edit <FunctionProjectName>.csproj添加复制操作。有了 nuget 包的完整路径,我们不必先将程序集复制到我们的项目中。


请注意,一旦我们安装了新版本的软件包,这些路径可能会改变。


  <!-- For publish -->

  <ItemGroup>

    <None Include="$(USERPROFILE)\.nuget\packages\system.private.servicemodel\4.4.2\runtimes\win7\lib\netstandard2.0\System.Private.ServiceModel.dll">

      <CopyToOutputDirectory>Always</CopyToOutputDirectory>

    </None>

    <None Include="$(USERPROFILE)\.nuget\packages\system.net.http.winhttphandler\4.4.0\runtimes\win\lib\netstandard2.0\System.Net.Http.WinHttpHandler.dll">

      <CopyToOutputDirectory>Always</CopyToOutputDirectory>

    </None>

  </ItemGroup>

  <!-- For local debug -->

  <Target Name="CopyRuntime" BeforeTargets="Build">

    <Copy SourceFiles="$(USERPROFILE)\.nuget\packages\system.net.http.winhttphandler\4.4.0\runtimes\win\lib\netstandard2.0\System.Net.Http.WinHttpHandler.dll" DestinationFolder="$(OutputPath)\bin" />

    <Copy SourceFiles="$(USERPROFILE)\.nuget\packages\system.private.servicemodel\4.4.2\runtimes\win7\lib\netstandard2.0\System.Private.ServiceModel.dll" DestinationFolder="$(OutputPath)\bin" />

  </Target>


查看完整回答
反对 回复 2021-08-29
?
慕侠2389804

TA贡献1719条经验 获得超6个赞

Jerry 描述的相同解决方法将适用于该WinHttpHandler问题。我的 Azure Functions v2 项目文件中有以下内容:


<ItemGroup>

  <None Update="System.Private.ServiceModel.dll">

    <CopyToOutputDirectory>Always</CopyToOutputDirectory>

  </None>

  <None Update="System.Net.Http.WinHttpHandler.dll">

    <CopyToOutputDirectory>Always</CopyToOutputDirectory>

  </None>

</ItemGroup>

<Target Name="CopySPSM" BeforeTargets="Build">

  <Copy SourceFiles="System.Private.ServiceModel.dll" DestinationFolder="$(OutputPath)\bin" />

  <Copy SourceFiles="System.Net.Http.WinHttpHandler.dll" DestinationFolder="$(OutputPath)\bin" />

</Target>

FWIW,WinHttpHandler似乎只有在您尝试向 Google Ads API 发出服务请求时才需要添加 - 报告请求和响应没有它就可以正常工作。


查看完整回答
反对 回复 2021-08-29
  • 2 回答
  • 0 关注
  • 202 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信