我创建了一个WebAPI Web服务,接受来自旧版Visual FoxPro系统的请求。该服务需要解析请求,然后启动VFP运行时以执行一些传统的FoxPro代码以实际处理"处理"请求。
我有一些像这样的代码:
try{
foxApp = new VisualFoxpro.FoxApplication();
foxApp.DoCmd(@"do hqinit with .T.");
...
foxApp.DoCmd("close all");
foxApp.DoCmd("release all");
foxApp.Quit();
}
catch{
...
}
foxApp.Quit()
不断抛出错误,FoxPro应用程序仍在运行(我可以在任务管理器中看到它)。
根据this SO post,我尝试了以下内容:
try{
foxApp = new VisualFoxpro.FoxApplication();
...
while(System.Runtime.InteropServices.Marshal.ReleaseComObject(foxApp) > 0) {}
但是,虽然我在尝试foxApp.Quit()
时不再收到错误,但每次调用Web服务后VFP应用程序仍然处于运行状态。
如何确保在每个Web请求结束时关闭VFP?
更新
我刚刚再次测试并意识到第一个代码块不会抛出错误。相反,它只是挂起服务器。但是,如果我在foxApp.DoCmd("clear all")
之前添加foxApp.Quit()
,则会收到错误消息:
Cannot clear the object OPANEBROWSER because it is in use.
我的所有代码都没有引用OPANEBROWSER对象,我不知道它来自何处。
答案 0 :(得分:1)
知道了!
我在服务器上安装了VFP9.0 SP2,技术上,我正在启动应用程序。在我的开发环境中,我总是禁用MS默认弹出的任务管理器窗格。但是,我没有在服务器VFP环境中这样做。
一旦我在VFP环境中禁用了任务管理器,以至于它没有显示在VFP的开头,一切都很好。