1

我正在尝试使用 Xamarin 实现Refit,如果我之前在应用程序打开时未连接到 wifi,由于某种原因,它会引发 UnknownHostException (UHExc)。但是,这并不会始终如一地发生。

我对 Refit 对我的“Refit-interface”的实例化进行了两次调用:PostLoginAsyncGetDataAsync,如下所示(我一直在关注的指南在这里):

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;
}

“改装界面”看起来有点像这样:

...
[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 -request 时,我得到了预期的 UHExc。如果我然后打开 wifi 并重试(不关闭应用程序),我会再次获得 UHExc,只是这次几乎没有延迟,就像第一次一样(好像异常被缓存了??)。重新启动应用程序并在不断开 wifi 的情况下重试工作正常。

如果我对第二个请求( GetData )做同样的事情,我首先会得到一个 UHExc(显然),但是在重新连接 wifi 时它可以完美地工作。所以在我看来,POST请求缓存了异常或其他东西,并反复抛出它而不尝试连接。我该如何解决这个问题(无论实际问题是什么)?

4

1 回答 1

0

我也遇到了这个问题,经过一些测试后发现问题出在Fusillade库上。现在最初的问题是修复更改未反映在 NuGet 包中,因此您需要从Github 存储库下载最新源并引用较新的 dll。

看起来根本问题是由于失败的请求被排队和播放,即使请求导致了 WebException。

我将最新的代码包含到我的项目中并确认它们正在工作。

于 2016-05-27T11:52:56.150 回答