3

我正在处理非常烦人的问题,我找不到任何解决方案。

我正在调用 WebRequest Connection,在 Unity C# 下工作;

IAsyncResult startingTheCall =  webRequest.BeginGetRequestStream(new      AsyncCallback(GetRequestStreamCallback), parameters);

它向运行在 Windows 上的服务器发送调用;一切正常。但是,如果服务器未关闭,则连接将等待响应永恒。所以解决这个问题,我添加超时:

ThreadPool.RegisterWaitForSingleObject(startingTheCall.AsyncWaitHandle, new WaitOrTimerCallback(TimeoutCallbackOfFirstStream), parameters, 10000, true);

超时也很好用;问题是,如果我触发超时(通过关闭服务器),然后再次启用服务器,BeginGetRequestStream 无论如何都不会到达服务器,直到我重新启动应用程序。

我想,也许在失败时,我没有正确清理连接。所以我确实在超时内设置了这个清洁程序:

        ArrayList unbox = (ArrayList)state;
        HttpWebRequest request = (HttpWebRequest)unbox[1];
        IAsyncResult asynchronousResult = (IAsyncResult)unbox[6];
        Stream postStream = request.EndGetRequestStream(asynchronousResult);
        postStream.Close();
        request.Abort();

我中止请求,关闭流。尽管如此,在第一次失败之后,服务器将永远不会发送响应或获取流消息,直到我重新启动应用程序。就像它被完全封锁一样。

有人有过这种行为吗?

4

0 回答 0