我在嘗試重構使用SOAP獲取一些API數據的控制檯應用程序。我看到原始代碼沒有使用任何USING語句。我想我會嘗試重構代碼,但是,我得到一個「內部服務器錯誤」。我已經看了幾次,我不明白爲什麼這不起作用。如果我切換回原來的代碼,它按預期工作。使用USING語句處理SOAP請求不起作用?
這是工作的原代碼:
public static string ProcessSOAPRequest(string xml, string endPoint)
{
XmlDocument doc = new XmlDocument();
doc.LoadXml(xml);
HttpWebRequest req = (HttpWebRequest)WebRequest.Create(endPoint);
req.Timeout = 100000000;
req.Method = "POST";
Stream objStream = req.GetRequestStream();
doc.Save(objStream);
objStream.Close();
WebResponse resp = req.GetResponse();
objStream = resp.GetResponseStream();
StreamReader r = new StreamReader(objStream);
string data = r.ReadToEnd();
return data;
}
這是我在與使用重構的嘗試。
public static string ProcessSOAPRequest(string xml, string endPoint)
{
XmlDocument doc = new XmlDocument();
doc.LoadXml(xml);
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(endPoint);
request.Timeout = 100000000;
request.Method = "POST";
using (WebResponse response = request.GetResponse())
using (Stream stream = response.GetResponseStream())
using (StreamReader reader = new StreamReader(stream))
{
return reader.ReadToEnd();
}
}
更新:另一個基於響應的嘗試。這次在第二個USING語句中,它說我不能使用stream = response.GetResponseStream();
,因爲「stream」在using語句中。
var data = string.Empty;
using (Stream stream = request.GetRequestStream())
{
doc.Save(stream);
using (WebResponse response = request.GetResponse())
{
stream = response.GetResponseStream();
using (StreamReader reader = new StreamReader(stream))
{
data = reader.ReadToEnd();
}
}
}
return data;
隱式返回可能不會幫助你。您是否嘗試分配結果並返回使用範圍之外? – BradleyDotNET
GetRequestStream()方法發生了什麼? – jdweng
正如@jdweng指出的那樣,您從來沒有在新代碼中將'doc'的內容添加到'request'中。 – Eris