【问题标题】:How to Background time/IO-consuming operations across a firewall in ASP.NET C#如何在 ASP.NET C# 中跨防火墙进行后台时间/IO 消耗操作
【发布时间】:2010-10-31 20:37:07
【问题描述】:

总结
我们有一个 ASP.NET 应用程序,它允许用户通过中间层(非常标准的东西)查询 SQL Server 数据库。当用户尝试为返回给他们的行生成 PDF 时。每组具有共同标识符的行都将在生成的 PDF 中“变成”一个单独的页面。

最初,我假设行数将是一个数量级,有利于将最终 PDF 通过管道传输到 ASP 响应流中并让用户将文件下载到他们的机器上,但新的要求表明行数行数非常大,远远超出了我设计的规模。

我目前的解决方案如下:

    1234563完成,以便他们下载。
  1. 如果用户可以接受,我会创建两个DataTables:一个包含实际数据,另一个包含 MetaData,例如保存结果 PDF 的位置、名称和其他元类型信息。

  2. 然后我可以使用DataTable.WriteXML 在特定文件夹中生成“作业”文件。

  3. 这一切都在一个单独的线程中完成,因此用户可以继续做他们想做的事情。

问题
我真的想将作业 xml 文件存储在我们防火墙(共享网络文件夹)内的机器上,但出于安全原因,我似乎不能。有人告诉我,我可能想使用模拟并尝试过但无法让它发挥作用。

此应用程序的另一部分是“侦听”“输入”文件夹,并每小时(或类似的时间表)处理这些“作业”文件,将生成的 PDF 文件移动到必要的位置并发送电子邮件用户。

我已经让读取作业文件并生成 PDF 的部分正常工作,并且创建作业文件的部分正常工作(当我在防火墙内运行它时),但是当我在防火墙外运行它时,甚至尝试模拟,这没用。 (一直说“找不到网络位置”。

问题:
我这样做的方法是否正确?
如何跨防火墙写入这些文件?
有什么设计想法或建议吗?

提前致谢。

【问题讨论】:

  • SQL Server/Web 服务器在防火墙的哪一侧? (我假设它在外面?)
  • SQL Server 在防火墙内。

标签: c# asp.net pdf-generation impersonation firewall


【解决方案1】:

你至少可以跨防火墙做 http 吗?然后不要创建 XML 文件,而是调用防火墙内的 web 服务。理想情况下,此 Web 服务也不会创建 XML 文件,而是将数据放入消息队列中。 MSMQ 在这里可能很有用。 然后 PDF 生成器将从该队列中读取 XML。 这样您就不会遇到生成器拾取尚未完成的文件的情况。而且您不会浪费时间和资源轮询文件。

希望这会有所帮助。

【讨论】:

  • 这是个好主意,我会尝试并告诉你。
  • 很高兴听到这个消息。如果您想让它真正花哨,请查看 WCF。 WCF 在写入和读取 msmq 队列方面做得很好。
  • 尽管我想让它变得花哨,但时间限制和管理注意力都是限制。由于各种原因,我被禁止使用 MSMQ,其中一个原因是我们有另一个工具大量使用它,任何使用 MSMQ 都会被视为潜在影响。我用另一种方式解决了这个问题,我将在下面详细说明。
  • 事情就是这样。还有其他方法可以通知您的 pdfgenerator 它有新工作。我曾经使用过 UDF 广播。那样你没有任何事件持久性,但你可以保留轮询循环,以防你错过信号,也许是在生成器没有运行时。
  • 什么是UDF广播?我尝试用谷歌搜索它,但在这种情况下无法辨别任何东西。你能给我一些关于这种方法的更多见解或者一些提示吗……谢谢你的 cmets :)
【解决方案2】:

我解决这个问题的方法是在我们的数据库中创建一个名为 PDFJobs 的表。

此表包含用于运行报告的标准以及所需的模板文件夹文件目标文件夹filename 用于生成的 PDF。

然后,我编写了一个命令行工具 (PDFGenerator),它从该表中读取数据,并为每一行创建一个单独的线程来执行 PDF 生成。生成 PDF 后,它会向电子邮件地址(也包含在表格中)发送一封电子邮件。

然后我有一个 Windows 计划任务,它每小时运行一次该 PDFGenerator 工具。
这不是想法,但它可以完成工作。

最近的更新是,他们想要在创建作业行时触发 PDFGenerator 的东西......我想我将不得不做更多的思考。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-06-17
    • 2017-11-09
    • 2014-02-23
    • 1970-01-01
    • 1970-01-01
    • 2017-11-02
    • 1970-01-01
    • 2017-05-07
    相关资源
    最近更新 更多