SOAPを使用してAPIデータを取得するコンソールアプリケーションをリファクタリングしようとしています。元のコードがUSING文を使用していないことがわかりました。私はコードをリファクタリングしようと思っていましたが、 "Internal Server Error"が発生しました。私はこれを数回見てきましたが、なぜこれがうまくいかないのか分かりません。元のコードに戻すと、期待どおりに動作します。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();
}
}
UPDATE:応答に基づく別の試み。 2回目のUSING文では、 "stream"がusingステートメントにあるため、stream = response.GetResponseStream();
を使用することはできません。更新へ
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が指摘したように、新しいコードの 'request'に' doc'の内容を追加したことはありません。 – Eris