問題は自分のクライアントマシンでのみ発生します。私は4台のマシンでアプリケーションを実行し、再生は成功しませんでした。クライアントマシン:Flurl.Http.FlurlClient.ReadResponseCookiesでNullReference例外をスローする
私はFlurlライブラリを使用しながら、次の例外をデバッグにアドバイスや助けにお願いしたいと思います:
この例外は、特定のマシン上で実行する可能性があり何?
System.TypeInitializationException: 'Module.Performance.PriceProviders.YahooClientFactory'の型初期化子が例外をスローしました。 ---> System.AggregateException:1つ以上のエラーが発生しました。 --->System.NullReferenceException:オブジェクト参照がオブジェクトのインスタンスに設定されていません。 Flurl.Http.FlurlClient.ReadResponseCookies Flurl.Http.FlurlClient.d__28.MoveNextで(HttpResponseMessage応答) () ---内部例外スタックトレースの終わりで --- System.Threading.Tasks.Taskで 。モジュールでModule.Performance.PriceProviders.YahooClientFactory..cctorでSystem.Threading.Tasks.Task 1.GetResultCore(Boolean waitCompletionNotification) at System.Threading.Tasks.Task
1.get_Result() () でThrowIfExceptional(ブールincludeTaskCanceledExceptions) ---内部例外スタックトレースの終わり--- .Performance.PriceProviders.YahooClientFactory.get_GetYahooClient() Module.Performance.PriceProviders.YahooFlurlClient.d__9.MoveNext() ---例外がスローされた前の場所からのスタックトレースの終了--- Module.Performance.PriceProviders.YahooStockPriceProvider.d__0.MoveNextでSystem.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(タスクのタスク) でSystem.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(タスクタスク) () ---終了時 スタックトレースのModule.Performance.PriceProvidersでSystem.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotificationで例外がスローされた--- をSystem.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccessで以前の位置(タスクタスク) から(タスクタスク) .PriceProviderBase.d__3.MoveNext()
例外の下のコードは次のようになります。
YahooClientFactoryはリクエスト時間を最適化するためのsingletone factorです。工場は、多くの場合、あなたはFlurlがnullの応答を確認せずに失敗した要求の後にクッキーを読み取ろうとknown bugが発生しているように見えます
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)]));
}
}
ガイダンスをいただきありがとうございます。私の問題を解決するための更新についてはまだ作業中です。 (いつものように)いくつかのアセンブリバインディングの問題に陥る。 – Patryk
バージョン2.0へのアップグレード後に問題が修正されました。ありがとうございました。 – Patryk