0

我有一个在 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,埃迪

4

0 回答 0