Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/xamarin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Xamarin 第一次调用httpclient时,任务被取消_Xamarin_Xamarin.forms_Xamarin.ios - Fatal编程技术网

Xamarin 第一次调用httpclient时,任务被取消

Xamarin 第一次调用httpclient时,任务被取消,xamarin,xamarin.forms,xamarin.ios,Xamarin,Xamarin.forms,Xamarin.ios,我正在使用HttpClient从xamarin.forms共享项目调用rest服务。对于第一次调用,它抛出“任务已取消”,当我第二次调用它时,它工作正常。 如果我第一次在设备中安装应用程序并调用服务,它会抛出错误,但之后不会重复 安装到设备后,我可以调试、运行多次但没有问题,但当我卸载然后调试/运行或在新设备中时,此问题会出现,并且只有一次 下面是我的代码 我试图查看该任务是否被另一个任务或另一个进程取消,并添加了试图通过TaskCanceledException捕获但未捕获的内容 公共静态类H

我正在使用HttpClient从xamarin.forms共享项目调用rest服务。对于第一次调用,它抛出“任务已取消”,当我第二次调用它时,它工作正常。 如果我第一次在设备中安装应用程序并调用服务,它会抛出错误,但之后不会重复

安装到设备后,我可以调试、运行多次但没有问题,但当我卸载然后调试/运行或在新设备中时,此问题会出现,并且只有一次

下面是我的代码

我试图查看该任务是否被另一个任务或另一个进程取消,并添加了试图通过TaskCanceledException捕获但未捕获的内容

公共静态类HttpManager
{
私有静态HttpClient=新HttpClient();
专用静态只读字符串baseUrl=”http://webapi.testwesite.org/api/";
私有静态void Initialize()
{
client.BaseAddress=新Uri(baseUrl);
client.DefaultRequestHeaders.Accept.Clear();
client.DefaultRequestHeaders.Accept.Add(新的MediaTypeWithQualityHeaderValue(“应用程序/json”);
client.Timeout=newtimespan(0,20,0);
}
公共静态异步任务PostAsync(R输入,字符串url)
{
尝试
{
初始化();
return wait PostMessag(输入,url);
}
捕获(TaskCanceledException ex)
{
引发新异常(“无法联系服务器。请重试”);
}
捕获(例外情况除外)
{
引发新异常(“无法联系服务器。请重试”);
}
}
专用静态异步任务PostMessage(R输入,字符串url)
{
HttpResponseMessage response=wait client.postsjsonasync(url,输入);
T retunVal=wait response.Content.ReadAsAsync();
回报率;
}
}
下面是堆栈跟踪

位于System.Net.Http.NSUrlSessionHandler.SendAsync(System.Net.Http.HttpRequestMessage请求,System.Threading.CancellationToken CancellationToken)
[0x001d4]in/Library/Frameworks/Xamarin.iOS.framework/Versions/12.14.0.114/src/Xamarin.iOS/Foundation/NSUrlSessionHandler.cs:541
在System.Net.Http.HttpClient.SendAsyncWorker(System.Net.Http.HttpRequestMessage请求,System.Net.Http.HttpCompletionOption completionOption,System.Threading.CancellationToken CancellationToken)[0x0009e]
在/Library/Frameworks/Xamarin.iOS.framework/Versions/12.14.0.114/src/Xamarin.iOS/mcs/class/System.Net.Http/System.Net.Http/HttpClient.cs:281中
位于TestApp.iOS.HttpManager`2[T,R].PostMessag(R输入,System.String url)[0x0007c]中:0
在TestApp.iOS.HttpManager`2[T,R].PostAsync(R输入,System.String url)[0x00050]中:0
2019-08-17 09:34:12.789 TestApp.iOS[12806:43127157]已取消
螺纹加工:#10
线程0xa已退出,代码为0(0x0)。

我认为这是一个超时问题。这可以通过增加超时值来解决。

我也有同样的问题,似乎过早调用HttpClient是有问题的。我试图在应用程序启动时调用web api,但没有成功。因此,我在Overrided方法OnAppearing的第一页中调用了它,它正在工作。

如果您在上面的代码客户机中查看下面的代码,Timeout=new TimeSpan(0,20,0);我已将超时设置为20分钟。我也尝试了1个小时的超时,但得到了相同的错误。此错误仅在第一次请求时出现。如果我对同一个方法发出第二个请求,它可以正常工作。您可以尝试一步一步地调试以查找异常。您发现了与此相关的任何信息吗?我也有同样的问题,只是每次都会抛出异常,而不仅仅是第一次调用。你知道哪里出了问题吗?我在第一次呼叫时遇到了相同的问题。将表单更新到最新版本后,它停止了。不知道是什么问题,但代码是一样的,除了将Xamarin.Forms更新为最新版本之外,我没有做任何更改。@DharmendraKumar它是在哪个版本中修复的?在44.0991640版本上,它不是固定的