非常奇怪的问题(所有代码都在PCL中)。
当我打电话给等待客户端时。PostAsync()
针对 Web 服务 (API's),我得到了 TaskCanceledException
。
需要注意的几点:
这在Android设备上运行良好。只有当我在iOS上运行应用程序时才会发生这种情况,但。。。
…更奇怪的是,我可以让它在iOS上运行,如果我使用不同的(物理)服务器来托管我用等待客户端查询的API。PostAsync()
。
所以,
更奇怪的是,两台服务器运行完全相同的网络服务,只有0个区别,唯一的区别是服务器位于不同的站点,客户端不同。所以故障不在于被查询的网络服务抛出超时或取消请求。
两台服务器都有有效的(可信的)SSL证书,因此这不是SSL相关的问题。
我卡住了。我已经尝试了< code>ModernHttpClient和增加< code >客户端。TimeSpan。
我还检查了<code>ex.CancellationToken。IsCancellationRequested</code>,这是错误的,所以可以很安全地假设这是一段“超时”时间。然而,当我针对该API手动运行PostMan发出的Post请求时,很明显Web服务工作正常(没有超时)。
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 already stored and 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[]
{
// this needs to be 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;
}
}
}
例外详情:
{系统。threading . tasks . taskcanceledexception:任务被取消。< br >在系统中。runtime . compiler services . taska waiter . throwfornonsuccess(System。threading . tasks . task task)[0x 0002d]在/Library/Frameworks/xa marin . IOs . framework/Versions/10 . 4 . 0 . 128/src/mono/MCS/class/reference source/mscorlib/System/runtime/compiler services/taskawaiter . cs:179 at System。runtime . compiler services . taskawaiter . handlenonsuccessanddebuggernotification(System。threading . tasks . task task)[0x 0002 e]在/Library/Frameworks/xa marin . IOs . framework/Versions/10 . 4 . 0 . 128/src/mono/MCS/class/reference source/mscorlib/System/runtime/compiler services/taskawaiter . cs:156 at System。runtime . compiler services . taska waiter . validate end(System。threading . tasks . task task)[0x 0000 b]在/Library/Frameworks/xa marin . IOs . framework/Versions/10 . 4 . 0 . 128/src/mono/MCS/class/reference source/mscorlib/System/runtime/compiler services/taskawaiter . cs:128 at System。runtime . compiler services . taska waiter ` 1[t result]。/Library/Frameworks/xa marin . IOs . framework/Versions/10 . 4 . 0 . 128/src/mono/MCS/class/reference source/mscorlib/System/runtime/compiler services/taskawaiter . cs:357 at System。http . httpclienthandler c _ _ async 0。/Library/Frameworks/xa marin . IOs . framework/Versions/10 . 4 . 0 . 128/src/mono/MCS/class/System中的MoveNext () [0x004c1]。Net.Http/System.Net.Http/HttpClientHandler.cs:391
-从引发异常的前一个位置开始的堆栈跟踪结束-在系统中。/Library/Frameworks/xa marin . IOs . framework/Versions/10 . 4 . 0 . 128/src/mono/MCS/class/reference source/mscorlib/System/runtime/exception services/exceptionservicescommon . cs:143 at System .runtime . compiler services . taska waiter . throwfornonsuccess(System。threading . tasks . task task)[0x 00027]在/Library/Frameworks/xa marin . IOs . framework/Versions/10 . 4 . 0 . 128/src/mono/MCS/class/reference source/mscorlib/System/runtime/compiler services/taskawaiter . cs:176 at System。runtime . compiler services . taskawaiter . handlenonsuccessanddebuggernotification(System。threading . tasks . task task)[0x 0002 e]在/Library/Frameworks/xa marin . IOs . framework/Versions/10 . 4 . 0 . 128/src/mono/MCS/class/reference source/mscorlib/System/runtime/compiler services/taskawaiter . cs:156 at System。runtime . compiler services . taska waiter . validate end(System。threading . tasks . task task)[0x 0000 b]在/Library/Frameworks/xa marin . IOs . framework/Versions/10 . 4 . 0 . 128/src/mono/MCS/class/reference source/mscorlib/System/runtime/compiler services/taskawaiter . cs:128 at System。runtime . compiler services . configuredtaskawaitable ` 1 ConfiguredTaskAwaiter[t result]。/Library/Frameworks/xa marin . IOs . framework/Versions/10 . 4 . 0 . 128/src/mono/MCS/class/reference source/mscorlib/System/runtime/compiler services/taskawaiter . cs:535 at System。HttpClient c__async0。/Library/Frameworks/xa marin . IOs . framework/Versions/10 . 4 . 0 . 128/src/mono/MCS/class/System中的MoveNext () [0x000a9]。Net.Http/System.Net.Http/HttpClient.cs:276
-从引发异常的前一个位置开始的堆栈跟踪结束-在系统中。/Library/Frameworks/xa marin . IOs . framework/Versions/10 . 4 . 0 . 128/src/mono/MCS/class/reference source/mscorlib/System/runtime/exception services/exceptionservicescommon . cs:143 at System .runtime . compiler services . taska waiter . throwfornonsuccess(System。threading . tasks . task task)[0x 00027]在/Library/Frameworks/xa marin . IOs . framework/Versions/10 . 4 . 0 . 128/src/mono/MCS/class/reference source/mscorlib/System/runtime/compiler services/taskawaiter . cs:176 at System。runtime . compiler services . taskawaiter . handlenonsuccessanddebuggernotification(System。threading . tasks . task task)[0x 0002 e]在/Library/Frameworks/xa marin . IOs . framework/Versions/10 . 4 . 0 . 128/src/mono/MCS/class/reference source/mscorlib/System/runtime/compiler services/taskawaiter . cs:156 at System。runtime . compiler services . taska waiter . validate end(System。threading . tasks . task task)[0x 0000 b]在/Library/Frameworks/xa marin . IOs . framework/Versions/10 . 4 . 0 . 128/src/mono/MCS/class/reference source/mscorlib/System/runtime/compiler services/taskawaiter . cs:128 at System。runtime . compiler services . taska waiter ` 1[t result]。/Library/Frameworks/xa marin . IOs . framework/Versions/10 . 4 . 0 . 128/src/mono/MCS/class/reference source/mscorlib/system/runtime/compiler services/taskawaiter . cs:357 at XamarinMO。令牌服务d__4。C:\ Users \ Johns \ one drive \ Sources \ WinMan API和Xamain App \ XamarinMO \ XamarinMO \ XamarinMO \ Services \ token service . cs:67 }中的MoveNext () [0x000e3]
经过许多个小时,我找到了解决方案:
可以通过将项目属性下的 TLS 设置更改为 Mono 而不是 Apple 来修复此问题。这是由于iOS上SSL / TLS的新Apple TLS默认设置中的错误。
开发者可以使用原生bricks引擎进行渲染以及手机QQ功能的调用。 开发者也可以使用第三方引擎(cocos、laya、白鹭)进行开发。 第三方引擎的实现方式为基于bricks的webgl接口进行封装,具有较高的灵活性,但渲染性能会欠缺。 如开发者对性能要求更高,推荐使用bricks引擎的原生渲染。 注意: iOS 在手 Q 770 版本禁用了 webGL,会导致界面卡在 99% 加载界面,开发者忽
问题内容: 我正在编写一个Java应用程序,并且需要快速发现任何有线或无线本地网络上的所有其他正在运行的客户端,以便建立TCP连接。 最好的方法是什么?是否有可以做到这一点的库或代码片段? 问题答案: 我想您需要对子网中所有IP上的应用程序端口进行扫描。 到底有哪些可用IP?或者您的子网是什么? 由于网络被设计为对您的应用程序透明,因此恐怕无法确定这一点。 因此,我将使用蛮力:选择您的IP并更改最
问题内容: 我正在编写一个Java应用程序,并且需要快速发现任何有线或无线本地网络上的所有其他正在运行的客户端,以便建立TCP连接。 最好的方法是什么?是否有可以做到这一点的库或代码片段? 问题答案: 我想您需要对子网中所有IP上的应用程序端口进行扫描。 到底有哪些可用IP?或者您的子网是什么? 由于网络被设计为对您的应用程序透明,因此恐怕无法确定这一点。 因此,我将使用蛮力:选择您的IP并更改最
有时你可能需要引导客户端 Channel 从另一个 Channel。这可能发生,如果您正在编写一个代理或从其他系统需要检索数据。后一种情况是常见的,因为许多 Netty 的应用程序集成现有系统,例如 web 服务或数据库。 你当然可以创建一个新的 Bootstrap 并使用它如9.2.1节所述,这个解决方案不一定有效。至少,你需要创建另一个 EventLoop 给新客户端 Channel 的,并且
不确定这里遗漏了什么,但console.log()行打印的是“promise{}”,而不是响应中的JSON正文。 我认为我在async/await中做错了什么。 我的代码(快速): 感谢任何帮助。
我需要一些帮助来理解为什么在Eureka注册的服务会想要彼此通信,尽管没有实际运行。例如,我在尤里卡注册了服务A和服务B。如果我搞垮了服务B,那么即使服务A没有运行,它仍然会尝试与服务B进行30秒到3分钟的通信。这样做的目的是什么?有什么办法可以绕过它吗?谢谢你!