我在尝试重构使用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