在IIS6.0中并行运行托管的.Net COM +服务

时间:2011-01-05 20:20:12

标签: .net iis-6 manifest com+ side-by-side

我们有一个托管的.Net COM +组件,它继承自ServicedComponent,并试图将其用作Windows Server 2003上IIS 6.0中的Web应用程序的并排程序集。

我们使用mt.exe生成了一个程序集清单,并且已在测试控制台应用程序中以并行模式成功运行它。但是,当涉及到IIS时,它似乎不起作用,而不是读取清单从注册表中试图在那里找到COM +应用程序。

使用生成清单 然后将mt.exe -managedassemblyname:myassembly.dll -out:myassembly.manifest复制到Web应用程序的虚拟目录中。使用filemon显示清单永远不会被读取!

.manifest文件移动到bin目录,然后似乎可以读取,但是会出现同样的问题。

非常感谢任何成功完成此项工作的人的帮助。

1 个答案:

答案 0 :(得分:0)

以“.manifest”结尾的外部清单仅会自动获取可执行文件。 因此,您必须告诉IIS或Windows有关您的清单,或者没有人愿意阅读它。

大概在您的控制台应用程序测试中,可执行文件的清单可以引用MyAssembly或直接包含相关信息。

现在,我对这里的ServicedComponent并不十分熟悉,所以我将以一般性的方式进行讨论。

  1. 如果您控制调用MyAssembly的所有软件,您可以先故意加载清单中的信息,将该信息激活到线程上,调用MyAssembly,然后停用。这是满足这种插件体系结构的最佳方法,因为您没有污染父进程,您只需在代码运行期间配置代码运行的线程。 这种方法是通过调用激活上下文API完成的,您可以在与All-in One Code Framework
  2. 捆绑在一起的免注册COM示例中找到一些很好的示例。
  3. 如果您无法控制调用MyAssembly的所有代码(如果它是由IIS自动调用),或者如果它在太多地方被调用,并且上面提到的方法成本太高,您可以总是在这里试试“hackaround”。 获取IIS6.0工作进程可执行文件,并编辑其清单(如果有),或者如果没有,则添加新清单(不要忘记检查它是否具有嵌入式清单),以依赖MyAssembly 。在这种方法中,MyAssembly的清单内容基本上成为IIS6中运行的任何代码的运行上下文的一部分,因此它是一种非常重要的方法。