现在情况是这样的。只有少数的电脑出现了这个问题。我就写了几行get请求的代码,源码如下:
static void Main(string[] args)
{
string url = "http://xxx[此处是url]";
string para = "[此处是参数]";
string ret = HttpGet(url, para);
Console.WriteLine(ret);
Console.ReadLine();
}
public static string HttpGet(string Url, string postDataStr)
{
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(Url + (postDataStr == "" ? "" : "?") + postDataStr);
request.Method = "GET";
request.ContentType = "text/html;charset=UTF-8";
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
Stream myResponseStream = response.GetResponseStream();
StreamReader myStreamReader = new StreamReader(myResponseStream, Encoding.GetEncoding("utf-8"));
string retString = myStreamReader.ReadToEnd();
myStreamReader.Close();
myResponseStream.Close();
return retString;
}
}
这个程序在绝大数windows计算机上都可以正常执行。并成功发起请求。但是在少数计算机上,会出现异常:
在异常stack里可以看到 【无法加载或初始化请求的服务提供程序】。这台电脑的环境是windows 。net也都是一样的4.0版本。但是不知道是出现了什么问题。出问题的计算机是可以正常上外网的在浏览器里,或者用python发请求都可以正常发出去。就是c#不行。不知道为什么,希望有经验的大佬们帮帮忙啊~~
贴下堆栈信息,我感觉像.net framework有问题啊
看了下,你好像是盗版用户的受害者,激活下系统
嗯 好的
首先去使用restsharp,这样极大的简化代码,减少新手出错的过程。
var client = new RestClient(BaseUri);
var request = new RestRequest(RelativeUri);
var response = client.ExecuteRequest(request);
Console.WriteLine(response.Content);
非常感谢,但是现在项目都是用的老代码。客户那边着急用。
问题可能是 response 没有关闭引起的,在发生异常时 myStreamReader 与 myResponseStream 也不会被关闭,建议修改为下面的代码
var request = (HttpWebRequest)WebRequest.Create(Url + (postDataStr == "" ? "" : "?") + postDataStr); request.Method = "GET"; request.ContentType = "text/html;charset=UTF-8"; using (var response = (HttpWebResponse)request.GetResponse()) { using (var myStreamReader = new StreamReader(response.GetResponseStream(), Encoding.GetEncoding("utf-8"))) { return myStreamReader.ReadToEnd(); } }
感谢大佬。但是这个应该是个环境问题。因为上述的代码在99%的电脑上都是可以执行的。
不考虑服务器端的问题。是客户端请求发不出去。
@阿卡林: 可能是 response 没有关闭引起所占用的 tcp 连接没被释放,从而达到了 WebRequest 的连接数限制
@dudu: 恩好滴 我去试试喵
需要重置那个winsock相关的服务,重置前还需要关闭360等杀毒软件...
请问最后解决了吗 我也遇到了