2011-10-24 40 views
0

我有一个foreach“如果”和条件为真,我做一个WebResponse发布我的项目在服务器。WebResponse动态'有时'崩溃

有时,两个O多个项目,但其他时间崩溃,出现以下错误代码的运行:

远程服务器返回错误:(407)代理身份验证。

代码:

WebClient client = new WebClient(); 

       string authInfo = "admin:geoserver"; 
       string address = "http://xxxxxxxx:8080/geoserver/rest/workspaces/"; 
       client.Headers["Authorization"] = "Basic " + Convert.ToBase64String(Encoding.ASCII.GetBytes(authInfo)); 



       WebRequest request = WebRequest.Create(address); 

       request.ContentType = "text/xml"; 
       request.Method = "POST"; 

       request.Headers["Authorization"] = "Basic " + Convert.ToBase64String(Encoding.ASCII.GetBytes(authInfo)); 

       byte[] bret = Encoding.GetEncoding("UTF-8").GetBytes("<workspace><name>" + nameWS + "</name></workspace>"); 



       Stream reqstr = request.GetRequestStream(); 
       reqstr.Write(bret, 0, bret.Length); 
       reqstr.Close(); 


       try 
       { 
        WebResponse response = request.GetResponse(); 

        response.Close(); 

       } 

我的环境是C#的Visual Studio 2010

+1

看起来像这样的代码运行在代理服务器后面的机器上,该代理服务器需要验证才能访问此资源。根据所需的代理服务器类型和身份验证方案,可能有不同的方法来解决问题。 –

+0

您是授权人员使用来自网站的回复吗? –

+0

因为它可能来自网站的问题,以防止DOS攻击。 –

回答

0

多久你打电话吗?正如其他人所暗示的那样,它可能是服务器受到DOS保护,并且您的请求会被视为这样。例如,用一个使用块立即处理所有一次性物品也很有价值。我们曾经遇到过一些问题,同时在我们的网络内部留下了太多的连接给我们的网络服务器。你可以调整你的代码,如下所示:

using(var client = new WebClient()) 
{ 
    string authInfo = "admin:geoserver"; 
    string address = "http://xxxxxxxx:8080/geoserver/rest/workspaces/"; 
    client.Headers["Authorization"] = "Basic " + Convert.ToBase64String(Encoding.ASCII.GetBytes(authInfo)); 

    var request = WebRequest.Create(address); 

    request.ContentType = "text/xml"; 
    request.Method = "POST"; 

    request.Headers["Authorization"] = "Basic " + Convert.ToBase64String(Encoding.ASCII.GetBytes(authInfo)); 

    byte[] bret = Encoding.GetEncoding("UTF-8").GetBytes("<workspace><name>" + nameWS + "</name></workspace>"); 

    using (var reqstr = request.GetRequestStream()) 
    { 
     reqstr.Write(bret, 0, bret.Length); 
    } 

    try 
    { 
     using (var response = request.GetResponse()) 
     { 
      // your code here... 
     } 

    } 
    catch (Exception exc) 
    { 
     System.Diagnostics.Debug.WriteLine(exc.Message); 
    } 
}