当我尝试使用WebClient
点击单独的asp页面从邮政编码下载完整地址详细信息时,我一直收到错误。
The underlying connection was closed: An unexpected error occurred on a send.
只有在服务器上才会发生这种情况。不仅如此,当我将URL粘贴到浏览器中时,它完美地运行。这可能是防火墙设置吗?
以下是我正在使用的代码(取自here上的其他帖子)
using (CookieAwareWebClient WC = new CookieAwareWebClient())
{
System.Net.ServicePointManager.SecurityProtocol = System.Net.SecurityProtocolType.Ssl3;
string data = WC.DownloadString("https://www.myUrl.com/postcode.asp?postcode=" + postcode + "&houseNumber=" + Server.HtmlEncode(txtHouseNumber.Text));
}
最初我只是使用它,结果相同:
WebClient client = new WebClient();
string address = "https://www.myUrl.com/postcode.asp?postcode=" + postcode + "&houseNumber=" + Server.HtmlEncode(txtHouseNumber.Text);
string data = client.DownloadString(address);
该应用程序使用.NET 4 / C#构建,并使用iis6在Windows Server 2003上托管。
如果这是防火墙或安全设置,它会是什么?如果没有,对原因或解决方法的任何想法?非常感谢
更新 - ########################
好的,我也尝试过使用HttpWebRequest,我在第二行遇到错误:
HttpWebRequest webrequest = (HttpWebRequest)WebRequest.Create(new Uri("https://www.myUrl.com/postcode.asp?postcode=AZ11ZA&houseNumber=1"));
HttpWebResponse webresponse = (HttpWebResponse)webrequest.GetResponse();
错误消息包含:
System.Threading.Thread.AbortInternal() at System.Threading.Thread.Abort(Object stateInfo) at System.Web.HttpResponse.End() at MyApp.MyPage.WebClientTest()
不知道这对任何人都有帮助......
答案 0 :(得分:3)
取自Jamby在回答评论中的回答:
您是否尝试过在http而不是https中访问它?
简单。感谢
答案 1 :(得分:2)
只是以为我会添加这个,它对我有用。某些站点或防火墙按其版本阻止SSL或TLS连接。最近,这意味着任何低于1.2的版本。因此,在从网络下载文件之前,我进行了以下设置:
using (WebClient webClient = new WebClient())
{
ServicePointManager.SecurityProtocol = (SecurityProtocolType)3072;
ServicePointManager.DefaultConnectionLimit = 9999;
log.Info("Downloading file");
webClient.DownloadFile("https://somesitedomain/somefile.csv", outfile);
}
使用的默认TLS版本可能取决于使用的.NET框架,并且.NET 4.0似乎缺少枚举(因此3072)。较新的版本应该可以执行
之类的操作SecurityProtocolType.Tls | SecurityProtocolType.Tls11 | SecurityProtocolType.Tls12
有关更多信息,请参见here。