System.Net.WebException:基础连接已关闭:远程主机

时间:2017-10-11 19:10:32

标签: c# .net winforms wcf webclient

我已经看到了其他一些线索,但尚未找到解决方案。从调试模式运行我的C#Windows From时,我可以使用WebClient从网页中读取数据。但是,只要我为应用程序创建可执行文件,我就无法从网页中读取数据。这是我得到的例外:

System.Net.WebException:底层连接已关闭:发送时发生意外错误。 ---> System.IO.IOException:无法从传输连接读取数据:远程主机强制关闭现有连接。 ---> System.Net.Sockets.SocketException:远程主机强制关闭现有连接  在System.Net.Sockets.Socket.Receive(Byte []缓冲区,Int32偏移量,Int32大小,SocketFlags socketFlags)  在System.Net.Sockets.NetworkStream.Read(Byte []缓冲区,Int32偏移量,Int32大小)

---内部异常堆栈跟踪结束---

以下是我正在使用的代码片段:

WebClient webClient = new WebClient();
webClient.UseDefaultCredentials = true;
webClient.Proxy.Credentials = CredentialCache.DefaultCredentials;
webClient.Headers.Add("user-agent", "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2228.0 Safari/537.36");
string page = webClient.DownloadString(webPath + manPartNum);

就像我之前说过的,我能够在Visual Studio的调试模式下正常工作,但是一旦我创建了可执行文件,我就再也无法从网页上读取。任何帮助,将不胜感激。可能导致这个问题的原因是什么?

2 个答案:

答案 0 :(得分:0)

另一种方法是使用HttpWebRequest代替:

String responseFromServer = null;
var url = webPath + manPartNum;
var request = (HttpWebRequest)HttpWebRequest.Create(urlPing);
request.UserAgent = "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2228.0 Safari/537.36";
var response = (HttpWebResponse)request.GetResponse();
if (response.StatusCode == HttpStatusCode.OK)
{
    using (var dataStream = response.GetResponseStream())
    {
        using (var reader = new StreamReader(dataStream))
            responseFromServer = reader.ReadToEnd();
    }
}

if (!String.IsNullOrEmpty(responseFromServer))
{
}

除非你真的"登录"在页面中,您可能不需要使用WebClient。如果您只需要请求页面响应,那么这应该避免所有这些身份验证问题。

答案 1 :(得分:0)

经过更多研究后,我能够确定我尝试访问的网站具有OAuth 2.0身份验证和授权。看起来我必须在公司注册并使用他们的API通过我的应用程序访问他们的网站。希望这有助于其他人。