Функция Azure запускает httpclient.postasync несколько раз в пределах http-триггера. - PullRequest
0 голосов
/ 20 сентября 2018

У меня есть функция Azure с триггером http для прослушивания входящих веб-запросов с полезной нагрузкой JSON.
Когда триггер получает запрос, я хочу проанализировать данные json и вызвать внешние повторные вызовы на основе некоторыхданные json.

По какой-то причине веб-триггер публикует данные внешнего репапи 5 раз.Когда я удаляю внешний код restpi, он срабатывает только один раз, когда я получаю информацию журнала потоковой передачи.

Может кто-нибудь сказать мне, в чем может быть проблема или альтернативный способ достижения той же функциональности?

вот код httpsrigger c #

#r "Newtonsoft.Json"

using System;
using System.Text;
using System.Net;
using Newtonsoft.Json;

public class PostData
{
public string name { get;set; }    
}

// The string caller was added to the function parameters to get the caller from the URL.
// The ICollector<string> outQueue was added to the function parameters to get access to the output queue.
public static async Task<object> Run(HttpRequestMessage req, string caller, 
ICollector<string> outQueue, TraceWriter log)
{
log.Info($"Webhook was triggered!");

// The JSON payload is found in the request
string jsonContent = await req.Content.ReadAsStringAsync();
dynamic data = JsonConvert.DeserializeObject(jsonContent);

// Create a dynamic JSON output, enveloping the payload with 
// The caller, a timestamp, and the payload itself
dynamic outData = new Newtonsoft.Json.Linq.JObject();
outData.caller = caller;
outData.timeStamp = System.DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff");
outData.payload = data;

// Add the JSON as a string to the output queue
outQueue.Add(JsonConvert.SerializeObject(outData));     

//Post to restapi
log.Info("starting post routine ID:" + data.incident + " Incident: " + data.service);
StringContent mv_stringContent = new StringContent("{ \"name\": \"" + data.service + " issue!" + "\", \"message\": \"" + "Incident: " + data.incident + ": " + data.service + "\", \"visible\": \"1\", \"status\": \"2\", \"notify\": \"true\" }", UnicodeEncoding.UTF8, "application/json");
HttpClient client = new HttpClient();
client.DefaultRequestHeaders.Add("X-Auth-Token", "supersecret");
HttpResponseMessage response2 = await client.PostAsync("https://testing.mysite.com/api/v1/incidents", mv_stringContent);
var responseString = await response2.Content.ReadAsStringAsync();
log.Info("finsihed post rotuine");    

// Return status 200 OK to the calling system..
return req.CreateResponse(HttpStatusCode.OK, new
{
   caller = $"{caller}",
    status = "OK",
    test = ""
});
}
...