我想从另一个(UI)应用程序启动一个新的wcf服务主机实例。我需要服务不在进程中,因为我想利用整个1.4GB内存限制来进行32位.NET进程。
显而易见的方法是使用System.Diagnostics.Process.Start(processStartInfo)
,但我想知道它是否是一种好方法。我打算将服务主机exe与UI应用程序捆绑在一起。当我启动该过程时,我将传递WCF服务的关键参数(如端口和地址等)。然后,UI应用程序(或其他应用程序)将连接到此新进程以与服务进行交互。一旦服务暂时没有活动,它将自行关闭,或者UI可以明确地调用以关闭服务。
答案 0 :(得分:3)
你绝对可以这样做:
ServiceHost
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的借口,那么这将是一个很好的机会。