我如何让IIS加载我的WCF服务引用的本机DLL
How do I get IIS to load a native DLL referenced by my WCF service?
我有一个WCF服务,它包含一些c#代码,它引用了一个c++/CLI dll,它引用了一些本地dll。我在我的IIS应用程序的bin文件夹中包含了所有必要的dll,但是当IIS加载托管dll时,它似乎将它们复制到一个深目录,如:
C:WindowsMicrosoft.NETFramework64v4.0.30319Temporary ASP.NET Filestestwcf73473be6e625098cassemblydl3aada7c3385a7332b_2f9acc01
它将每个托管DLL复制到自己的目录并加载它。当它到达我的c++/CLI DLL时,它将其复制到上面的目录,然后它无法加载依赖项。如果我手动将所有本机dll复制到这个文件夹中,它将运行,但这不是一个很好的解决方案。
我的网页。config是由VS创建的,端点是基于MSDN文章定义的。
<configuration>
<system.web>
<compilation debug="true" targetFramework="4.0" />
</system.web>
<system.serviceModel>
<behaviors>
<serviceBehaviors>
<behavior>
<serviceMetadata httpGetEnabled="true"/>
<serviceDebug includeExceptionDetailInFaults="false"/>
</behavior>
</serviceBehaviors>
</behaviors>
<serviceHostingEnvironment multipleSiteBindingsEnabled="true" />
<services>
<service name="WcfService.Service1">
<endpoint address=""
binding="wsHttpBinding"
contract="WcfService.IService1" />
<endpoint address="mex"
binding="mexHttpBinding"
contract="IMetadataExchange" />
</service>
</services>
</system.serviceModel>
<system.webServer>
<modules runAllManagedModulesForAllRequests="true"/>
</system.webServer>
</configuration>
如何让这些dll被自动拾取?
从这篇文章来看,似乎本机dll需要在某些目录或路径上可用:
这个问题的核心原因是操作系统的方式在运行时加载本机DLL。加载本机DLL下面的逻辑也不包括临时ASP.net文件applications/bin文件夹。这个问题也会发生在任何。net如果本机DLL未包含在/bin文件夹中,则应用程序. exe文件,或者如果DLL不在路径环境变量中。
- 加载应用程序的目录。在…的情况下ASP。Net,这将解析为%windir%Microsoft。网# # # Framework v或%windir%system32inetsrv for iis6 .
- 当前目录。在ASP的情况下。Net,这将解析为%windir%System32inetsrviis6。如果使用内置web服务器,则解析为路径在C:Program FilesMicrosoft下Visual Studio 8.
- Windows系统目录中。使用GetSystemDirectory函数获取的路径这目录。
- Windows目录。使用GetWindowsDirectory函数获取该目录的路径。
- 目录在PATH环境变量中列出。
提供的解决方案如下:
- 使用DLLImport以相对或绝对路径加载dll运行时。
- 设置PATH环境变量,以便ASP。Net处理可以找到c++ DLL。您可以在运行时设置此属性,以便它只影响运行代码的进程。你也可以设置这个全局的系统属性(环境变量| PATH属性)。以编程方式设置此设置不需要重新启动和如果你愿意,你可以把PATH指向web应用的/bin文件夹能够对ASP进行XCopy部署。网络应用程序。在这里是从ASP.Net以编程方式设置路径的步骤。
还有一些与#2相关的更复杂的解决方案,包括以编程方式更新PATH。
相关文章:
- 将对象数组的引用传递给函数
- 什么时候在C++中返回常量引用是个好主意
- 我想将一个对T类型的非常量左值引用绑定到一个T类型的临时值
- 何时在引用或唯一指针上使用移动语义
- 如何在c++中使用引用实现类似python的行为
- 编译C++时未定义的引用
- Ctypes wstring通过引用传递
- c++r值引用应用于函数指针
- 理解c++中的引用
- C++取消引用指针.为什么会发生变化
- 如何修复此错误:未定义对"距离(浮点数,浮点数,浮点数,浮点数,浮点数)"的引用
- 我的项目不会像"undefined reference to `grpc::g_core_codegen_interface'"那样使用未定义的引用错误进行编译
- C++Boost Asio Pool线程,带有lambda函数和传递引用变量
- 强制转换为引用类型
- 引用一个已擦除类型(void*)的指针
- 向量元素的引用地址与它所指向的向量元素的地址不同.为什么
- 具有默认值的引用获取函数
- 在 wcf 服务中引用 c++ 库
- 我如何让IIS加载我的WCF服务引用的本机DLL
- 如何获取c++代理/服务类中继承的soap结构的引用