我有一个使用.net CF 3.5为Windows mobile和windows ce应用程序编写的应用程序。它使用SOAP Web服务从我们的服务器下载数据并将数据上传到我们的服务器。我们使用自动生成的Web引用来调用服务。
通常,如果无法从服务器获得响应,对Web服务的调用将会超时,但有时对Web服务的调用将永远不会超时并将无限期挂起。我可以通过模拟50%的数据包丢失来合理地发生这种情况。
为了解决这个问题,我一直在创建一个单独的线程来运行调用,并在4分钟后中止线程。我不能在Web引用对象上调用abort(),因为它也会无限期地挂起。这解决了当前的问题,但是,每次我这样做都会泄漏内存,如果我检查进程中的线程,每次都会有两个以上的线程。最终,应用程序将耗尽所有系统内存并将崩溃。
据我所知,Web引用使用的HttpWebRequest使用自己的线程池来运行请求,并且每次这些请求挂起时都会创建另外两个线程来运行新请求。
我在运行不同版本的Windows Mobile和Windows CE的许多Motorola和Intermec设备上测试了这一点,并且在所有这些设备上都存在同样的问题。
有谁知道如何阻止webservice调用无限期挂起?