求C# Winform下用httpwebrequest进行post访问页面是出现"远程服务器返回异常: (500) 内部服务器异常。"有关问题解决方法
求C# Winform下用httpwebrequest进行post访问页面是出现"远程服务器返回错误: (500) 内部服务器错误。"问题解决办法
具体是这样的:制作了一个Winform程序,模拟浏览器登录,之后再进行一系列的操作。我是用多线程的,会有多个httpwebrequest的实例进行相关的get或post方式的请求数据;多个线程几乎都是同时获取要登录的网站,然后再用post方式登录;(请注意接下来的描述)多线程同时登录(用不同的帐号)没问题,都能成功登录,进去之后在操作(说明一下,从获取网站登录到之后的操作都设计成为全自动的)的过程中出会用到post方式请求页面,但问题就来了,这时竟然发现只有其中的两个线程能正常返回所需要的数据,而另一线程则在httpwebrequest.getrespond()上出现了异常,catch到了“远程服务器返回错误: (500) 内部服务器错误。”的提示,具体内容大致如下:
*********内容引用***********
<html>
<head>
<title>运行时错误</title>
<style>
...///html一些元素的标记,与问题完全无关,为了节省空间,故用"..."略,下类似。
</style>
</head>
<body bgcolor="white">
<span><H1>“/”应用程序中的服务器错误。<hr width=100% size=1 color=silver></H1>
<h2> <i>运行时错误</i> </h2></span>
<font face="Arial, Helvetica, Geneva, SunSans-Regular, sans-serif ">
<b> 说明: </b>服务器上出现应用程序错误。此应用程序的当前自定义错误设置禁止远程查看应用程序错误的详细信息(出于安全原因)。但可以通过在本地服务器计算机上运行的浏览器查看。
<br><br>
<b>详细信息:</b> 若要使他人能够在远程计算机上查看此特定错误消息的详细信息,请在位于当前 Web 应用程序根目录下的“web.config”配置文件中创建一个 <customErrors> 标记。然后应将此 <customErrors> 标记的“mode”属性设置为“Off”。<br><br>
...
<!-- Web.Config 配置文件 -->
...
<configuration>
<system.web>
<customErrors mode="Off"/>
</system.web>
</configuration></pre></code>
<b>注释:</b> 通过修改应用程序的 <customErrors> 配置标记的“defaultRedirect”属性,使之指向自定义错误页的 URL,可以用自定义错误页替换所看到的当前错误页。<br><br>
...
</body>
</html>
**********内容引用结束*************
题还未结束。如果我在程序里只用一个帐号登录(也就相当于一个线程),登录后进行操作都没种问题发生。还有,如果运行多个该程序的实例(大家都知道C#做成的程序每双击一次程序就会运行一个该程序,这就是一个程序实例),然后每个程序只用一个帐号进行登录,再进行登录之后的操作则不会发生该问题。
这问题在网站查找了很久,都没有有效的解决方案。包括一些人提到的设置request.ServicePoint.ConnectionLimit = int.MaxValue也一样没有解决到问题(同时我也在winform的构造函数里public Form1(){}加上System.Net.ServicePointManager.DefaultConnectionLimit = int.MaxValue;这一句,同样也没起到效果)。我在想是不是网站限制应用程序的多线程数为2,但我是模拟httpwebrequest进行操作的,网站应该不知道我是用应用程序进行的;如果真是这样,那网站是如何得知我是用应用程序的?通过什么方式知道的?
不知有没有人遇到过这样的问题?可有大虾知道解决的方法,小弟不胜感激!一点点分数不成敬意。
------解决方案--------------------
你的这些错误信息只是通用的错误信息,看不到出现错误的地方,如果请求的地址是你自己控制的,你可以在web.config里面设置debug=true,并且customErrors mode="Off"来查看具体的错误信息
------解决方案--------------------
可能是你登录的网站 登录机制方面有问题 并行时候导致异常,如果网站不是你的,只能改成单线程
------解决方案--------------------
服务器之所以当前禁止远程查看应用程序错误的详细信息,是因为,服务器上的web.config文件中那个mode未设置为Off。
这么说吧,这不是你那个客户端的问题, 而是网站的Bug。 你可以试试让你的多线程随机睡一会,不要一窩蜂的就上了。估计是网站不能正确应对高并发状况。
------解决方案--------------------
楼主这个问题,完全和我一样!我目前也很苦逼!多线程并发两个就报500,而且每实例一个线程的时候我都sleep了1秒 还是要报错。如果只登录的话,多线程并发是不会报错的,一旦请求登录之后的页面就开始报500了, 但让他们单独一个程序实例运行,就是多开几个窗口,一起并发请求数据,就没问题。
我的扣扣 七三六六一一五二七 望一起交流!
具体是这样的:制作了一个Winform程序,模拟浏览器登录,之后再进行一系列的操作。我是用多线程的,会有多个httpwebrequest的实例进行相关的get或post方式的请求数据;多个线程几乎都是同时获取要登录的网站,然后再用post方式登录;(请注意接下来的描述)多线程同时登录(用不同的帐号)没问题,都能成功登录,进去之后在操作(说明一下,从获取网站登录到之后的操作都设计成为全自动的)的过程中出会用到post方式请求页面,但问题就来了,这时竟然发现只有其中的两个线程能正常返回所需要的数据,而另一线程则在httpwebrequest.getrespond()上出现了异常,catch到了“远程服务器返回错误: (500) 内部服务器错误。”的提示,具体内容大致如下:
*********内容引用***********
<html>
<head>
<title>运行时错误</title>
<style>
...///html一些元素的标记,与问题完全无关,为了节省空间,故用"..."略,下类似。
</style>
</head>
<body bgcolor="white">
<span><H1>“/”应用程序中的服务器错误。<hr width=100% size=1 color=silver></H1>
<h2> <i>运行时错误</i> </h2></span>
<font face="Arial, Helvetica, Geneva, SunSans-Regular, sans-serif ">
<b> 说明: </b>服务器上出现应用程序错误。此应用程序的当前自定义错误设置禁止远程查看应用程序错误的详细信息(出于安全原因)。但可以通过在本地服务器计算机上运行的浏览器查看。
<br><br>
<b>详细信息:</b> 若要使他人能够在远程计算机上查看此特定错误消息的详细信息,请在位于当前 Web 应用程序根目录下的“web.config”配置文件中创建一个 <customErrors> 标记。然后应将此 <customErrors> 标记的“mode”属性设置为“Off”。<br><br>
...
<!-- Web.Config 配置文件 -->
...
<configuration>
<system.web>
<customErrors mode="Off"/>
</system.web>
</configuration></pre></code>
<b>注释:</b> 通过修改应用程序的 <customErrors> 配置标记的“defaultRedirect”属性,使之指向自定义错误页的 URL,可以用自定义错误页替换所看到的当前错误页。<br><br>
...
</body>
</html>
**********内容引用结束*************
题还未结束。如果我在程序里只用一个帐号登录(也就相当于一个线程),登录后进行操作都没种问题发生。还有,如果运行多个该程序的实例(大家都知道C#做成的程序每双击一次程序就会运行一个该程序,这就是一个程序实例),然后每个程序只用一个帐号进行登录,再进行登录之后的操作则不会发生该问题。
这问题在网站查找了很久,都没有有效的解决方案。包括一些人提到的设置request.ServicePoint.ConnectionLimit = int.MaxValue也一样没有解决到问题(同时我也在winform的构造函数里public Form1(){}加上System.Net.ServicePointManager.DefaultConnectionLimit = int.MaxValue;这一句,同样也没起到效果)。我在想是不是网站限制应用程序的多线程数为2,但我是模拟httpwebrequest进行操作的,网站应该不知道我是用应用程序进行的;如果真是这样,那网站是如何得知我是用应用程序的?通过什么方式知道的?
不知有没有人遇到过这样的问题?可有大虾知道解决的方法,小弟不胜感激!一点点分数不成敬意。
------解决方案--------------------
你的这些错误信息只是通用的错误信息,看不到出现错误的地方,如果请求的地址是你自己控制的,你可以在web.config里面设置debug=true,并且customErrors mode="Off"来查看具体的错误信息
------解决方案--------------------
可能是你登录的网站 登录机制方面有问题 并行时候导致异常,如果网站不是你的,只能改成单线程
------解决方案--------------------
服务器之所以当前禁止远程查看应用程序错误的详细信息,是因为,服务器上的web.config文件中那个mode未设置为Off。
这么说吧,这不是你那个客户端的问题, 而是网站的Bug。 你可以试试让你的多线程随机睡一会,不要一窩蜂的就上了。估计是网站不能正确应对高并发状况。
------解决方案--------------------
楼主这个问题,完全和我一样!我目前也很苦逼!多线程并发两个就报500,而且每实例一个线程的时候我都sleep了1秒 还是要报错。如果只登录的话,多线程并发是不会报错的,一旦请求登录之后的页面就开始报500了, 但让他们单独一个程序实例运行,就是多开几个窗口,一起并发请求数据,就没问题。
我的扣扣 七三六六一一五二七 望一起交流!