c# - 在 wcf 服务中引用 c++ 库

标签 c# c++ wcf configuration

我已经搜索了很长时间,但没有看到答案。

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

我希望这是一个简单的配置设置,我没有在网络配置文件中指定,有人有什么建议吗?谢谢。

最佳答案

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

关于c# - 在 wcf 服务中引用 c++ 库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26979025/

相关文章:

c# - 带有方法调用的 MVC4.0 辅助输出的 Razor

c# - 您如何在TextBox C#中创建多角色

java - 调用加法函数计算输入参数之和

c++ - 在进程内存中缓存大量数据

wcf - 更改 WCF 服务以要求 SSL

.net - WCF 请求拦截器 - 不再支持?

c# - 对 WCF 服务的多个并行调用比单个调用花费的时间更长

C++ - 何时为使用但未分配的对象调用析构函数?

c++ - 在 C/C++ 中添加到没有大小的数组

c# - 使用 UserNameOverTransport 绑定(bind)时,如何让 WCF 以摘要模式发送密码? (WSE3.0代码转WCF)