Apache Web サーバーに対して HTTP POST を実行しようとしています。
リクエストが機能するには、ContentLength の設定が必要なようです。
GetRequestStream() から直接 XmlWriter を作成し、SendChunked を true に設定したいのですが、そうするとリクエストが無期限にハングします。
リクエストの作成方法は次のとおりです。
private HttpWebRequest MakeRequest(string url, string method)
{
HttpWebRequest request = HttpWebRequest.Create(url) as HttpWebRequest;
request.Method = method;
request.Timeout = Timeout; //Property in my class, assume it's 10000
request.ContentType = "text/xml"; //I am only writing xml with XmlWriter
if (method != WebRequestMethods.Http.Get)
{
request.SendChunked = true;
}
return request;
}
ContentLength を設定する必要がないように、SendChunked を機能させるにはどうすればよいですか? サーバーに送信する前に XmlWriter の文字列をどこかに保存する理由がわかりません。
編集:問題を引き起こしている私のコードは次のとおりです:
using (Stream stream = webRequest.GetRequestStream())
{
using (XmlWriter writer = XmlWriter.Create(stream, XmlTags.Settings))
{
Generator.WriteXml<TRequest>(request, writer);
}
}
GetRequestStream() から返された Stream オブジェクトを使用しない前は、XmlWriter が破棄されたときにストリームを閉じると想定していましたが、そうではありませんでした。
以下の答えの1つ、これにさせてください。それらを答えとしてマークします。
HttpWebRequest に関する限り、元のコードは問題なく動作します。