C# 不可见的 WCF 主机"on demand"



我有一个 64 位桌面应用程序,需要合并(32 位)TWAIN 扫描仪支持,因此我通过编写 32 位自承载 WCF 服务来实现它。使用虚拟应用程序,我已经有了我的基本方法,但我遇到了一些困难。32 位扫描仪"应用程序"不会在我的调用应用程序之外使用,因此当用户单击应用程序中的"扫描"按钮时,我正在使用 Process.Start() 来启动自托管扫描仪应用程序。这部分工作正常。

我目前已将自托管扫描仪应用设置为控制台应用。我启动它,然后在 WCF 服务上调用定义为 Scan() 的方法。Scan() 方法显示一个模式对话框,允许用户执行扫描。这也很好用。

我有两个问题。

1) 还会显示空控制台窗口以及扫描对话框。我不想看到控制台窗口,所以我尝试调用 Process.Start 并指定 ProcessWindowStyle.Hidden。这隐藏了控制台窗口,但也产生了不允许显示扫描对话框的不良影响。我可能需要更改为基于 WinForms 的自托管扫描仪应用,但随后我必须弄清楚如何以模式方式处理它(换句话说,我希望将控件设置为扫描仪应用,直到用户单击"取消"或扫描扫描器应用中的图像)。关于解决这个问题的最佳方法有什么建议吗?

2) 扫描成功后,我想"关闭"扫描仪自托管应用程序。到目前为止,我成功做到这一点的唯一方法是从我的调用应用程序中调用Process.Kill()。我不喜欢这种方法。我尝试在 WCF 服务中实现 CloseHost() 方法,并在调用该方法时终止主机应用程序,但后来出现 WCF 错误,因为连接意外终止。我也可以使用有关好方法的建议。

提前谢谢你!

我意识到在 WCF 主机中实现扫描程序 UI 对我来说是愚蠢的。我将在我的客户端应用程序中拥有整个 UI,然后将逻辑片段放入(非可视)WCF 库中。

我朝另一个方向前进的唯一原因是因为我已经有一个来自我下载的示例项目的对话框,我认为从 WCF 服务中显示它很简单。

相关内容

最新更新