sha*_*oth 9 .net c# asp.net iis ssl
我正在尝试使用我的ASP.NET应用程序调试特定问题.客户端运行以下代码:
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
}
Run Code Online (Sandbox Code Playgroud)
并Write()在"无法将数据写入传输连接时抛出异常:已建立的连接已被主机中的软件中止." 文本.我使用System.Net跟踪,发现当我用Content-Lengthset 发送请求时出现了问题.
具体来说,如果我省略using上面代码中的所有内部语句,服务器立即回复,WWW-Authenticate然后客户端重新发送请求,WWW-Authenticate一切正常,除了未上传的文件,请求失败很久.
我想做以下事情:发送没有数据的请求,等待WWW-Authenticate,然后用WWW-Authenticate数据重复它.所以我尝试修改上面的代码:首先设置所有参数,然后调用GetResponse(),然后执行发送,但是当我尝试设置ContentLength属性时,抛出一个异常,"写入开始后无法设置此属性"文本.
所以HttpWebRequest似乎是不可重用的.
如何在不关闭连接的情况下重新使用它来重新发送请求?
Jon*_*eet 16
您不会重复使用请求 - 顾名思义,这是一个请求.但是,如果您对同一主机发出多个请求,则默认情况下.NET将重用基础网络连接.
请注意,您确实需要处理WebResponse返回的request.GetResponse- 否则底层基础结构将不会知道您实际上已完成它,并且将无法重用该连接.
(顺便说一下,你为什么要使用BinaryReader?只需使用File.OpenRead直接返回的流.)
| 归档时间: |
|
| 查看次数: |
12506 次 |
| 最近记录: |