가끔은 함수가 유휴 상태가 될만큼 드물지만 자주 삽입되는 Blob 저장소를 수신하는 함수가 있습니다.
bin 폴더에 일부 사용자 지정 DLL을 포함하는 방식으로 설정되며 실제 함수 자체는 해당 어셈블리 중 하나에서 실행 메서드를 호출하는 것입니다. 이것은 잘 작동합니다. 대부분.
내 문제는 잠시 실행하면 다음 오류 메시지와 함께 사용자 지정 어셈블리를 갑자기로드하지 못하게된다는 것입니다.
Exception while executing function: Functions.EventHandlerFunctionMicrosoft.Azure.WebJobs.Host.FunctionInvocationException : Exception while executing function: Functions.EventHandlerFunction ---> System.Reflection.TargetInvocationException : Exception has been thrown by the target of an invocation. ---> System.TypeLoadException : Could not load type 'MyAssembly.MyFunctions.EventHandlerFunction' from assembly 'MyAssembly.MyFunctions, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null'. at async Submission#0.Run(Stream blob,String name,TraceWriter log) at : 19 at System.Runtime.CompilerServices.AsyncTaskMethodBuilder.Start[TStateMachine](TStateMachine& stateMachine) at Submission#0.Run(Stream blob,String name,TraceWriter log) End of inner exception at System.RuntimeMethodHandle.InvokeMethod(Object target,Object[] arguments,Signature sig,Boolean constructor) at System.Reflection.RuntimeMethodInfo.UnsafeInvokeInternal(Object obj,Object[] parameters,Object[] arguments) at System.Reflection.RuntimeMethodInfo.Invoke(Object obj,BindingFlags invokeAttr,Binder binder,Object[] parameters,CultureInfo culture) at async Microsoft.Azure.WebJobs.Script.Description.DotNetFunctionInvoker.InvokeCore(Object[] parameters,FunctionInvocationContext context) at async Microsoft.Azure.WebJobs.Script.Description.FunctionInvokerBase.Invoke(Object[] parameters) at async Microsoft.Azure.WebJobs.Host.Executors.FunctionInvoker`1.InvokeAsync[TReflected](Object[] arguments) at async Microsoft.Azure.WebJobs.Host.Executors.FunctionExecutor.InvokeAsync(IFunctionInvoker invoker,Object[] invokeParameters,CancellationTokenSource timeoutTokenSource,CancellationTokenSource functionCancellationTokenSource,Boolean throwOnTimeout,TimeSpan timerInterval,IFunctionInstance instance) at async Microsoft.Azure.WebJobs.Host.Executors.FunctionExecutor.ExecuteWithWatchersAsync(IFunctionInstance instance,IReadOnlyDictionary`2 parameters,TraceWriter traceWriter,CancellationToken…
stacktrace에서 알 수 있듯이 내 어셈블리 (MyAssembly.MyFunctions로 이름이 바뀜)가 갑자기로드되지 않습니다. 자체적으로 복구 할 수 있지만 다운 타임과 "삭제 된"Blob은 내 Blob의 약 1/5 정도입니다.
이것은 멍청한 것 같습니다. 해당 예외에 대응하고 blob을 다시 삽입하여이 문제를 완화 할 수 있다는 것을 알고 있지만 이는 리소스 낭비처럼 보입니다.
내 생각 엔 azure 함수 런타임이 유휴 상태 인 후 dll을로드하지 못하는 경우가 있습니다. 누구든지 이것을 경험하고 그것을 해결할 방법을 찾았습니까?
업데이트 : 내 기능은 다음과 같습니다.
#r "MyAssembly.MyFunctions.dll"
public static async Task Run(Stream blob, string name, TraceWriter log)
{
try {
await new EventHandlerFunction().Run(name);
} catch (Exception e) {
log.Error(e.Message);
}
}
이것에 걸려 넘어지는 사람에게 :
대답은 동일한 어셈블리의 여러 버전이 동일한 함수 앱의 다른 bin 폴더 (다른 함수)에 있다는 것입니다. 분명히 어셈블리를로드 할 때 때때로 다른 버전을 찾을 수 있으며 이로 인해 언급 된 오류가 발생합니다.
두 가지 솔루션이 있습니다.
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다