我正在构建一个执行2次操作的WebService。 1.将数据保存到数据库SQL 2.通过http请求调用微服务的另一种方法。
它现在正在工作,但是我必须等待微服务的响应才能将Message返回给客户端。我要改变它。我想要调用微服务方法而不等待它的响应,并立即在客户端发送消息。
这是方法。
[HttpPost]
public async Task<HttpResponseMessage> saveRRAsync(RrDTO u)
{
try
{
log.Debug(JsonConvert.SerializeObject(u, Formatting.Indented));
}
catch (Exception e)
{
}
DateTime dataInvioMicroservice = DateTime.Now;
try
{
if (u.rrData == null || u.rrData.Count <= 0)
{
return Request.CreateResponse(HttpStatusCode.InternalServerError, new RMessageHRV(null,
"Data empty",
true,
(short)status_code.Failure, true, null));
}
DbData dbData = new DbData();
//recupero l'id del paziente dal primo elemento nel json
String patientId = u.rrData[0].patientId;
int idPatient = Int32.Parse(patientId);
int id = getMaxIdFromRR(idPatient);
List<RR> listRr = new List<RR>();
foreach (RrDTO.RrData data in u.rrData)
{
if (data.rr != null && data.rr.Count > 0)
{
foreach (String d in data.rr)
{
dataInvioMicroservice = data.createdDate;
RR ecg = new RR();
ecg.Id = id++;
ecg.IdPerson = idPatient;
ecg.y = Decimal.Parse(d);
ecg.timestamp = data.createdDate;
listRr.Add(ecg);
}
}
}
dbData.RR.AddRange(listRr);
int savedData = dbData.SaveChanges();
//CHIAMO IL MICROSERVICE CHE DOVRà ELABORARE IN AUTOMATICO L'HRV
HttpClient client = new HttpClient();
client.BaseAddress = new Uri(endPointMicroservice+ "elaboraHRV");
client.DefaultRequestHeaders.Accept.Clear();
client.DefaultRequestHeaders.Accept.Add(
new MediaTypeWithQualityHeaderValue("application/json"));
MicroserviceDTO mT = new MicroserviceDTO();
mT.applyClearF3A = true;
mT.countryID = "Central European Standard Time";
mT.timeType = 0;
mT.patientId = idPatient;
mT.date = dataInvioMicroservice;
HttpResponseMessage response = await CallMicroservice(mT, client);
if (response != null && response.StatusCode == HttpStatusCode.OK)
{
log.Debug(response.Content);
log.Debug("CHIAMATA AL MICROSERVICE CORRETTO");
}
else
{
{
log.Debug("CHIAMATA AL MICROSERVICE FALLITA");
log.Debug(response.Content);
}
}
return Request.CreateResponse(HttpStatusCode.OK, new RMessageHRV(null,
"Data saved",
true,
(short)status_code.Success, true, null));
}
catch (Exception e)
{
log.Error(string.Format("{0} {1}", e.Message, e.StackTrace));
log.Error(e.InnerException);
log.Error(e.Source);
return Request.CreateResponse(HttpStatusCode.InternalServerError, new RMessageHRV(null,
"Data empty",
true,
(short)status_code.Exception, true, null));
}
}
static async Task<HttpResponseMessage> CallMicroservice(MicroserviceDTO microservice, HttpClient client)
{
HttpResponseMessage response = await client.PostAsJsonAsync(
"", microservice);
response.EnsureSuccessStatusCode();
// return URI of the created resource.
return response;
}
此代码后:
HttpResponseMessage response = await CallMicroservice(mT, client);
我想立即在客户端发送响应,而不必等待CallMicroservice Method的响应,有可能吗?