1

私は耐久性のある機能(オーケストレーション機能)に慣れていて、Microsoftのドキュメントに従ってサンプルアプリケーションを見ました。私は疑いがほとんどありません。タイマートリガーで耐久機能を呼び出す方法は?

例:要求が正常に処理されますが、私は、HTTPなどのさまざまな動詞を設定したとき、それがNOTFOUND」コンソールでのエラーと同様に行われた要求に応えたGETよう

public static async Task<HttpResponseMessage> Run(
      [HttpTrigger(AuthorizationLevel.Anonymous, methods: "post", 
      Route = "orchestrators/{functionName}")] HttpRequestMessage req, 
      [OrchestrationClient] DurableOrchestrationClient starter, 
      string functionName, 
      TraceWriter log) 
     { 
      // Function input comes from the request content. 
      dynamic eventData = await req.Content.ReadAsAsync<object>(); 
      string instanceId = await starter.StartNewAsync(functionName, eventData); 

      log.Info($"Started orchestration with ID = '{instanceId}'."); 

      return starter.CreateCheckStatusResponse(req, instanceId); 
     } 

それを呼び出すために、私は郵便配達を使用してHTTP POSTリクエストをしましたそれにブラウザからのHTTPリクエストに?

私はタイマ・トリガ・アズール機能にして任意のオーケストレーション機能を呼び出すことができますが起こったのか?

この.Whyコンソールで「NOTFOUND」エラーで応答していない場合は、なぜ?

UPDATE:質問

[FunctionName("TimerTrigger")] 
      public static async Task Run([TimerTrigger("0 */5 * * * *")]TimerInfo myTimer, TraceWriter log) 
      {//this runs for every 5minutes 
       using (HttpClient client = new HttpClient()) 
       { 
        var content = new FormUrlEncodedContent(new[] 
       { 
        new KeyValuePair<string, string>("", "") 
       }); 
       //making request to above function by http trigger 
        var result = await client.PostAsync("http://localhost:7071/orchestrators/E1_HelloSequence", content); 
       } 
       log.Info($"C# Timer trigger function executed at: {DateTime.Now}"); 
       return; 
      } 

について

いくつかの追加の詳細については、私は耐久性のある機能は、長い実行中のプロセスを持っているので、タイマーでオーケストレーション機能を呼び出すので、もしタイマーによってトリガーをでhttp要求がなぜtriggredすることができます私はなぜこのアプローチに従おうとしているのですか?そのような場合には、タイマーがタイムアウトする可能性があります。上記のコードで呼び出すことは可能ですか?

答えて

1

これは一般的なAzure関数の動作です。 GETが機能しないのは、サンプル内の関数がPOSTで動作するようにしか構成されていないためです。関数のシグネチャで[HttpTrigger]属性を参照してください:

[HttpTrigger(AuthorizationLevel.Anonymous, methods: "post", 
     Route = "orchestrators/{functionName}")] 

あなたがGETサポートしたい場合は、それに応じてmethodsパラメータを変更します。

[HttpTrigger(AuthorizationLevel.Anonymous, methods: "get", 
     Route = "orchestrators/{functionName}")] 

メモVisual Studioには、変更を行ったところ、キャッシングのバグを持っているようだということローカルにデバッグする際に情報を正しくルーティングすることができません。あなたはタイマートリガーを使用して耐久性に優れた機能を起動したい場合はhttps://docs.microsoft.com/en-us/azure/azure-functions/functions-bindings-http-webhook

、そしてちょうどトリガータイプを変更:https://github.com/Azure/Azure-Functions/issues/552 HTTPトリガーの詳細については

は、このマニュアルを参照してください:私はここにいることを追跡するためのGitHubの問題を開設しました。

タイマーについての詳細トリガについては
[FunctionName("ScheduledStart")] 
public static async Task RunScheduled(
    [TimerTrigger("0 0 * * * *")] TimerInfo timerInfo, 
    [OrchestrationClient] DurableOrchestrationClient starter, 
    TraceWriter log) 
{ 
    string functionName = "E1_HelloSequence"; 
    string instanceId = await starter.StartNewAsync(functionName, null); 
    log.Info($"Started orchestration with ID = '{instanceId}'."); 
} 

、このマニュアルを参照してください:たとえばhttps://docs.microsoft.com/en-us/azure/azure-functions/functions-bindings-timer

+0

はあなたに感謝...私の問題は、上記のソリューションで解決 –

2

HTTP、それは「コンソールにエラーだけでなく、ブラウザからのHTTPリクエストとそれに行われた要求は、と答え、 『NOTFOUNDと答えたこれは?

が起こっコンソール.WhyにNOTFOUND』エラーGETのように私は別の動詞を設定しGETを有効にするには

[HttpTrigger(AuthorizationLevel.Anonymous, methods: "post", 
Route = "orchestrators/{functionName}")] HttpRequestMessage req, 

methodsパラメータにgetを追加

あなたはあなたの関数を指定しているためにのみPOSTでトリガーされます。

タイマトリガの空調機能でオーケストレーション機能を呼び出せますか?

OrchestrationClientのHTTPバインド機能と同様のタイマートリガー機能を定義できます。サンプル宣言:

public static async Task Run(
    [TimerTrigger("0 */1 * * * *")] TimerInfo info, 
    [OrchestrationClient] DurableOrchestrationClient starter) 
関連する問題