Skip to main content
 首页 » 编程设计

c#之HttpWebRequest:无法连接到远程服务器

2024年01月02日42yyy_WW

我开发了连接到服务器并从中获取不同信息的客户端应用程序。它是多线程应用程序。当我用几个线程启动它时,它工作得很好。 直到它开始抛出异常并显示以下消息:

“无法连接到远程服务器”

我使用了 TCPView,但找不到有关我的客户端应用程序的任何信息。因此,当它开始返回“无法连接”时,它甚至不会打开任何 http 连接...

我怎样才能弄清楚为什么它不打开连接?

谢谢,

编辑:

这是我在多线程中用来获取页面内容的代码:

    HttpWebResponse response = null; 
        Stream resStream = null; 
        StreamReader reader = null; 
        string res = "";             
        try 
        { 
            HttpWebRequest request = (HttpWebRequest) 
                WebRequest.Create(requestUrl); 
            if (cookies_ == null) 
            { 
                cookies_ = new CookieContainer(); 
            } 
            request.Timeout = timeoutVal_; 
            request.ReadWriteTimeout = timeoutVal_ * 2; 
            request.KeepAlive = false; 
 
            if (bUseCookies) 
            { 
                request.CookieContainer = cookies_; 
            } 
 
            // execute the request 
            response = (HttpWebResponse) 
                request.GetResponse(); 
 
            resStream = response.GetResponseStream(); 
            reader = new StreamReader(resStream); 
            res = reader.ReadToEnd(); 
        } 
        catch (Exception ex) 
        { 
            throw new Exception(siteToken + " " + ex.Message); 
        } 
        finally 
        { 
            if (response != null) 
                response.Close(); 
 
            if (resStream != null) 
                resStream.Close(); 
 
            if (reader != null) 
            { 
                reader.Close(); 
            } 
        } 
 
        return res; 

几分钟后线程进入循环并出现超时异常或无法连接到服务器。

奇怪的是,如果我启动 Fiddler,连接会重新激活并且线程会继续工作一段时间。 Fiddler 如何解决这个问题?

请您参考如下方法:

您可能正在通过代理连接互联网,请检查您的 IE 局域网设置。从 c# 你需要添加代理设置。

    var request = (HttpWebRequest)WebRequest.CreateHttp(url); 
                    WebProxy proxy = new WebProxy("http://127.0.0.1:8888", true); 
                    proxy.Credentials = new NetworkCredential("user", "pwd", "ADomain"); 
                    request.Proxy = proxy; 
                    request.Credentials = System.Net.CredentialCache.DefaultNetworkCredentials; 
 
                    request.Timeout = 1000 * 60 * 5; 
                    request.Method = method; 
                    request.Headers.Add("DAUTH", dauth);request.GetResponse();