为具有多用户功能的Web服务启动COM-Object的多个进程

时间:2015-04-12 19:50:14

标签: c# .net wcf dll com

我或多或少都是.NET开发以及WCF和COM(+)等技术的新手。我想我对这些话题一点点了解情况,即使我只是略过其中的一些。

问题: 我想开发一个支持多客户端的Web服务,它应该能够对现有的COM-Object进行基于会话的使用。 (COM对象已经存在且无法更改)

COM-Object(Dll)本身加载两个(非托管)Dll。现在这里有一个棘手的部分:

如果我在示例C#客户端(控制台应用程序)中创建一个COM-Object实例,那么一切正常,因为实例正在运行。 (那些非托管Dll只是在每个进程加载一次)。因此,如果我要在同一个进程中创建另一个COM-Object实例,那么应用程序就会崩溃。这是一种期待的行为,因为这些Dll不是线程保存。

第一个结论是我必须创建每个(隔离)进程的一个COM实例!

但是如何在基于用户会话的Webapp中创建COM-Object的多个实例呢?

我已经尝试过了: 1.我为每个COM实例创建了一个新的Appdomain。

- > 不工作,因为非托管代码不了解Appdomains。

我从COM-Object创建了一个COM +库,我使用该实用程序(ComSvcConfig)创建了一个WCF服务,并最终在IIS(WAS)中托管它。

- > 不能工作,因为它在同一个流程(工作流程)中运行。

我创建了COM-Object的第一个WCF服务,并为每个COM-Function创建了适当的服务操作。 我创建了第二个WCF服务,它只生成第一个Selfhosting WCF-Service的新实例。第二个WCF服务启动并返回第一个服务的唯一URL,以便每个客户端在一个单独的进程中拥有自己的和Selfhosted服务。

- > 工作!但它似乎非常复杂,它可能不是一个很好的编程风格IMO。

结论:

我可能还没有考虑过几个方面来制定合适的解决方案(由于缺乏知识)。那么可能有其他(更好的)方法来解决问题吗?

您是否有一些建议和提示可以更方便地解决问题?

提前致谢!

0 个答案:

没有答案