ストリーム転送された内容の HTTP Web 要求を POST プロトコルを使用して送信するときは、その内容のサイズを指定する必要があります。SendChunked が false で Method = POST の場合は、ContentLength の値を指定します。
.NET Framework とは異なり、.NET Compact Framework では、メモリ制約を考慮して、データの事前バッファリングは行いません。バッファリングを確実に行うためには、SendChunked を false に設定します。
内容の長さが 0 である要求ストリームは、それが正しく取得され、閉じられなかった場合に、ObjectDisposedException を引き起こします。内容の長さが 0 である要求を処理するには、次のコード例に示すように、返されたストリームに対して、Write メソッドを呼び出すことなく、明示的に GetRequestStream メソッド、次に Close メソッドを呼び出す必要があります。
private static void ZeroLengthRequest()
{
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(
requestUri + "?dummy=true");
request.AllowWriteStreamBuffering = true;
request.Credentials = CredentialCache.DefaultNetworkCredentials;
request.Credentials = netCred;
request.ConnectionGroupName = "mygroup";
request.ContentLength = 0;
request.KeepAlive = true;
request.Method = "POST";
request.ServicePoint.UseNagleAlgorithm = false;
request.Timeout = System.Threading.Timeout.Infinite;
request.UnsafeAuthenticatedConnectionSharing = true;
Stream req = request.GetRequestStream();
req.Close();
using (request.GetResponse())
{
...
}
}
Private Shared Sub ZeroLengthRequest()
Dim request As HttpWebRequest = _
CType(WebRequest.Create(requestUri + "?dummy=true"), _
HttpWebRequest)
request.AllowWriteStreamBuffering = true
request.Credentials = CredentialCache.DefaultNetworkCredentials
request.Credentials = netCred
request.ConnectionGroupName = "mygroup"
request.ContentLength = 0
request.KeepAlive = true
request.Method = "POST"
request.ServicePoint.UseNagleAlgorithm = false
request.Timeout = System.Threading.Timeout.Infinite
request.UnsafeAuthenticatedConnectionSharing = true
Dim req As Stream = request.GetRequestStream
req.Close
request.GetResponse
End Sub