WebRequest:底层连接已关闭

时间:2017-04-24 13:42:25

标签: c# .net

我的应用必须下载一个特定文件here is the url。该应用程序在最近一次更改提供商方面后工作良好多年来我得到了基础连接已关闭:发送时发生了意外错误。'

我已阅读网络中的所有相关信息,但没有任何建议的修复程序适用于我。

重要说明:代码适用于Net Framework 4.6但我需要它才能使用3.5。

有什么想法吗?

以下是代码:

        var url = new Uri(@"http://www.ezv.admin.ch/pdf_linker.php?doc=edecReceiptResponse_stylesheet_v_3_0");

        var request = (HttpWebRequest)WebRequest.Create(url);
        request.KeepAlive = false;
        request.AllowAutoRedirect = true;
        request.UserAgent = "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2228.0 Safari/537.36";
        request.ProtocolVersion = HttpVersion.Version10;

更新:堆栈:

System.Net.WebException: The underlying connection was closed: An unexpected error occurred on a send. ---> System.IO.IOException: Received an unexpected EOF or 0 bytes from the transport stream.
   at System.Net.FixedSizeReader.ReadPacket(Byte[] buffer, Int32 offset, Int32 count)
   at System.Net.Security.SslState.StartReadFrame(Byte[] buffer, Int32 readBytes, AsyncProtocolRequest asyncRequest)
   at System.Net.Security.SslState.StartReceiveBlob(Byte[] buffer, AsyncProtocolRequest asyncRequest)
   at System.Net.Security.SslState.ForceAuthentication(Boolean receiveFirst, Byte[] buffer, AsyncProtocolRequest asyncRequest)
   at System.Net.Security.SslState.ProcessAuthentication(LazyAsyncResult lazyResult)
   at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
   at System.Net.TlsStream.ProcessAuthentication(LazyAsyncResult result)
   at System.Net.TlsStream.Write(Byte[] buffer, Int32 offset, Int32 size)
   at System.Net.PooledStream.Write(Byte[] buffer, Int32 offset, Int32 size)
   at System.Net.ConnectStream.WriteHeaders(Boolean async)

再次更新:与Fiddler一起检查连接到http S 的应用,并将使用net 4.6(有效)收到的回复与net 3.5(失败)进行比较:

  • 4.6接收两个响应,5670 + 664785字节
  • 3.5还会收到两个响应,每个响应7个字节

1 个答案:

答案 0 :(得分:3)

根据进行的test,这里有www.ezv.admin.ch支持的协议。

Protocols
TLS 1.2 Yes
TLS 1.1 No
TLS 1.0 No
SSL 3   No
SSL 2   No

服务器端升级很可能将安全协议的版本升级为TLS 1.2。

根据以下article .NET Framework 3.5不支持此版本,您唯一的选择是升级客户端库或修补它们,请参阅下文。

  

.NET 3.5或更低版本。不支持TLS 1.2(*)且没有   解决方法。将您的应用程序升级到更新版本   框架。

以下是有关如何修补客户端以添加支持的更多信息。

  

P.P.S。正如下面提到的微软的Christian Pop,有一个   最近可用于.NET 3.5的补丁,它支持TLS1.2。

     

请参阅:

     

KB3154​​518 - 可靠性汇总HR-1605 - NDP 2.0 SP2 - Win7 SP1 / Win   2008 R2 SP1 KB3154​​519 - 可靠性汇总HR-1605 - NDP 2.0 SP2 -   Win8 RTM / Win 2012 RTM KB3154​​520 - 可靠性汇总HR-1605 - NDP 2.0   SP2 - Win8.1RTM / Win 2012 R2 RTM KB3156421 -1605 HotFix汇总   适用于Windows 10的Windows Update。