为什么这个 webclient post 代码在没有网络连接时没有超时?
why is this webclient post code not being timed out when there is no network connection?
我的 xamarin.ios
应用程序中有这个功能,可以将对象发布到我的 api 。该对象包含字符串和 1 个成员作为 base64 字符串。在没有连接的情况下,我似乎无法在不到 5 分钟的时间内超时并获得异常。但是,当对象中没有 base 64 时,它似乎会超时。任何想法让这个工作?这是我的代码:
public static string postData(object @params, string url)
{
MyWeWbClient webClient = new MyWeWbClient();
try
{
webClient.Headers["content-type"] = "application/json";
webClient.Headers.Add("Authorization", "Bearer " + Settings.GeneralSettings3);
var reqString = Encoding.UTF8.GetBytes(JsonConvert.SerializeObject(@params, Formatting.Indented));
byte[] resByte = webClient.UploadData(url, "post", reqString);
var resString1 = Encoding.Default.GetString(resByte);
webClient.Dispose();
return resString1;
}
catch (WebException ex)
{
string responseText = "";
var responseStream = ex.Response?.GetResponseStream();
if (responseStream != null)
{
using (var reader = new StreamReader(responseStream))
{
responseText = reader.ReadToEnd();
}
}
throw new Exception(responseText.ToString());
}catch(Exception ex)
{
throw;
}
}
还有我的自定义网络客户端 class 所以我可以设置超时:
public class MyWeWbClient : WebClient
{
protected override WebRequest GetWebRequest(Uri uri)
{
WebRequest w = base.GetWebRequest(uri);
w.Timeout = (int)TimeSpan.FromSeconds(10).TotalMilliseconds;//20 * 60 * 1000;
return w;
}
}
提前致谢。感谢任何帮助。
编辑:
相同的代码在 xamarin.android
上工作得很好,如果没有像预期的那样的互联网连接,它会超时。
我不推荐使用 webClient,我会使用像 restsharp 这样的外部依赖。
或者,您可以使用 Task.Run()
对其进行硬编码,但由于它在 Xamarin 中,我不能说。
我的 xamarin.ios
应用程序中有这个功能,可以将对象发布到我的 api 。该对象包含字符串和 1 个成员作为 base64 字符串。在没有连接的情况下,我似乎无法在不到 5 分钟的时间内超时并获得异常。但是,当对象中没有 base 64 时,它似乎会超时。任何想法让这个工作?这是我的代码:
public static string postData(object @params, string url)
{
MyWeWbClient webClient = new MyWeWbClient();
try
{
webClient.Headers["content-type"] = "application/json";
webClient.Headers.Add("Authorization", "Bearer " + Settings.GeneralSettings3);
var reqString = Encoding.UTF8.GetBytes(JsonConvert.SerializeObject(@params, Formatting.Indented));
byte[] resByte = webClient.UploadData(url, "post", reqString);
var resString1 = Encoding.Default.GetString(resByte);
webClient.Dispose();
return resString1;
}
catch (WebException ex)
{
string responseText = "";
var responseStream = ex.Response?.GetResponseStream();
if (responseStream != null)
{
using (var reader = new StreamReader(responseStream))
{
responseText = reader.ReadToEnd();
}
}
throw new Exception(responseText.ToString());
}catch(Exception ex)
{
throw;
}
}
还有我的自定义网络客户端 class 所以我可以设置超时:
public class MyWeWbClient : WebClient
{
protected override WebRequest GetWebRequest(Uri uri)
{
WebRequest w = base.GetWebRequest(uri);
w.Timeout = (int)TimeSpan.FromSeconds(10).TotalMilliseconds;//20 * 60 * 1000;
return w;
}
}
提前致谢。感谢任何帮助。
编辑:
相同的代码在 xamarin.android
上工作得很好,如果没有像预期的那样的互联网连接,它会超时。
我不推荐使用 webClient,我会使用像 restsharp 这样的外部依赖。
或者,您可以使用 Task.Run()
对其进行硬编码,但由于它在 Xamarin 中,我不能说。