I'm trying to debug a specific issue with my ASP.NET application. The client runs the following code:
void uploadFile( string serverUrl, string filePath )
{
HttpWebRequest request = (HttpWebRequest)HttpWebRequest.
Create( serverUrl );
CredentialCache cache = new CredentialCache();
cache.Add( new Uri( serverUrl ), "Basic", new NetworkCredential( "User", "pass" ) );
request.Credentials = cache;
request.Method = "POST";
request.ContentType = "application/octet-stream";
request.Timeout = 60000;
request.KeepAlive = true;
using( BinaryReader reader = new BinaryReader(
File.OpenRead( filePath ) ) ) {
request.ContentLength = reader.BaseStream.Length;
using( Stream stream = request.GetRequestStream() ) {
byte[] buffer = new byte[1024];
while( true ) {
int bytesRead = reader.Read( buffer, 0, buffer.Length );
if( bytesRead == 0 ) {
break;
}
stream.Write( buffer, 0, bytesRead );
}
}
}
HttpWebResponse result = (HttpWebResponse)request.GetResponse();
//handle result - not relevant
}
and Write()
throws an exception with "Unable to write data to the transport connection: An established connection was aborted by the software in your host machine." text. I used System.Net tracing and found that something goes wrong when I send the request with Content-Length
set.
Specifically if I omit everything that is inside using
statement in the code above the server promptly replies with WWW-Authenticate
and then the client reposts the request with WWW-Authenticate
and everything goes fine except the file in not uploaded and the request fails much later.
I'd like to do the following: send an request without data, wait for WWW-Authenticate
, then repeat it with WWW-Authenticate
and data. So I tried to modify the code above: first set all the parameters, then call GetResponse()
, then do sending, but when I try to set ContentLength
property an exception is thrown with "This property cannot be set after writing has started" text.
So HttpWebRequest
seems to be non-reusable.
How do I reuse it for resending the request without closing the connection?
See Question&Answers more detail:
os 与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…