我有一个需要连接到远程 SAP 服务器的 WPF C# 应用程序。我在两台计算机(同一网络)上运行该应用程序,并且我知道服务器是可访问的。
起初,计算机 A 可以使用 Web 请求正常连接(经过多次尝试,它们都可以正常工作)。随机(似乎;我无法复制),所有 Web 请求都将失败,并显示消息“无法连接到远程服务器”(类型 System.Net.WebException)。在浏览器中导航到 URL 加载正常;只有应用程序无法连接。引发异常的方法是 HttpWebRequest.GetRequestStream。
即使多次重启应用程序,所有 HttpWebRequests 仍然无法连接。我们有多个 SAP 服务器,尝试连接到其中任何一个都会得到相同的结果。同时,计算机B(我的开发机器)上的应用程序仍然可以毫无问题地连接到任何服务器。只有在完全重新启动计算机 A 后,它才能再次连接。
到目前为止,这已经发生在两台不同的计算机上。这两次,解决它的唯一方法是重新启动计算机。
这是一些代码:
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
request.Method = "POST";
request.ContentType = "text/xml; charset=utf-8";
request.ContentLength = contentLength;
request.Headers.Add("Authorization", GetAuthHeader());
request.Timeout = GetTimeout();
Stream post = request.GetRequestStream();//this line throws the exception
//...write to stream...
post.Close();
编辑:忽略了响应部分:
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
Stream responsedata = response.GetResponseStream();
//...read all response data...
if (responsedata != null)
responsedata.Close();
Edit2:所以我注释掉了所有对 Close 的调用,并提出了几十个请求。我还删除了获取响应的代码并提出了更多请求。在这些测试中,我没有收到任何异常,并且一切正常。
除了这些结果,我可以理解这样的事情可能会破坏我的程序,但我不明白为什么在重新启动程序或尝试联系不同的远程服务器后它仍然会被破坏。看起来 .NET 框架中出现了一些问题,除非我重新启动整个机器,否则它无法自行解决。