c# – 我可以重新使用HttpWebRequest而不断开与服务器的连接吗?

c# – 我可以重新使用HttpWebRequest而不断开与服务器的连接吗?,第1张

概述我试图调试 a specific issue with my ASP.NET application.客户端运行以下代码: void uploadFile( string serverUrl, string filePath ){ HttpWebRequest request = (HttpWebRequest)HttpWebRequest. Create( server 我试图调试 a specific issue with my ASP.NET application.客户端运行以下代码:
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,buffer.Length );                if( bytesRead == 0 ) {                    break;                }                stream.Write( buffer,bytesRead );            }        }    }     httpWebResponse result = (httpWebResponse)request.GetResponse();     //handle result - not relevant }

和Write()引发异常“无法将数据写入传输连接:已建立的连接被主机中的软件中止”.文本.我使用System.Net tracing,发现当我发送Content-Length设置的请求时出现问题.

具体来说,如果我省略了上述代码中的所有内容,服务器将立即通过WWW-Authenticate进行回复,然后客户端使用WWW-Authenticate重新发送请求,一切顺利,除了未上传的文件,并且请求在以后失败.

我想执行以下 *** 作:发送没有数据的请求,等待WWW验证,然后重复使用WWW-Authenticate和数据.所以我试图修改上面的代码:首先设置所有参数,然后调用GetResponse(),然后发送,但是当我尝试设置ContentLength属性时,抛出一个异常“写入开始后不能设置该属性”文本.

所以httpWebRequest似乎是不可重用的.

如何重新使用它来重新发送请求而不关闭连接?

解决方法@H_502_16@ 你不要重复使用请求 – 顾名思义,它是一个请求.但是,如果对同一主机发出多个请求,则.NET将默认重新使用底层网络连接.

请注意,您需要处理由request.GetResponse返回的WebResponse – 否则底层基础设施将不知道您实际上已经完成了它,并且将无法重新使用该连接.

(另外,为什么要使用BinaryReader?只需直接使用file.OpenRead返回的流.)

总结

以上是内存溢出为你收集整理的c# – 我可以重新使用HttpWebRequest而不断开与服务器的连接吗?全部内容,希望文章能够帮你解决c# – 我可以重新使用HttpWebRequest而不断开与服务器的连接吗?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/langs/1236392.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-06-06
下一篇2022-06-06

发表评论

登录后才能评论

评论列表(0条)

    保存