TCP连接阶段失败(从JAVA客户端向C#-服务器调用web服务)

TCP连接阶段失败(从JAVA客户端向C#-服务器调用web服务),c#,java,web-services,tcp,connection,C#,Java,Web Services,Tcp,Connection,因此,我有一个Android应用程序调用Web服务(C#),我从一开始就注意到,它通常(但不是一直)返回答案非常慢,或者请求完全失败 起初我认为这与后端代码有关,即服务器处理请求和返回结果需要很长时间。我现在排除了这种可能性,因为处理过程只需要大约40毫秒。然而,我注意到webservice代码有时不被调用,或者执行代码需要很长时间 所以我启动了Wireshark并查看了传输的数据包,发现了我认为有故障的TCP连接阶段。下面的第一张图片显示连接有故障 看起来是这样的: 客户:SYN 服务器:同步

因此,我有一个Android应用程序调用Web服务(C#),我从一开始就注意到,它通常(但不是一直)返回答案非常慢,或者请求完全失败

起初我认为这与后端代码有关,即服务器处理请求和返回结果需要很长时间。我现在排除了这种可能性,因为处理过程只需要大约40毫秒。然而,我注意到webservice代码有时不被调用,或者执行代码需要很长时间

所以我启动了Wireshark并查看了传输的数据包,发现了我认为有故障的TCP连接阶段。下面的第一张图片显示连接有故障

看起来是这样的:
客户:SYN
服务器:同步确认
客户端:SYN ACK

如图所示:

但它应该是这样的:
客户:SYN
服务器:同步,确认
客户:确认

当我再次尝试时,只需再次从Android应用程序调用WebService(无需重新启动或任何操作),我就会得到正确的步骤和预期的响应。以下是一张来自该网站的Wireshark图片:

我很确定这就是我所看到的“非常慢的Web服务”的问题所在,因为在收到答案之前通常会有很长的延迟,有时(如第一张图片中所示)根本没有响应。Wireshark还显示,它只需“暂停”回答10-20秒,然后才能真正访问web服务代码

没有网络问题,因为这都是在本地WLAN上运行的(计算机充当热点,没有其他人连接到它)。Android设备是运行2.3.3的三星S2,Web服务是运行自托管服务主机的.NET 3.5

有什么想法吗?

----其他信息-----

下面是我如何从JAVA代码调用我的Web服务(方法是GET):

这是在.NET中定义web服务方法的方式:

[OperationContract]
[WebGet(UriTemplate = "PutMessage?jsonString={jsonString}", BodyStyle = WebMessageBodyStyle.Bare, ResponseFormat= WebMessageFormat.Json)]
string PutMessage(string jsonString);

如果你看得更近一点,你实际上看到的是客户端没有从服务器获取任何数据包

Client: SYN
Server: SYN ACK (ACK, never reaches the client)
Server: SYN ACK (Retransmission of the first ACK, also lost. )
Client: SYN (Retransmission, it does not know the server received the first SYN)
Server: SYN ACK (ACK on the SYN from the client, once again lost)
Client: SYN (Retransmission since it *still* does not know the server got the SYN)

换言之,如果客户端没有收到任何服务器数据包,则从双方进行完全正常的重新传输。

是的,传输丢失是显而易见的。问题是这种情况怎么会如此频繁地发生,而重传却一直失败。在下一次尝试中,一切正常。这似乎是随机的。。。
Client: SYN
Server: SYN ACK (ACK, never reaches the client)
Server: SYN ACK (Retransmission of the first ACK, also lost. )
Client: SYN (Retransmission, it does not know the server received the first SYN)
Server: SYN ACK (ACK on the SYN from the client, once again lost)
Client: SYN (Retransmission since it *still* does not know the server got the SYN)