我試圖在Ubuntu上使用單聲道運行.NET程序。在Ubuntu上使用HttpWebResponse與單聲道的空響應數據
程序連接到遠程服務器API並獲取XML字符串作爲響應。 下面是負責此任務的簡化版本的功能。
using System.Net;
static string GetProducts(string clientID, string apiKey, string url)
{
HttpWebRequest req = WebRequest.Create(url) as HttpWebRequest;
req.Credentials = new NetworkCredential(clientID, apiKey);
req.ContentType = "application/x-www-form-urlencoded";
string result = string.Empty;
using (HttpWebResponse resp = req.GetResponse() as HttpWebResponse)
{
StreamReader reader = new StreamReader(resp.GetResponseStream());
result = reader.ReadToEnd();
}
return result;
}
它在我的Windows 8.1機器上工作得非常好。但我的目標是在Ubuntu VPS上運行它。 我正在使用mono來實現這一點。程序運行,但在嘗試解析下載的XML字符串時停止,並出現異常。
[ERROR] FATAL UNHANDLED EXCEPTION: System.Xml.XmlException: Document element did not appear. Line 1, position 1.
隨着一點點的探索,我發現,該方案實際上沒有得到在XML響應,但產生一個空字符串代替。由於沒有連接錯誤被拋出,這很奇怪。
我已經有一些以前的單聲道和Ubuntu的經驗,但從未遇到過這樣的問題。
它可能是與Ubuntu服務器或單聲道有關嗎?或者是在代碼本身?
對此有何看法?
你可以嘗試像NetTool的進行流量分析Ubuntu和再比較,爲交通,你在窗戶上看到提琴手。也許有一些默認的頭文件/設置需要在linux中顯式設置。 – cgotberg
@cgotberg經過一些測試後,我發現發送的頭文件在windows和ubuntu中有些不同。 在Windows'內容類型:應用程序/ x-WWW窗體-urlencoded 授權:基本MjY2MjQyOmFmNDhlZjUwZDFiM2Y5MWRiZmE5ZTAwYTNjM2ZhNjg3' 在Ubuntu'內容類型:應用程序/ x-WWW窗體-urlencoded 連接:保持alive' 貌似Ubuntu缺少授權行。但我不會在Windows上的任何位置自行設置它。這可以是任何重要的? – Aceonace
這可能是問題所在。這一行設置授權,看起來這是什麼在Ubuntu中不起作用。 req.Credentials = new NetworkCredential(clientID,apiKey);不幸的是,我沒有任何經驗,爲什麼會這樣。可能能夠嘗試類似這種解決方案。 http://stackoverflow.com/a/19851527/1181408 – cgotberg