我正在处理相当烦人的问题,我找不到任何解决办法。
我正在调用WebRequest Connection,在Unity C#下工作;
PORT
它向在Windows上运行的服务器发送调用;一切正常。但是,如果服务器未关闭,则连接会等待永久响应。所以解决这个问题,我添加了超时:
IAsyncResult startingTheCall = webRequest.BeginGetRequestStream(new AsyncCallback(GetRequestStreamCallback), parameters);
超时工作也很好;问题是,如果我曾经触发超时(通过关闭服务器),然后再次启用服务器,无论如何,BeginGetRequestStream都不会到达服务器,直到我重新启动应用程序。
我想,也许失败了,我没有正确清理连接。所以我确实在超时内设置了这个清理程序:
ThreadPool.RegisterWaitForSingleObject(startingTheCall.AsyncWaitHandle, new WaitOrTimerCallback(TimeoutCallbackOfFirstStream), parameters, 10000, true);
我中止请求,关闭流。仍然,在第一次失败后,服务器将永远不会发送响应或获取流消息,直到我重新启动应用程序。就像它完全被阻挡一样。
有没有人有这种行为?