我在 C# 中使用 Plotly.NET,当它在我的服务器上运行时返回错误,但不在我的本地服务器上运行。堆栈跟踪似乎表明它正在尝试访问互联网 - 特别是使用 PuppeteerSharp - 当我调用 GenericChart.ToBase64JPGString 时。
请注意,我的本地可以访问互联网,但服务器不能访问。
我是否需要在我的服务器上配置一些东西才能不需要访问互联网?是否需要在服务器上部署一些东西,以便它不需要访问互联网(看起来它正在尝试下载无头浏览器)。
作为参考,这是我的堆栈跟踪:
System.Net.WebException: The remote server returned an error: (403) Forbidden.
at System.Net.HttpWebRequest.EndGetResponse(IAsyncResult asyncResult)
at System.Net.WebClient.GetWebResponse(WebRequest request, IAsyncResult result)
at System.Net.WebClient.GetWebResponseTaskAsync(WebRequest request)
at System.Net.WebClient.DownloadBitsAsync(WebRequest request, Stream writeStream, AsyncOperation asyncOp, Action`3 completionDelegate)
at PuppeteerSharp.BrowserFetcher.DownloadAsync(String revision) in /home/runner/work/puppeteer-sharp/puppeteer-sharp/lib/PuppeteerSharp/BrowserFetcher.cs:line 264
at PuppeteerSharp.BrowserFetcher.DownloadAsync() in /home/runner/work/puppeteer-sharp/puppeteer-sharp/lib/PuppeteerSharp/BrowserFetcher.cs:line 235
at <StartupCode$Plotly-NET-ImageExport>[email protected]()
at <StartupCode$Plotly-NET-ImageExport>.$PuppeteerSharpRenderer.Plotly-NET-ImageExport-IGenericChartRenderer-RenderJPGAsync@117.MoveNext()
--- End of inner exception stack trace ---
at System.Threading.Tasks.Task.ThrowIfExceptional(Boolean includeTaskCanceledExceptions)
at System.Threading.Tasks.Task`1.GetResultCore(Boolean waitCompletionNotification)
at System.Threading.Tasks.Task`1.get_Result()
at [email protected](Task`1 t)
at Plotly.NET.ImageExport.AsyncHelper.runSync[a,b](FSharpFunc`2 job, a input)
at Plotly.NET.ImageExport.AsyncHelper.taskSync[a](Task`1 task)
at Plotly.NET.ImageExport.ChartExtensions.ToBase64JPGString@56.Invoke(GenericChart gChart)
at PlotGeneratorService.PlotGenerator.Generate(ReportPlot reportPlot) in E:\BuildAgent\_work\569\s\PlotGeneratorService\PlotGenerator.cs:line 62
所有 ImageExport 扩展都使用 PuppeteerSharp,因此需要 chromium 可执行文件。默认情况下,该库会尝试下载该可执行文件,但您也可以使用本地可执行文件来阻止这种情况。
另请参阅 https://github.com/plotly/Plotly.NET/issues/295
和
https://github.com/plotly/Plotly.NET/issues/436
要点是您可以通过设置此全局变量来设置可执行路径:
Plotly.NET.ImageExport.PuppeteerSharpRendererOptions.localBrowserExecutablePath