2017-03-22 4 views
0

頻繁に挿入があるBLOBストレージをリッスンする関数がありますが、関数がアイドルにならないことはほとんどありません。Azure関数は、しばらくの間うまく動作した後にアセンブリをロードできません

カスタムDLLがbinフォルダに含まれているように設定されています。実際の関数自体は、これらのアセンブリの1つでrunメソッドを呼び出すだけです。これは正常に動作します。ほとんどの時間。

私の問題は、私が許可すれば、それは突然、次のエラーメッセージで、私のカスタムアセンブリをロードするために失敗する一方で、それがために実行すること、である:私の組立、

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… 

あなたがスタックトレースから見ることができるように(MyAssembly.MyFunctionsという名前に変更された)、突然ロードに失敗します。それは自分自身で回復することができますが、ダウンタイムと "ドロップされた"ブロブは、ブロブの約1/5のどこかにあります。

これはばかばかしいようです。私は、例外に反応してブロブを挿入することでこれを緩和できることを認識していますが、これは単にリソースの浪費のようです。

azure関数のランタイムは、アイドル状態の後にDLLをロードできないことがあります。誰かがこれを経験し、それを解決する方法を見つけましたか?

UPDATE:私の機能は次のようになります。答えは同じアセンブリの複数のバージョンがで、同じ機能をアプリに位置していたということでした

:この上につまずく誰に

#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); 
     } 
    } 
+0

多分ええ、私はそれについて考えたが、私はそれをするために最初にここに行くを与えるだろう考え出しgithubのhttps://github.com/Azure/Azure-Functions –

+1

にこれを直接開くことが良いでしょう1日か2日。 – bech

+0

動作は間違いありません。関数のアプリ名や実行IDを共有できるので、ここで何が起こっているのか詳しく調べることができます。 –

答えて

1

別のbinフォルダ(異なる機能)。どうやら、アセンブリをロードするときに別のバージョンが見つかることがあります。

2つの解決策があります。

  1. 好ましくは、テストを構築し、あなたの機能を公開するためにVS2017のツールを使用して起動するには。これにより、すべてのアセンブリが同じbinフォルダーに入れられます。 プロセス全体がWebjobsと似ています。
  2. また、すべてのアセンブリを共有フォルダに配置し、 は、各機能の特定のbinフォルダではなく、その参照を参照します。
関連する問題