1

Xamarin を使用してRefitを実装しようとしていますが、アプリが開いているときに以前に wifi に接続していなかった場合、何らかの理由で UnknownHostException (UHExc) がスローされます。ただし、これは一貫して発生しません。

以下に示すように、「Refit-interface」の Refit のインスタンス化に対して、PostLoginAsyncGetDataAsyncの 2 つの呼び出しがあります (私が従ったガイドはこちらです)。

public async Task<SomeClass> PostLogin(string user, string password)
{
    SomeClass response = null;

    var loginTask = apiService.UserInitiated.PostLoginAsync(new RequestBody(user: user, password: password));
    response = await FireWebTask(loginTask);

    return response;
}

private async Task<List<Data>> GetRemoteDataAsync(string args)
{
    List<Data> list = null;

    var getDataTask = apiService.UserInitiated.GetDataAsync(args);
    list = await FireWebTask(getDataTask);

    return list;
}

「Refit-interface」は次のようになります。

...
[Post("/relative/url/to/login")]
Task<SomeClass> PostLoginAsync([Body(BodySerializationMethod.Json)] RequestBody requestBody);

[Get("/relative/url/to/data")]
Task<List<Data>> GetDataAsync([Header("SomeHeader")] string args);
...

インターネットに接続せずにアプリを開いてPostLoginリクエストを送信しようとすると、期待どおりに UHExc が返されます。次にwifiをオンにして再試行すると(アプリを閉じずに)、UHExcが再び取得されますが、今回は初めてのようにほとんど遅延がありません(例外がキャッシュされたかのように??)。Wi-Fiを切断せずにアプリを再起動して再試行すると、正常に機能します。

2番目のリクエスト( GetData )でまったく同じことを行うと、最初にUHExcを取得します(明らかに)が、wifiを再接続すると問題なく動作します。したがって、POSTリクエストが例外などをキャッシュし、まったく接続しようとせずに繰り返しスローするように思えます。どうすればこれを解決できますか (実際の問題が何であれ)。

4

1 に答える 1

0

私もこの問題を抱えていましたが、いくつかのテストの後、問題はFusilladeライブラリにあることがわかりました。最初の問題は、修正の変更が NuGet パッケージに反映されていないため、 Github リポジトリから最新のソースをダウンロードして、新しい dll を参照する必要があることです。

根本的な問題は、リクエストが WebException になったにもかかわらず、失敗したリクエストがキューに入れられて再生されることが原因のようです。

プロジェクトに最新のコードを含め、それらが機能していることを確認しました。

于 2016-05-27T11:52:56.150 に答える