Le problème se produit uniquement sur mon ordinateur client. J'ai couru mon application sur 4 machines sans succès de reproduction.Machine client: throw NullReference Exception at Flurl.Http.FlurlClient.ReadResponseCookies
Je voudrais demander aux conseils et aider à déboguer l'exception suivante en utilisant la bibliothèque Flurl:
Ce qui peut provoquer cette exception pour fonctionner uniquement sur la machine spécifique? System.TypeInitializationException: L'initialiseur de type de 'Module.Performance.PriceProviders.YahooClientFactory' a lancé une exception. ---> System.AggregateException: une ou plusieurs erreurs sont survenues. --->System.NullReferenceException: référence d'objet non définie sur une instance d'un objet. à Flurl.Http.FlurlClient.ReadResponseCookies (HttpResponseMessage réponse) à Flurl.Http.FlurlClient.d__28.MoveNext() --- Fin de trace de pile d'exception interne --- à System.Threading.Tasks.Task. ThrowIfExceptional (Boolean includeTaskCanceledExceptions) à System.Threading.Tasks.Task 1.GetResultCore(Boolean waitCompletionNotification) at System.Threading.Tasks.Task
1.get_Result() à Module.Performance.PriceProviders.YahooClientFactory..cctor() --- Fin de trace de pile d'exception interne --- au module .Performance.PriceProviders.YahooClientFactory.get_GetYahooClient() at Module.Performance.PriceProviders.YahooFlurlClient.d__9.MoveNext() --- Fin de la trace de la pile de l'emplacement précédent où l'exception a été levée --- à System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess (tâche de tâche) à System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification (tâche de tâche) à Module.Performance.PriceProviders.YahooStockPriceProvider.d__0.MoveNext() --- Fin de trace de la pile à partir de l'emplacement précédent où exception a été levée --- à System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess (tâche de la tâche) à System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification (tâche de la tâche) à Module.Performance.PriceProviders Le code sous l'exception ressemble à:
YahooClientFactory est un facteur singletone pour optimiser le temps de requête. Factory est souvent appelé par d'autres tâches async (couche supérieure)
public static class YahooClientFactory
{
public static IFlurlClient GetYahooClient => YahooClientInstance;
public static string Crumb { get; }
private static readonly IFlurlClient YahooClientInstance;
private const string CookieUrl = "https://finance.yahoo.com";
private static string userAgent = "User-Agent";
private static string headerString =
"Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36";
private const string CrumbUrl = "https://query1.finance.yahoo.com/v1/test/getcrumb";
private static int MaxRetryCount = 5;
static YahooClientFactory()
{
YahooClientInstance = new FlurlClient()
.WithHeader(userAgent, headerString)
.EnableCookies()
.WithUrl($"{CookieUrl}?{GetRandomString(8)}");
for (int i = 0; i < MaxRetryCount; i++)
{
YahooClientInstance
.GetAsync(CancellationToken.None)
.Result
.EnsureSuccessStatusCode();
if (YahooClientInstance.Cookies?.Count > 0)
{
break;
}
if (i == MaxRetryCount)
{
throw new Exception("Reached maximum number of retries when connecting to yahoo client.");
}
Thread.Sleep(100);
}
Crumb = YahooClientInstance
.WithUrl(CrumbUrl)
.GetAsync(CancellationToken.None)
.ReceiveString()
.Result;
}
public static string GetRandomString(int length)
{
const string Chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890";
return string.Join("", Enumerable.Range(0, length).Select(i => Chars[new Random().Next(Chars.Length)]));
}
}
Merci de votre aide, je suis encore en train de travailler sur les mises à jour pour m'assurer que c'est résoudre mon problème. Ran dans certains problèmes de liaison d'assemblage (comme toujours). – Patryk
Problème résolu après la mise à niveau vers la version 2.0, Merci pour votre conseil :) – Patryk