2011-10-24 78 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); 
    } 
}