2

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

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

有没有人知道为什么会这样?在我们排除它之前,我们需要断言它169.254.2.2不可能被用作一个有效的端点。

哦,如果有帮助,C# 客户端169.254.2.1在 ActiveSync 连接后通过 DHCP 获得 IP。

4

2 回答 2

1

我想到的第一个问题,尤其是当我看到您正在使用 DCHP 时,是来自 DHCP 服务器的 IP 租用时间即将到期,而 CXF 服务器必须等待 DCHP 服务器发出新的租约.

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

于 2012-01-11T21:29:56.087 回答
0

我发现了这个问题的原因,但我觉得回答不好,因为我怀疑其他人有没有办法猜到这是问题所在:

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

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

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

于 2012-01-31T01:09:53.383 回答