发现此帖子ISAPI web application hanging if FastReport.PrepareReport is called
它有助于部分解决我的问题。同样我已Wisiyng
将False
属性设置为frxRichView.
base 64 string
因为我已经重新StrToStream/LoadFromStream
我还尝试从LoadFromFile
切换加载到Pdf
{1}}。多个访问时问题仍然存在,10个进程中有2个可以完成加载我的rtf
文件。所有其他请求都会挂起,直到超时。有谁知道我还能做什么?有没有其他方法可以将Fastreport
格式重新编入Selenium
报告谢谢。
我只能使用TfrxRichView
来测试来自客户端的多次请求时出现超时错误。
更新:我认为报告中只有一个rtf
组件会导致挂起,甚至不需要在其上添加memo
文本。将其替换为onFailure(Call<ResponseBody> call, Throwable t) {
System.out.println(t.getMessage()); //you will get "timeout" as a string in case of actual timeout
}
所有请求都将得到解答。
答案 0 :(得分:0)
确定, 我有类似的问题,找出原因并不容易,但也许你可以在我的考虑之间找到你的解决方案..
1)堆叠尺寸
在IIS中运行时,您的ISAPI只是一个进程调用的DLL,您不是主要进程,因此您必须注意堆栈维度。
通常,Delphi应用程序的默认堆栈大小为1Mb,在ISAPI DLL中,您只有256Kb的堆栈。
也许你正面临一个堆栈溢出异常..它可以解释为什么它总是不会发生但只是在某些情况下......
2)陷阱异常
通常,在编写报告期间会遇到一些错误(也就是处理数据,表达式,变量,公式等等所有工作)会导致陷阱异常。您可能无法从外部看到它,但代码执行被破坏了,报告准备工作尚未完成。
3)MessageBoxes和/或标准例外
在ISAPI中运行时,您不应该向用户界面输出任何内容,
也许消息对话框(或异常)可能会导致意外行为。
4)Global Var
您应该避免使用全局变量,因为在ISAPI中它们将跨线程通用
所以,如果您有源代码,请调试应用程序..首先,您应该了解问题所在。 如果您没有来源..请查看以上列表..我希望您能找到一些有用的信息。
答案 1 :(得分:0)
您有两种方法可以解决这个问题:
1-尝试在调试ISAPI DLL时重新创建此行为。如果幸运的话,您可以识别挂起应用程序的线程。有时这很难甚至不可能重新创建。
2-如果您有权访问挂起的ISAPI应用程序实例,请使用SysInternals Process Explorer之类的工具来创建minidump文件。您的应用程序必须使用完整的调试符号构建,并且您应该具有相应的映射文件。使用从挂起的应用程序和地图文件中获取的一个(或更多 - 甚至更好)转储文件,您可以使用另一个工具WinDbg来分析它并查找原因。 (有时)WinDbg可以准确显示哪个线程挂起整个应用程序以及导致它的代码行。
如果你从未这样做,我必须警告你,这种分析几乎是一场赌博......你必须使用几种不同的工具 或者没有文档,在各个地方阅读大量的技术信息。最后,有时候它会很有效地工作,有时却会失败。
答案 2 :(得分:0)
因为调试ISAPI并不明显,而且因为我希望能够在更多不同的托管解决方案之间轻松切换 - 和希望动态更新我的网站 没有重新启动Web服务器/服务 - 我创建了xxm。它具有HTTP上下文的单一接口,您的DLL由IIS ISAPI处理程序,HTTP.SYS处理程序或Apache httpd模块加载,或者在本地调试,您只需将xxmHttp.exe
设置为主机应用程序让IIS脱离困境。