xamarin.forms - Xamarin Form - TaskCanceledException thrown on await client.PostAsync() -


very strange problem (all code in pcl).

when call await client.postasync() against webservice (api's), taskcanceledexception.

few things note:

this running fine on android devices. happens when run app on ios, but...

... make stranger, can make run on ios if use different (physical) server hosts api's query await client.postasync().

so,

to make more strange, both servers run same webservice, there 0 difference, difference servers on different sites different client. fault not queried webservice throwing timing out or cancelling request.

both servers have valid (trusted) ssl certificate it's not ssl related issue.

i stuck. have tried modernhttpclient , increaing client.timespan.

i checked ex.cancellationtoken.iscancellationrequested, false, it's pretty safe assume time of "timeout". however, when run post request postman manually against api, it's clear webservice works fine (there no timeout).

public class tokenservice {     private httpclient client;     private app app;      public tokenservice()     {         //client = new httpclient();          client = new httpclient(new nativemessagehandler());         client.timeout = timespan.fromminutes(30);          client.maxresponsecontentbuffersize = 256000;         app = (app)application.current;     }      public class tokenresponse     {         public string access_token;         public int32 expires_in;     }      public async task<string> getnewtoken()     {         // check if valid token stored , within expiry datetime          if(token.bearertoken != null)         {             if (token.expiry > datetime.now)                 return token.bearertoken;         }          var tokenulr = app.webserviceshostname + "/token";          var tokenresponse = new tokenresponse();          try         {             var content = new formurlencodedcontent(new[]             {                 // needs stored somewhere safe:                 new keyvaluepair<string, string>("username", "validusernamehere"),                 new keyvaluepair<string, string>("password", "validpasshere")             });              var response = await client.postasync(tokenulr, content); // <<***exception here              if (response.statuscode == httpstatuscode.ok)             {                 var token = await response.content.readasstringasync();                  tokenresponse = jsonconvert.deserializeobject<tokenresponse>(token);                  token.bearertoken = tokenresponse.access_token;                 token.expiry = datetime.now.addseconds(tokenresponse.expires_in - 30);                  return tokenresponse.access_token;             }             else             {                 return null;              }         }         catch(taskcanceledexception ex)         {             string message = ex.message;             string source = ex.source;             cancellationtoken token = ex.cancellationtoken;                return null;         }         catch(exception ex)         {             string test = ex.message;             return null;         }     } } 

exception details:

{system.threading.tasks.taskcanceledexception: task canceled.
@ system.runtime.compilerservices.taskawaiter.throwfornonsuccess (system.threading.tasks.task task) [0x0002d] in /library/frameworks/xamarin.ios.framework/versions/10.4.0.128/src/mono/mcs/class/referencesource/mscorlib/system/runtime/compilerservices/taskawaiter.cs:179 @ system.runtime.compilerservices.taskawaiter.handlenonsuccessanddebuggernotification (system.threading.tasks.task task) [0x0002e] in /library/frameworks/xamarin.ios.framework/versions/10.4.0.128/src/mono/mcs/class/referencesource/mscorlib/system/runtime/compilerservices/taskawaiter.cs:156 @ system.runtime.compilerservices.taskawaiter.validateend (system.threading.tasks.task task) [0x0000b] in /library/frameworks/xamarin.ios.framework/versions/10.4.0.128/src/mono/mcs/class/referencesource/mscorlib/system/runtime/compilerservices/taskawaiter.cs:128 @ system.runtime.compilerservices.taskawaiter`1[tresult].getresult () [0x00000] in /library/frameworks/xamarin.ios.framework/versions/10.4.0.128/src/mono/mcs/class/referencesource/mscorlib/system/runtime/compilerservices/taskawaiter.cs:357 @ system.net.http.httpclienthandler+c__async0.movenext () [0x004c1] in /library/frameworks/xamarin.ios.framework/versions/10.4.0.128/src/mono/mcs/class/system.net.http/system.net.http/httpclienthandler.cs:391

--- end of stack trace previous location exception thrown --- @ system.runtime.exceptionservices.exceptiondispatchinfo.throw () [0x0000c] in /library/frameworks/xamarin.ios.framework/versions/10.4.0.128/src/mono/mcs/class/referencesource/mscorlib/system/runtime/exceptionservices/exceptionservicescommon.cs:143 @ system.runtime.compilerservices.taskawaiter.throwfornonsuccess (system.threading.tasks.task task) [0x00027] in /library/frameworks/xamarin.ios.framework/versions/10.4.0.128/src/mono/mcs/class/referencesource/mscorlib/system/runtime/compilerservices/taskawaiter.cs:176 @ system.runtime.compilerservices.taskawaiter.handlenonsuccessanddebuggernotification (system.threading.tasks.task task) [0x0002e] in /library/frameworks/xamarin.ios.framework/versions/10.4.0.128/src/mono/mcs/class/referencesource/mscorlib/system/runtime/compilerservices/taskawaiter.cs:156 @ system.runtime.compilerservices.taskawaiter.validateend (system.threading.tasks.task task) [0x0000b] in /library/frameworks/xamarin.ios.framework/versions/10.4.0.128/src/mono/mcs/class/referencesource/mscorlib/system/runtime/compilerservices/taskawaiter.cs:128 @ system.runtime.compilerservices.configuredtaskawaitable`1+configuredtaskawaiter[tresult].getresult () [0x00000] in /library/frameworks/xamarin.ios.framework/versions/10.4.0.128/src/mono/mcs/class/referencesource/mscorlib/system/runtime/compilerservices/taskawaiter.cs:535 @ system.net.http.httpclient+c__async0.movenext () [0x000a9] in /library/frameworks/xamarin.ios.framework/versions/10.4.0.128/src/mono/mcs/class/system.net.http/system.net.http/httpclient.cs:276

--- end of stack trace previous location exception thrown --- @ system.runtime.exceptionservices.exceptiondispatchinfo.throw () [0x0000c] in /library/frameworks/xamarin.ios.framework/versions/10.4.0.128/src/mono/mcs/class/referencesource/mscorlib/system/runtime/exceptionservices/exceptionservicescommon.cs:143 @ system.runtime.compilerservices.taskawaiter.throwfornonsuccess (system.threading.tasks.task task) [0x00027] in /library/frameworks/xamarin.ios.framework/versions/10.4.0.128/src/mono/mcs/class/referencesource/mscorlib/system/runtime/compilerservices/taskawaiter.cs:176 @ system.runtime.compilerservices.taskawaiter.handlenonsuccessanddebuggernotification (system.threading.tasks.task task) [0x0002e] in /library/frameworks/xamarin.ios.framework/versions/10.4.0.128/src/mono/mcs/class/referencesource/mscorlib/system/runtime/compilerservices/taskawaiter.cs:156 @ system.runtime.compilerservices.taskawaiter.validateend (system.threading.tasks.task task) [0x0000b] in /library/frameworks/xamarin.ios.framework/versions/10.4.0.128/src/mono/mcs/class/referencesource/mscorlib/system/runtime/compilerservices/taskawaiter.cs:128 @ system.runtime.compilerservices.taskawaiter`1[tresult].getresult () [0x00000] in /library/frameworks/xamarin.ios.framework/versions/10.4.0.128/src/mono/mcs/class/referencesource/mscorlib/system/runtime/compilerservices/taskawaiter.cs:357 @ xamarinmo.services.tokenservice+d__4.movenext () [0x000e3] in c:\users\johns\onedrive\sources\winman api , xamain app\xamarinmo\xamarinmo\xamarinmo\services\tokenservice.cs:67 }

after many many hours, found solution:

it can fixed changing tls setting under project properties mono instead of apple. due bug in new apple tls default setting ssl/tls on ios.


Comments

Popular posts from this blog

Is there a better way to structure post methods in Class Based Views -

performance - Why is XCHG reg, reg a 3 micro-op instruction on modern Intel architectures? -

jquery - Responsive Navbar with Sub Navbar -