当访问VPN上的Web服务时,WinJS xhr返回0

时间:2015-10-21 05:01:05

标签: xmlhttprequest cors winjs

我试图在所有论坛上搜索相关答案,但实际上对我们来说还没有任何效果。感谢有人能在这方面真正帮助我们,因为我们将在几天内即将发布

我们创建了一个基于WinJS的Windows桌面应用程序,该应用程序通过VPN /或专用APN配置消耗基于Oracle SOA的Web服务(基于http)

每当我们尝试访问服务时,我们得到一个状态0作为xhr的返回值(我假设与响应相关的是null)&在

中得到这个

WinJS.xhr:网络错误0x2efd,由于错误00002efd无法完成操作

我们尝试使用各种建议的选项,例如在清单文件中允许私有网络(假设这是一个CORS问题),但无济于事

"专用网络(家庭和服务器)"

<Capabilities>
  <Capability Name="internetClient" />
  <Capability Name="privateNetworkClientServer" />
</Capabilities>

我们一直在使用Fiddler(环回选项),但这只是暂时的,有人可以建议,我们可能会缺少什么,或者根据他们的经验告诉我们我们的方法可能有什么问题。

非常感谢任何帮助。

1 个答案:

答案 0 :(得分:0)

<强>背景

当您无法访问互联网时,

WinJS.XHR会返回response.status === 0。不幸的是,这在 WinJS 3.0

中被视为成功
if ((req.status >= 200 && req.status < 300) || req.status === 0) {
   schedule(c, req, priority);
} else {
   schedule(e, req, priority);
}

WinJS 4.x 中,他们更改了条件,因此:

if ((req.status >= 200 && req.status < 300) || 
(req.status === 0 && options.url.substr(0,7) === 'file://')) {
   schedule(c, req, priority);
} else {
   schedule(e, req, priority);
}

以及最近的4.4:

if ((req.status >= 200 && req.status < 300) || (isLocalRequest && req.status === 0)) {
   schedule(c, req, priority);
} else {
   schedule(e, req, priority);
}

请参阅:https://github.com/winjs/winjs/commit/8d44a3ee4105aa05fb69cd82943b9c07500bf523

这意味着在您的成功承诺回调中,您将收到空回复。

WinJS.XHR({[...]}).then((response: XMLHttpRequest) => {
   // Here response.status === 0 instead of error in the error handler!!!
}, (error) => console.log(error));

<强>解决方案

  1. 使用Charles Proxy(也许Fiddler没有显示正确的回答)来查看您的请求后面发生的事情。很可能失败了。
  2. 根据您使用的WinJS版本: 一个。成功处理程序并在response.status ==== 0时输出响应 湾错误处理程序,与上面相同。