gpt4 book ai didi

azure - 将进程内 COM DLL 与 Azure Function 结合使用

转载 作者:行者123 更新时间:2023-12-04 15:51:29 27 4
gpt4 key购买 nike

是否可以将进程内 COM DLL 与 Azure Functions 结合使用?

我正在将 Web 服务迁移到 Azure Functions。其中一个组件依赖于旧版 32 位 COM DLL。这通常需要 DLL 在使用它的系统上进行 regsvr32 编辑。由于 Azure Functions 似乎不可能实现这一点,是否可以使用此类旧实现?

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

步骤:

  1. 创建新的 Azure Function 应用
  2. 添加新的 Azure Function(http 触发器)
  3. 添加对 32 位 COM 组件的引用
  4. 在 COM 组件上调用简单的测试方法
  5. 在本地运行 - 工作正常
  6. 发布 Azure 函数
  7. 打开函数 http 路径 - Azure Function 失败

错误日志报告异常:

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

Exception while executing function: Legacy Microsoft.Azure.WebJobs.Host.FunctionInvocationException : Exception while executing function: Legacy ---> System.IO.FileNotFoundException : Could not load file or assembly 'Interop.MyCOMLib, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null' or one of its dependencies. The system cannot find the file specified. at async Functions.Legacy.Run(HttpRequestMessage req,TraceWriter log) at System.Runtime.CompilerServices.AsyncTaskMethodBuilder 1.Start[TStateMachine](TStateMachine& stateMachine) at Functions.Legacy.Run(HttpRequestMessage req,TraceWriter log) at lambda_method(Closure ,Legacy ,Object[] )
at Microsoft.Azure.WebJobs.Host.Executors.TaskMethodInvoker 2.InvokeAsync(TReflected instance,Object[] arguments) at async Microsoft.Azure.WebJobs.Host.Executors.FunctionInvoker 2.InvokeAsync[TReflected,TReturnValue](Object instance,Object[] arguments) at async Microsoft.Azure.WebJobs.Host.Executors.FunctionExecutor.InvokeAsync(IFunctionInvoker invoker,ParameterHelper parameterHelper,CancellationTokenSource timeoutTokenSource,CancellationTokenSource functionCancellationTokenSource,Boolean throwOnTimeout,TimeSpan timerInterval,IFunctionInstance instance) at async Microsoft.Azure.WebJobs.Host.Executors.FunctionExecutor.ExecuteWithWatchersAsync(IFunctionInstance instance,ParameterHelper parameterHelper,TraceWriter traceWriter,CancellationTokenSource functionCancellationTokenSource)
at async Microsoft.Azure.WebJobs.Host.Executors.FunctionExecutor.ExecuteWithLoggingAsync(??) at async Microsoft.Azure.WebJobs.Host.Executors.FunctionExecutor.ExecuteWithLoggingAsync(??) End of inner exception

此外,如果我转到解决方案的“依赖项”| COM 然后选择 Interop.Lib 并选择嵌入互操作类型,然后在发布后调用已发布的函数时进行此更改:

“由于以下错误,检索 CLSID {D84F92D7-FFFF-4C16-B939-EC98E3A6EBC0} 组件的 COM 类工厂失败:80040154 类未注册(HRESULT 异常:0x80040154 (REGDB_E_CLASSNOTREG))。”

因此,挑战是如何向 Azure Functions 注册 COM 类?

最佳答案

函数应用平台上似乎无法运行regsvr32,在Kudu控制台上运行命令时,显示“访问被拒绝”。

解决办法是:

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

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

或者您可以在虚拟机上部署完整代码,而不使用 Function APP。

(感谢 Microsoft 对这个答案的支持)。

关于azure - 将进程内 COM DLL 与 Azure Function 结合使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47739904/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com