RNDIS丢失了连接/延迟问题

时间:2011-12-20 19:41:35

标签: cxf activesync rndis

我们有一个用C#编写的临时SOAP客户端,通过Windows移动设备连接桌面上的CXF服务。当通过ActiveSync连接此设备时,它会为RNDIS连接创建一个虚拟适配器。此虚拟适配器为主机169.254.2.2分配网关IP。

当我们尝试通过与主机名或主机的IP设置的连接作为C#客户端中的地址时,一切都运行良好。但是,当我们将IP设置为RNDIS网关(169.254.2.2)时,连接会在服务器端定期丢失。 CXF服务不断尝试连接,并最终成功,但这会导致连接速度大幅下降。我们在移动C#端的日志中没有报告错误,仅在CXF服务器上报告。

有没有人知道为什么会发生这种情况?我们需要声明169.254.2.2在我们排除它之前不可能用作有效的端点。

哦,如果有帮助,在ActiveSync连接后,C#客户端通过DHCP被授予IP 169.254.2.1

2 个答案:

答案 0 :(得分:1)

我头脑中的第一个问题,特别是一旦我看到你正在使用DCHP,就是DHCP服务器上的IP租约时间到期,CXF服务器必须等待DCHP服务器发出新租约。

如果您知道IP不会更改,请尝试延长DCHP租约,如果可以,请使用静态IP。这至少可以消除这一点。

答案 1 :(得分:0)

我找到了原因,但我觉得回答不好因为我怀疑别人怎么会猜到这就是问题所在:

在我们的CXF服务器上,我们调用InetAddress.getHostName(),它基本上对从C#客户端发送的请求进行反向DNS查找。

当使用ActiveSync IP地址时,169.254.2.1(当然)的DNS中没有条目,因此java类会挂起,直到方法超时(大约需要20秒才能写入响应) C#客户端)。每次请求20秒,这导致大量减速和连接错误丢失。

我们通过将调用移动到在半秒后强制完成的执行程序线程来修复此问题。因为它在另一个线程中,减速变得不存在。很高兴有这个结束!