iOS9上Safari未连接到websocket的单个案例



我有一个问题,一部(至少目前(iPhone无法连接到websocket。不幸的是,我无法访问该设备,目前无法在其上运行更多测试,因此没有适当的网络转储或任何其他更深层次的调试可用。目前也无法在其他网络连接上进行测试。

Chrome 45、Firefox 40、Android上的Chrome 45(许多设备(、iOS9上的Safari(设备A(、iOS8上的Safari(设备B(等都能完美工作。没有错误,没有中断,什么都没有。很管用。

我的websocket服务器运行在IIS 8.5/AASP.NET上,以典型的方式创建为API控制器(PullHandler是一个异步任务while,直到连接关闭(

if (HttpContext.Current.IsWebSocketRequest)
{
    HttpContext.Current.AcceptWebSocketRequest(PullHandler);
    return Request.CreateResponse(HttpStatusCode.SwitchingProtocols);
}
else
    return Request.CreateErrorResponse(HttpStatusCode.BadRequest, "Bad request");

这不应该引起任何问题,尤其是这个问题。客户端JavaScript也是简单的

new WebSocket("ws://" + window.location.host + "/api/Some/Endpoint);

我使用的是纯HTTP,没有SSL/TLS。

当尝试使用iOS9的iPhone设备X(13A344,不完全确定是哪种型号(时,它就是无法连接。我还在使用SignalR,它会自动进入该设备上的longPolling传输。与其他人一样,它在webSockets传输上运行得很好。

对UK Orange 3G连接的快速测试显示,在我的HTTP日志中,出于某种原因,对我的端点的请求已经转到了另一个分支,就像有什么东西把升级头拿走了一样。

GET/api/Somet/Endpoint 80-Mozilla/5.0+(iPhone;+CPU+iPhone+OS+9_0+like+Mac+OS+X(+AppleWebKit/601.46+(KHTML,+like+Gecko(+Version/9.0+Mobile/13A344+Safari/601.1-400

如果请求不是正确的websocket请求,则状态400清楚地显示了我的代码正在发送的错误请求。我不知道是否有一些透明的代理,这可以解释这一点。收到了400的回复,没有任何延误。

但这也是通过同一设备上的wifi造成的问题。同样,一台带有OS X和Safari的笔记本电脑在连接SignalR和我的websocket服务器的同一个wifi上没有问题。只有iPhone出现了问题。在wifi上,我没有在日志上尝试连接,SignalR也立即进入了longPolling传输。无线网络显然使用了维珍传媒基于IP地址的网络。

在wifi上,首先有一个公开活动。然后,在一段时间之后,存在状态为1006的关闭事件,这是没有关闭分组的异常终止。我的代码尝试再次连接,同样的情况也发生了。奇怪的是,web服务器上没有日志条目,但这可能只是Safari发布打开事件的方式,即使没有建立实际连接,并且在超时后发送关闭事件。

该设备不应该设置任何代理,其他浏览工作没有问题。不幸的是,我无法获得任何其他网站的信息,这些网站会使用该设备上工作或不工作的websocket。

有人遇到过这种情况吗?我确实理解3G可能只是一个行为不端的代理,但不能用它来解释wifi问题。

只想为这个问题扩展一下范围。

我有一个在模拟器中运行良好的应用程序。应用程序同时具有http Jason IO和web套接字IO。

现在我可以瞄准我的iPhone,而不是模拟器。iPhone上的应用程序成功地完成了http Json的功能,但没有完成网络套接字的功能。

虽然我没有使用safari和js,但我的症状与你的非常相似。我正在使用Xcode 7生成针对使用iOS 9.0的iPhone 5的代码。

相关内容

  • 没有找到相关文章

最新更新