2016-07-08 8 views
1

別のアセンブリで見つかった - 私は別のアセンブリ内のいくつかのWebJob関数を定義したいプロジェクトA.それを呼び出す - 見つからないアセンブリB.AzureのWebJobs:いいえ機能私はWebJobプロジェクトを持っている

WebJobsそれを呼び出しますアセンブリーBで設定したジョブ関数のいずれかです。アセンブリBからプロジェクトAにメソッドを移動することはできますが、WebJobsはそれをうまく見つけます。

ここでは、プロジェクトAにはなく、アセンブリBに働く仕事の方法の一例です:

public static void ProcessQueueMessage([QueueTrigger("logqueue")] string logMessage, TextWriter logger) 
{ 
    logger.WriteLine(logMessage); 
} 

クラスのアセンブリBにはpublicです。アセンブリBはWebJobs SDKへの参照を持ち、プロジェクトAにはアセンブリBへの参照があります。アセンブリBがAのドメインアセンブリに含まれていることを確認して確認しました。

WebJobホストはアセンブリBでメソッドを見つけますか?属性を持つアセンブリを装飾する必要がありますか?または、カスタムタイプのロケータを実行しますか?

誰かがこのようなことをする例はありますか?

+0

動作していますか?すべてのQueueTrigger? – Thomas

+0

@トーマス - あなたが何を意味するのか正確にはわかりません。上記の機能は、WebJobプロジェクト(プロジェクトA)で動作します。 JobHostは、ログに関数が見つかったことを示します。しかし、私が同じ機能を使ってアセンブリBに入れると、JobHostはそれを見つけられません。これは、Aのすべてのトリガー機能で発生していますが、Bのトリガー機能はありません。 –

答えて

2

ほとんどの場合、依存性のタイミングの問題があります。 JobHostは現在のAppDomainのアセンブリをインデックスに登録するため、JobHostがインデックスを作成するまでにメインのexeファイルに依存関係がロードされていない場合、2番目のアセンブリはインデックスに登録されません。

最も簡単な解決策は、JobHostがインデックスを作成する前に、手動でアプリケーションドメインに手動でロードするか、2番目のアセンブリに含まれるコードを使用することです。

例:それはいくつかのあなたの機能に

static void Main(string[] args) { 
//Data _dummy = new Data(); // reference a type in the other assembly 

AppDomain.CurrentDomain.Load("Assembly2"); // manually load into the current domain 

var config = new JobHostConfiguration(); 

var host = new JobHost(config); 
host.RunAndBlock(); } 
+1

それはそれをしました!ありがとう、ジェイソン、私はそれを考えなかったでしょう。 –

関連する問題