【问题标题】:HttpModule Native C++ dll in AzureAzure 中的 HttpModule 本机 C++ dll
【发布时间】:2012-06-26 23:32:16
【问题描述】:
我想在 Windows azure 中运行原生 httpmodule(c++ 64 位 dll)。首先这是可能的,其次,最好的方法是什么?
我以前在 azure 中使用过本机 dll,但将其包装在一个运行良好的托管 c# httphandler 中,但这次我想直接托管本机 dll。是否可以像在 IIS 中一样在 Azure 中托管本机 dll?
【问题讨论】:
标签:
dll
azure
native
httpmodule
webrole
【解决方案1】:
我相信您使用的是 Windows Azure Web 角色,并且在 Windows Azure Web 角色上,带有 IIS 的本机 HttpModule 配置将与其他 IIS 服务器相同,这里唯一的技巧是您将使用启动任务来运行 AppCmd 命令安装、注册和配置您的原生模块。
您在启动任务中需要的基本命令如下所示:
appcmd install module /name: string /image: string /add:true|false /lock:true|false
例如,要使用 %windir%\system32\inetsrv 目录中的 .dll 文件注册、启用和锁定名为 ImageCopyrightModule 的模块,请在命令提示符处键入以下内容,然后按 ENTER:
appcmd install module /name: ImageCopyrightModule /image:c:/%windir%/system32/inetsrv/ imageCopyrightModule .dll /add:true /lock:true
【解决方案2】:
是的,有可能,我最近不得不在我的 Azure 项目中使用一个非托管 C 库,所以我所做的就是为它创建一个 C++/CLI 包装器,然后在我的 C# 项目中简单地引用它。
我相信这是最简单的方法,否则您需要使用 P/Invoke 直接从 C# 调用非托管本机代码。
请记住,在云端,Azure 使用 2008 Visual C++ 运行时库,因此您必须使用 VS2008 编译您的 C++ 项目,或者更好的选择是将 Visual C++ 2010 Redistributable Package 上传到云端并静默安装它在启动时。
我列出了 3 个简单的步骤来做到这一点here如果你有兴趣。