在wcf服务中引用c ++库

时间:2014-11-17 18:06:46

标签: c# c++ wcf configuration

我一直在搜索这个问题但是没有看到答案。

我在wcf服务库中引用了两个dll,它们是.NET的C ++库API,它在从wcftestclient调用包装方法时工作正常。但是当自己在websercice中托管库时,它说“无法找到程序集xxx.dll(它是c ++ API dll之一)或其依赖性之一”。但是我可以看到它说丢失的dll会自动复制到主机webserive项目的bin / debug文件夹中。此外,我可以在一个简单的控制台项目中托管库,在该项目中调用包装器方法完全没有问题。

我希望这是一个简单的配置设置,我缺少在Web配置文件中指定,任何人都有任何建议?感谢。

1 个答案:

答案 0 :(得分:0)

我花了将近三天的时间来解决这个问题,现在已经解决了。如果这可以帮助其他可能具有相同情况的人,这就是原因。 两个c ++库.net api dll是后期绑定的,因此在运行时它不会查找它的依赖项。我甚至尝试在GAC中注册整个外部库包,但它没有帮助;这是因为两个.net api dll中的一个是弱组件,因此CLR甚至不会在GAC中寻找它。我所做的是为服务创建静态构造函数,并在静态构造函数中将后期绑定程序集加载到AppDomain中。我正在使用Assembly.LoadFrom(string filePath)方法(在Assembly类上可以使用其他方法来执行此操作)。现在我可以在IIS上托管服务并在任何客户端中使用它。因此,如果clr抱怨它无法找到程序集,但你可以在bin / debug文件夹中看到它,它可能是一个后期绑定程序集,需要预先加载到AppDomain中;关于AppDomain的好处是你只需要加载一次程序集,它永远不会卸载单个程序集。