【问题标题】:FastReport aspcore 404 error in production /_fr path unavailableFastReport aspcore 404 error in production /_fr 路径不可用
【发布时间】:2021-01-27 18:11:20
【问题描述】:

我们在尝试使用 FastReport 将我们的 asp.net 核心应用程序部署到生产环境时遇到错误。似乎在生成报告预览时,它会创建一堆资源和文件系统链接到路径/_fr

当我们在生产环境中将应用程序部署在 IIS 上时,应用程序存在于它自己的文件夹结构中:http://www.ourdomain.com/OurApp (C:\inetpub\OurApp)

应用程序的应用程序池无权访问 inetpub 下的根文件夹。在生成预览报告时,FastReport 会尝试将所有这些资源写入 C:\inetpub\_fr... 用于访问这些资源的 URL 是

http://www.ourdomain.com/_fr/resources.getResource?resourceName=magnifier.svg&contentType=image%2Fsvg%2Bxml http://www.ourdomain.com/_fr/resources.getResource?resourceName=spinner.svg&contentType=image%2Fsvg%2Bxml http://www.ourdomain.com/_fr/resources.getResource?resourceName=reload.svg&contentType=image%2Fsvg%2Bxml http://www.ourdomain.com/_fr/preview.getReport?reportId=b43add31c4b64cc0a111ded240c9b565&renderBody=yes

我们已尝试更改 ROOT_BASE_PATH,但似乎没有帮助。

如果我们直接导出为 PDF 是没有问题的。这只是预览功能的问题。

@if (ViewBag.WebReport != null)
    {
        @await ViewBag.WebReport.Render();
    }

对此问题的任何见解都会有所帮助。我们找不到解释预览实际应该如何工作的文档

【问题讨论】:

    标签: asp.net-core iis fastreport


    【解决方案1】:

    我认为这是权限引起的错误,首先,App不应该在wwwroot下吗?您可以尝试将“OurApp”移动到 wwwroot 文件夹,然后重试。然后检查 IIS_IUSRS 是否具有 wwwroot 文件夹的权限。默认情况下,IIS 用户没有 wwwroot 文件夹的写权限。

    1.打开文件资源管理器并转到 C:/inetpub/

    2.右键点击wwwroot,点击“属性”

    3.进入安全选项卡并点击“编辑...”以编辑权限

    4.查找并选择 IIS 用户。在我的例子中,它被称为 IIS_IUSRS ([server name]\IIS_IUSRS)。

    5.选中所有权限的“允许”复选框。

    【讨论】:

    • 因为这是一个生产环境,所以我无法控制应用程序的最终部署位置。与任何 net.core asp 应用程序一样,应用程序配置中有一个 wwwroot 文件夹。它映射到生产 IIS 服务器中的 /OurApp。问题是 FastReport 使用的是应用服务器根目录 (/) 的绝对路径,而不是 Web 应用的根目录。
    • 您是否尝试将所有权限添加到 IIS_IUSRS 的 inetpub?
    • samwu - 这又是一个生产环境。我们无法更改文件系统的安全性。
    • 你说应用的应用池无权访问inetpub下的根文件夹,因为你没有这个权限,所以问题解决不了。
    • 我们目前正在审查开源,以期更新预览过程以使用可以在应用启动时的 FastReport 初始化期间独立设置的指定目录和根 url。通过确定启动时的“站点根”及其对应的物理路径,我们相信我们可以解决问题。
    【解决方案2】:

    我知道那是 4 个月前的事了,但我只是弄清楚自己,所以我把它贴在这里。

    1.将 FastReport.OpenSource.Web 添加为 nuget 依赖项

    • 双击您的项目,然后添加这一行。
    <PackageReference Include="FastReport.OpenSource.Web" Version="*" />
    

    2。注册创业班

    • 转到 Startup.cs
    • 找到Configure的public,添加app.UseFastReport();
    public void Configure(IApplicationBuilder app, IHostingEnvironment env)
    {
        ...
        app.UseFastReport();
        ...
    }
    
    1. 重建您的项目并检查它是否工作

    P/S:它实际上在 their github website 上,但不是每个人都知道,所以我把它留在这里

    【讨论】:

    • 问题不在于如何注册 FastReport。这与重新定位预览中生成的临时文件有关,以便我们可以将整个应用程序移动到多租户主机,这会将我们的应用程序放在网站根目录之外的树中。
    猜你喜欢
    • 2018-05-01
    • 2019-01-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-01
    • 2019-04-16
    相关资源
    最近更新 更多