Stiamo utilizzando un HttpClient per inviare json a un servizio Web riposante. In un caso, ci imbattiamo in qualcosa che ci lascia sconcertati. Usando strumenti come postino, violinista ecc., Possiamo postare su un endpoint e vedere che funziona. Quando facciamo lo stesso con HttpClient.PostAsJsonAsync, possiamo verificare nel software che stiamo postando che ha ricevuto i dati bene. Tuttavia, il nostro PostAsJsonAsync finirà sempre per scadere piuttosto che darci una risposta.HttpClient.PostAsJsonAsync non vede mai quando il post ha successo e risponde
Abbiamo collaborato con il team che ha creato il servizio che stiamo consumando, oltre ai nostri test aggiuntivi da parte nostra, e non siamo ancora riusciti a usufruire del servizio.
Ogni volta che eseguiamo un post con HttpClient, possiamo verificare che il software di destinazione che pubblichiamo abbia effettivamente i dati. Ogni volta che facciamo un post per quel software di destinazione da qualsiasi altro strumento, vediamo sempre molto rapidamente una risposta con il codice di stato di 200. Qualcosa su HttpClient non riesce ad accettare la risposta da questo particolare servizio. Qualcuno ha un'idea di cosa possiamo guardare da qui?
Ecco il codice (se è così cookie cutter che quasi non mi sento è necessario)
public string PostData(string resourcePath, Object o, Boolean isCompleteUrl = false, int timeoutMinutes = -1)
{
using (var client = new HttpClient())
{
if (timeoutMinutes > 0)
{
client.Timeout = new TimeSpan(0,timeoutMinutes,0);
}
var useUrl = isCompleteUrl ? resourcePath : ApiBase + resourcePath;
var response = client.PostAsJsonAsync(useUrl, o).Result;
if(response.StatusCode == System.Net.HttpStatusCode.OK)
{
return response.Content.ReadAsStringAsync().Result;
}
return "";
}
}
Io in realtà sono sempre lo stesso problema esatto quando si utilizza WebClient. I dati pubblicati si riflettono nel sistema di destinazione che pubblichiamo, ma la nostra richiesta si blocca. Sto iniziando a pensare che sia qualcosa a che fare con un certificato autofirmato. Ci stiamo connettendo a un'istanza stage/test di questo servizio su https e probabilmente il certificato non ha una firma valida. Finora tuttavia, non riesco a capire come verificare se questo sia o non sia effettivamente il problema. – Danny