当前位置: 首页 > 编程语言 > C#

我可以在不断开服务器连接的情况下重用HttpWebRequest吗?Share

时间:2023-04-11 00:44:49 C#

我可以在不断开服务器连接的情况下重用HttpWebRequest吗?我正在尝试调试我的ASP.NET应用程序的特定问题。客户端运行以下代码:voiduploadFile(stringserverUrl,stringfilePath){HttpWebRequestrequest=(HttpWebRequest)HttpWebRequest.Create(serverUrl);CredentialCache缓存=newCredentialCache();cache.Add(newUri(serverUrl),"Basic",newNetworkCredential("User","pass"));request.Credentials=缓存;request.Method="POST";request.ContentType="application/octet-stream";请求超时=60000;请求.KeepAlive=真;using(BinaryReaderreader=newBinaryReader(File.OpenRead(filePath))){request.ContentLength=reader.BaseStream.Length;使用(Streamstream=request.GetRequestStream()){byte[]buffer=newbyte[1024];while(true){intbytesRead=reader.Read(buffer,0,buffer.Length);如果(bytesRead==0){中断;}stream.Write(buffer,0,bytesRead);}}}HttpWebResponse结果=(HttpWebResponse)request.GetResponse();//处理结果-不相关}并且Write()抛出异常“无法将数据写入传输连接:已建立的连接被主机中的软件中止。”文本。我使用System.Net进行跟踪,发现当我发送设置了Content-Length的请求时会出现问题。具体来说,如果我在上面的代码中省略了using语句中的所有内容,服务器会立即回复WWW-Authenticate,然后客户端使用WWW-Authenticate重新发送请求,一切正常,除了未上传的文件和请求非常失败晚的。我想做以下事情:发送一个没有数据的请求,等待WWW-Authenticate,然后用WWW-Authenticate和数据重复它。所以我尝试修改上面的代码:首先设置所有参数,然后调用GetResponse(),然后发送,但是当我尝试设置ContentLength属性时,抛出异常“写入后无法设置此属性”开始”的文字。所以HttpWebRequest似乎不可重用。如何在不关闭连接的情况下重用连接重新发送请求?您不重复使用请求——顾名思义,这是一个请求。但是,如果您向同一主机发出多个请求,.NET将默认重用底层网络连接。请注意,您确实需要处理request.GetResponse返回的WebResponse-否则底层基础设施将不知道您实际上已经完成了它,并且将无法重用连接。(BinaryReader,为什么要使用BinaryReader?直接使用File.OpenRead返回的流即可。)除了JonSkeet的回答外,您不需要手动设置ContentLength属性。HttpWebRequest将自动计算并填充此属性。以上是C#学习教程:可以在不断开服务器连接的情况下重用HttpWebRequest吗?如果所有分享的内容对你有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处: