2013-07-12 30 views
0

我有一個基本程序,它爲雲託管提供程序使用特定的API。該程序產生了一個HttpWebRequest,這基本上就像是向雲中的一臺服務器執行操作(例如關閉它,啓動它)的請求。當從特定服務器發送時,HttpWebRequest被拒絕

我遇到的問題是,當我從本地機器執行腳本時,該腳本起作用,但當我從其中一臺生產服務器執行腳本時,腳本無法正常工作。有問題的服務器是Windows 2008 R2框(虛擬/託管),並且如果我可以在此處使用此腳本,它將成爲腳本宿主。

有趣的是,此腳本在生產環境中(通過Windows任務計劃程序自動執行)至少已運行數週。然後,突然之間,它昨天停止了工作。沒有我知道的服務器更改,但我不是唯一有權訪問該環境的人,因此可能會在此處進行更改。我有點擔心,或許一些安全或防火牆設置是造成問題的原因。我們最近安裝了新的病毒防護軟件,所以這是一個潛在的罪魁禍首。

  1. HttpWebRequest是不是適當的某種方式,這將使其被阻止或以某種方式失敗?
  2. 是否有特定的服務器設置,我應該檢查可能會對此特定程序產生不利影響?

這裏是我的代碼:

using System; 
using System.Net; 
using System.Text; 

class Script { 

    static void Main(string[] args) { 

     string organizationId = args[0]; 
     string serverId = args[1]; 
     string serverCommand = args[2]; 
     string username = args[3]; 
     string password = args[4]; 
     string credentials = username + ":" + password; 
     credentials = Convert.ToBase64String(Encoding.Default.GetBytes(credentials)); 

     //send command to server 
     Uri uri = new Uri("https://api.opsourcecloud.net/oec/0.9/" + organizationId + "/server/" + serverId + "?" + serverCommand); 
     HttpWebRequest serverRequest = (HttpWebRequest)WebRequest.Create(uri); 
     serverRequest.Headers["Authorization"] = "Basic " + credentials; 
     HttpWebResponse serverResponse = (HttpWebResponse)serverRequest.GetResponse(); 

    } 

} 

這是我的錯誤:

Unhandled Exception: System.Net.WebException: Unable to connect to the remote se 
rver ---> System.Net.Sockets.SocketException: No connection could be made becaus 
e the target machine actively refused it 168.143.82.65:443 
    at System.Net.Sockets.Socket.DoConnect(EndPoint endPointSnapshot, SocketAddre 
ss socketAddress) 
    at System.Net.ServicePoint.ConnectSocketInternal(Boolean connectFailure, Sock 
et s4, Socket s6, Socket& socket, IPAddress& address, ConnectSocketState state, 
IAsyncResult asyncResult, Int32 timeout, Exception& exception) 
    --- End of inner exception stack trace --- 
    at System.Net.HttpWebRequest.GetResponse() 
    at Script.Main(String[] args) 

回答

0

它看起來像你的Authorization頭的問題。嘗試使用NetworkCredential來代替您的請求,如下所示:

serverRequest.Credentials = new NetworkCredential(username, password); 
+0

我試過並獲得了相同的行爲。從我的本地機器發送請求時,請求成功,但是當從服務器發出請求時,它會拋出上述異常。儘管如此,你的建議確實看起來更乾淨,所以我可能會保持這種改變。 – nairware

+0

這可能是防火牆問題,或者服務器拒絕響應,因爲您一次發出的請求太多。 –

相關問題