我有一个在 Windows 10 Enterprise 平板电脑上运行的 Windows 8.1 应用程序。此应用程序正在调用在远程服务器上运行的 ASP.NET RESTful Web API。Web API 正在使用 Windows 身份验证。我在平板电脑上安装了 Fiddler,我可以调用 Web API,从而证明 Web API 可供外界使用。
这是我用来拨打电话的代码:
if (WebApiAuthClientHandler == null)
{
WebApiAuthClientHandler = new HttpClientHandler()
{
Credentials = CredentialCache.DefaultNetworkCredentials,
ClientCertificateOptions = ClientCertificateOption.Automatic
};
}
if (WebApiHttpClient == null)
{
WebApiHttpClient = new HttpClient(WebApiAuthClientHandler)
{
BaseAddress = new Uri(_serviceUri, UriKind.Absolute),
Timeout = new TimeSpan(0, 0, 150)
};
WebApiHttpClient.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
}
HttpResponseMessage response = await WebApiHttpClient.GetAsync("api/user", HttpCompletionOption.ResponseContentRead).ConfigureAwait(continueOnCapturedContext: false);
var userLoginInfo = await response.Content.ReadAsAsync<UserLoginInformation>();
其中 WebApiAuthClientHandler 和 WebApiHttpClient 是我班级的静态成员。
_serviceUri 是根据应用程序的设置构建的,并生成格式良好的绝对 URI,例如“ http://10.120.4.0:5000 ”。就像我说的,如果我使用 Fiddler 向 URL“ http://10.120.4.0:5000/api/user ”发出 GET HTTP 命令,我会在平板电脑上得到预期的响应。
问题是我的 GetAsync 调用在大约 21 秒后引发异常。这不是超时,因为如您所见,我将超时设置为 150 秒(我知道这太多了,但现在我只是想消除所有潜在的原因)。抛出的异常类型为 HttpRequestException 并且几条嵌套消息通知我“无法连接到远程服务器”,因为“连接尝试失败,因为连接方在一段时间后没有正确响应,或者建立的连接失败因为连接的主机未能响应 127.0.0.1:8888"
这最后一部分真的让我感到困惑,因为我没有尝试在本地而是远程访问 Web API,并传递了正确的远程 URL 地址。
这个问题困扰了我将近两个星期,我仍然没有解决它。任何建议将不胜感激。
TIA,埃迪