首页 文章

使用带有Azure功能的In-Proc COM DLL

提问于
浏览
4

是否可以使用Azure函数的In-Proc COM DLL?

我正在将我的Web服务迁移到Azure Functions . 其中一个组件依赖于传统的32位COM DLL . 这通常需要在将要使用它的系统上对DLL进行regsvr32-ed . 由于Azure功能似乎无法实现,因此可以使用此类传统实现吗?

或者是否有必要恢复到经典的 Cloud 服务来支持这一点? (我的偏好是使用消费服务计划并从“无服务器”架构中受益 . )

脚步:

  • 创建新的Azure功能应用程序

  • 添加新的Azure功能(http触发器)

  • 添加对32位COM组件的引用

  • 在COM组件上调用简单的测试方法

  • 本地运行 - 工作正常

  • 发布Azure功能

  • 打开功能http路径 - Azure功能失败

错误日志报告异常:

无法加载文件或程序集'Interop.MyCOMLib,Version = 1.0.0.0,Culture = neutral,PublicKeyToken = null'或其依赖项之一 . 该系统找不到指定的文件 .

执行函数时出现异常:Legacy Microsoft.Azure.WebJobs.Host.FunctionInvocationException:执行函数时出现异常:Legacy ---> System.IO.FileNotFoundException:无法加载文件或程序集'Interop.MyCOMLib,Version = 1.0.0.0, Culture = neutral,PublicKeyToken = null'或其依赖项之一 . 该系统找不到指定的文件 . 在System.Runtime.CompilerServices.AsyncTaskMethodBuilder的异步Functions.Legacy.Run(HttpRequestMessage req,TraceWriter日志)1.在lambda_method的函数.Legacy.Run(HttpRequestMessage req,TraceWriter日志)启动[TStateMachine](TStateMachine和stateMachine)(闭包, Microsoft.Azure.WebJobs.Host.Executors.TaskMethodInvoker中的Legacy,Object [])异步Microsoft.Azure.WebJobs.Host.Executors.FunctionInvoker中的InInvokeAsync(TReflected instance,Object []参数)2.InvokeAsync [TReflected,TReturnValue异步Microsoft上的异步Microsoft.Azure.WebJobs.Host.Executors.FunctionExecutor.InvokeAsync(IFunctionInvoker调用者,ParameterHelper parameterHelper,CancellationTokenSource timeoutTokenSource,CancellationTokenSource functionCancellationTokenSource,Boolean throwOnTimeout,TimeSpan timerInterval,IFunctionInstance实例)中的对象实例,Object []参数) .Azure.WebJobs.Host.Executors.FunctionExecutor.ExecuteWithWatchersAsync(IFunctionInstance实例,ParameterHelper parameterHelper,Tr aceWriter traceWriter,CancellationTokenSource functionCancellationTokenSource)异步Microsoft.Azure.WebJobs.Host.Executors.FunctionExecutor.ExecuteWithLoggingAsync(??)async Microsoft.Azure.WebJobs.Host.Executors.FunctionExecutor.ExecuteWithLoggingAsync(??)内部异常结束

另外,如果我去解决方案的依赖关系| COM然后选择Interop.Lib并选择Embed Interop Types然后在发布后通过此更改调用publushed函数:

“由于以下错误,检索具有CLSID 的组件的COM类工厂失败:80040154未注册类(HRESULT异常:0x80040154(REGDB_E_CLASSNOTREG)) . ”

因此,面临的挑战是如何使用Azure Functions注册COM类?

2 回答

  • 0

    在进程中加载COM对象没有什么特别之处 . 该过程已经加载了大量随机窗口COM对象 . 试一试,看看它是否有效 .

    (发表评论的声誉不够)

  • 0

    似乎无法在功能应用平台上运行regsvr32,当在Kudu控制台上运行命令时,它显示“拒绝访问” .

    解决方案是:

    1-创建使用COM lib并使用其功能的小型Web服务,并在Windows VM上托管此应用程序 .

    2-在功能应用程序中托管您的代码的其他部分,而不是将功能APP引用到COM,您可以调用托管的Web服务(并传递您想要的任何参数)

    或者只是您可以在VM上部署完整代码,而不使用功能APP .

    (感谢Microsoft对此答案的支持) .

相关问题