如何启动WCF服务的流程外实例?

时间:2009-12-15 06:56:22

标签: wcf process

我想从另一个(UI)应用程序启动一个新的wcf服务主机实例。我需要服务不在进程中,因为我想利用整个1.4GB内存限制来进行32位.NET进程。

显而易见的方法是使用System.Diagnostics.Process.Start(processStartInfo),但我想知道它是否是一种好方法。我打算将服务主机exe与UI应用程序捆绑在一起。当我启动该过程时,我将传递WCF服务的关键参数(如端口和地址等)。然后,UI应用程序(或其他应用程序)将连接到此新进程以与服务进行交互。一旦服务暂时没有活动,它将自行关闭,或者UI可以明确地调用以关闭服务。

2 个答案:

答案 0 :(得分:3)

你绝对可以这样做:

  • 创建一个托管您ServiceHost
  • 的控制台应用
  • 让控制台应用程序知道一堆命令行参数(或在控制台应用程序的app.config中配置它们)
  • 使用您的UI应用中的Process.Start()启动控制台应用

这应该相当容易,我会说。

答案 1 :(得分:0)

也许我完全偏离了这里,但我不认为.NET进程有1.4 GB的内存限制。为每个进程分配的内存由OS管理。对于32位操作系统,可用的存储空间为4 GB,但在所有进程之间共享。因此虽然可能看起来只有1.4 GB可用,但从技术上来说并非如此。

我提出这个问题的唯一原因是,解决此问题的另一种方法是将您的WCF服务加载到您的UI应用程序中的单独的AppDomain 中。可以将System.AppDomain类视为进程中的轻量级进程。完成后,也可以卸载AppDomains。由于WCF可以跨越AppDomain边界以及进程边界,因此它只是另一个考虑因素。

如果您不熟悉AppDomains,@marc_s建议的方法最直接。但是,如果您正在寻找了解有关AppDomains的借口,那么这将是一个很好的机会。

相关问题