我对IPC与COM互操作对象的问题。 我想创建并在一个进程(例如Windows服务用C#编写)的数据COM互操作对象填写。 然后,我想它在另一个进程(在C#控制台应用程序)。 我知道,COM对象不序列化和他们非托管代码。 我试图通过实现.NET远程处理解决方案(Windows服务是服务器,控制台应用程序是客户端),但在客户我不能让COM互操作对象(我从MarshalByRef共用资料库中继承.NET类,创建公共财产与COM互操作宾语)。 谁能告诉我,我该怎么办?
Answer 1:
COM对象不是序列本身,而是写一个COM对象时,你应该使用复杂的代理/存根定义 - althouh一般,卧底,你真的没有去想它,尤其是如果这些对象被写入使用一些框架(ATL,德尔福,VB6,.NET等)。
这些代理/存根在编译时或运行时使用强大的RPC机制(这是或多或少的“DCOM”)如果客户端 - 服务器通信工程外的进程或线程之间(其实COM“公寓”)。
所有这一切说,如果你的COM对象是进程的服务器并正确构建,COM提供免费服务,主办他们为“ COM +应用 ”。
通过创建COM组件COM +应用程序的逻辑组,你可以利用COM +的以下优点:按需加载到进程(的DLLHost.exe)和管理的组件动态链接库(DLL)(没有与.NET这里做)服务器进程来承载组件。
如果你把你的对象在COM +应用程序,那么你应该能够使用它从.NET代码,就像它在处理,但现在在一个特殊的“代孕”系统提供主机进程托管(这恰好是著名DLLHOST.EXE)。 你甚至可以将其配置成为如下所示的应用程序配置的“激活”选项卡中完整的Windows服务:
Answer 2:
如果双方都.NET应用程序,则不应使用COM。 这就像买一个昂贵的现代汽车,然后由马拉吧!
首先,您可以使用远程处理。 这是很容易实现,虽然不支持了,我建议不要使用它。 总之,远程不需要COM互操作性展示。 下面是一个简单的“Hello World”使用远程: http://msdn.microsoft.com/en-us/library/ms973864.aspx
您还可以使用WCF(Windows通信基础)。 这是一个更先进,更适合现代的应用程序。 这是一个Hello World与WFC: http://www.codeproject.com/Articles/97204/Implementing-a-Basic-Hello-World-WCF-Service
而这一次: http://blogs.msdn.com/b/jmeier/archive/2007/10/15/how-to-create-a-hello-world-wcf-service-using-visual-studio.aspx
这两种技术都支持IPC,TCP和HTTP