【问题标题】:sending Http request error (Http 503) in C#在 C# 中发送 Http 请求错误(Http 503)
【发布时间】:2009-10-20 07:59:44
【问题描述】:

我正在使用 VSTS 2008 + C# + .Net 3.5 开发控制台应用程序,并将请求发送到另一台服务器(Windows Server 2008 上的 IIS 7.0)。我发现当请求线程数很大时,IIS 7.0 将响应 http 503 错误。任何想法有什么问题以及如何调整以使 IIS 7.0 服务更多请求?

这是我的代码,

class Program
{
    private static int ClientCount = 100;
    private static string TargetURL = "http://labtest/abc.wmv";
    private static int Timeout = 200;

    static void PerformanceWorker()
    {
        Stream dataStream = null;
        HttpWebRequest request = null;
        HttpWebResponse response = null;
        StreamReader reader = null;
        try
        {
            request = (HttpWebRequest)WebRequest.Create(TargetURL);
            request.Timeout = Timeout * 1000;
            request.Proxy = null;
            response = (HttpWebResponse)request.GetResponse();
            dataStream = response.GetResponseStream();
            reader = new StreamReader(dataStream);

            // 1 M at one time
            char[] c = new char[1000 * 10];

            while (reader.Read(c, 0, c.Length) > 0)
            {
                Console.WriteLine(Thread.CurrentThread.ManagedThreadId);
            }
        }
        catch (Exception ex)
        {
            Console.WriteLine(ex.Message + "\n" + ex.StackTrace);
        }
        finally
        {
            if (null != reader)
            {
                reader.Close();
            }
            if (null != dataStream)
            {
                dataStream.Close();
            }
            if (null != response)
            {
                response.Close();
            }
        }
    }

    static void Main(string[] args)
    {
        Thread[] workers = new Thread[ClientCount];
        for (int i = 0; i < ClientCount; i++)
        {
            workers[i] = new Thread((new ThreadStart(PerformanceWorker)));
        }

        for (int i = 0; i < ClientCount; i++)
        {
            workers[i].Start();
        }

        for (int i = 0; i < ClientCount; i++)
        {
            workers[i].Join();
        }           

        return;
    }
}

【问题讨论】:

  • 你真的要同时发出 100 个请求吗?
  • 是的,当然。为什么会有这样的怀疑? :-)

标签: c# .net visual-studio-2008 iis-7 httpwebrequest


【解决方案1】:

503 状态码代表服务不可用,可以在服务器暂时超载或太忙时发出。

就像 Bhushan 所说,许多因素都会影响服务器处理请求的能力。

在 MSDN 上查找 IIS 配置,或者尝试在 Server Fault(服务器管理员相当于 StackOverflow)上提问。您可能需要在某处增加配置文件中允许的同时请求数量,但即使这样做,您仍然会受到服务器功能的限制。

还可以查看此 MSDN 论坛帖子,了解增加 HttpWebRequest 可以向一台主机发出的最大同时请求数:http://social.msdn.microsoft.com/Forums/en-US/netfxnetcom/thread/1f863f20-09f9-49a5-8eee-17a89b591007/
默认情况下,这限制为 2

编辑

尝试查看http://www.server7.iis.net/ConfigReference/system.applicationHost/sites/site/siteDefaults/limits 以配置服务器连接和带宽限制

【讨论】:

  • 您提到的是客户端限制(我已经将客户端最大连接数设置为 20,000)。我认为我应该配置的是服务器端限制?
  • 添加了一个看起来像 IIS 7 配置内容的链接,您需要根据原始答案进行调整
  • 从这个文档看,默认的最大并发连接数是默认值是4294967295,貌似已经够大了,不用设置了吧?
  • 谢谢!我这里有类似的问题,如果你能看一下,不胜感激。 stackoverflow.com/questions/1598748/…
【解决方案2】:

我不太了解 IIS 管理,但 Web 服务器的容量取决于各种因素,例如 CPU 功率、可用内存、请求处理、处理时间等。我不知道 IIS 是否有配置限制一次可以处理的请求数量。无论服务器可以处理什么,总会有一个限制。因此,根据上述因素,您需要提供足够多的容量来处理预期负载。

【讨论】:

  • 谢谢!我打开了任务管理器,看到 CPU/内存/网络都消耗了一小部分(不到 50%)。有什么进一步的调优想法吗?
  • 谢谢!我在这里也有类似的问题,如果你能看一下,不胜感激。 stackoverflow.com/questions/1598748/…
猜你喜欢
  • 1970-01-01
  • 2019-01-06
  • 2012-12-29
  • 1970-01-01
  • 2018-01-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-02-10
相关资源
最近更新 更多