2013-05-12 66 views
2

我有一个Visual Studio解决方案,用于具有某些类库的Windows窗体应用程序,这些类库是我的应用程序模块。我的应用程序在“任何CPU”下运行,不能更改为“x86”,因为它使用大量的64位dll引用。用于32位dll访问的自托管WCF服务

我有一个本地C++ 32位DLL,我需要的应用程序的一个模块内使用,但它是相当不可能的,不想使用的外包装,所以我已阅读,最简单的就是使用可自托管的WCF服务。

我在想的方法是在我的解决方案中创建一个控制台应用程序(32位)项目,它将引用Native C++ 32位dll,并将托管WCF服务,然后当用户打开应用程序模块,我会打电话Process.Start(自我托管的wcf控制台app.exe)所以我的WCF服务启动,然后从我的Windows窗体应用程序,我可以访问的方法等..然后,我将能够使用本机32位dll方法。

我认为这被称为Out-of Process应用程序。

有没有人认为有更好的方法来做到这一点?我真的不想要.EXE应用程序(主应用程序exe和自己托管的wcf.exe),我可以让自己托管的wcf 32位项目在我的主app.exe 64位项目中生存吗?如果有可能,我怎么称呼它?

在此先感谢

+0

通过将此呼叫置于进程外,与致电相比,您将收到巨大的性能损失它正在进行中。这是分布式对象设计第一定律的基础:http://martinfowler.com/bliki/FirstLaw.html – 2013-05-13 13:42:59

回答

2

我做到了,在我的项目,我们命名为项目_x64或_x86,你可以在同一个解决方案这两个项目只是更改构建设置。我们将其命名为进程隔离。
做出以下肯定:

  • 当父进程死亡
  • 当子进程死掉
  • 会发生什么,会发生什么呢,当父进程知道子进程是活的 - 开始使用WCF ..
  • 你需要x86的调用是异步的吗?然后用适当的异步模式

你可以从我的问题得到这些问题的答案:

验证子进程WCF服务启动:C# .net 3.5 inter process communication verify the child process has started ok

关闭主控的进程:best way to close hosted process

项目的参考咨询工作-Eround:Project reference work-around .net 4.5 and .net 3.5

+0

但我不能在x86项目中引用x86项目? – VAAA 2013-05-13 17:45:04

+0

是什么问题?我不明白.. – ilansch 2013-05-13 19:19:18

+0

是否可以在x64项目中引用x86项目? – VAAA 2013-05-13 19:46:06