CharlesChen's Technical Space

简单实用是我一直在软件开发追求的目标(I Focus on. Net technology, to make the greatest efforts to enjoy the best of life.)
Not the best, only better
随笔 - 135, 文章 - 0, 评论 - 547, 阅读 - 51万
  博客园  :: 首页  :: 联系 :: 订阅 订阅  :: 管理
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

一、问题的产生: 

    在用C#从FTP服务器下载文件的过程中,出现一个莫名其妙的错误。(本机上测试正常,当部署到服务器上才出现,而且错误提示很奇怪)。

"the underlying connection was closed:the server committed a protocol violation" 翻译成中文是:"基础连接已经关闭: 服务器提交了协议"

当程序Throw出这个错误时候,真是无法理解.下面是程序代码:
复制代码
代码
            ftpAddress = "ftp://192.168.1.1/0409/1234****.jpg";
            Uri serverUri = new Uri(ftpAddress);

            WebClient listRequest 
= new WebClient();
            listRequest.Credentials 
= new NetworkCredential("user""pwd");
            
try
            {
                
byte[] newImageFile = listRequest.DownloadData(serverUri);
                
return GenerateImgSrc(newImageFile);
            }
            
catch (Exception ex)
            {
                
throw ex;
            }
复制代码

就是上面的代码段出现的提示,本机执行没有问题。当我在服务器上通过跟踪发现是由于listRequest.DownloadData()这个方法抛出的异常。

二、问题的原因:

通过在部署的服务器上进行多次测试,发现是由于在通过FTP下载文件的过程中返回了非法字符,导致DownLoadData报错。

可为什么在本机没有问题呢?我本机是在.Net Framework 2.0的环境下开发的。服务器上也是部署的是.Net Framework 2.0。是环境发生变化的差异吗?

我想到了是不是我本机其他Framework影响了在本机能正常运行,在服务器上因只有.Net Framework 2.0而无法正常运行。

突然我想到了版本问题,会不会.Net Framewrok 2.0的版本不同呢?我用的是WebClient.DownloadData方法是在System.dll程序集的的命名空间里。打开目录C:\Windows\Microsoft.NET\Framework\v2.0.50727\System.dll。发现服务器上的版本是:2.0.50727.42,而我本机的版本是:2.0.50727.4016,而且文件大小也不同。

最后:终于找到了在服务器上不能正常运行的原因呢?虽然都是.Net Framework 2.0,但是本机和服务器上的版本是不同的。

三、解决方法:

打上.Net Framework 2.0 SP1,部署的服务器上能够正常运行。

通过在服务器上安装.Net Framework 2.0 SP1后,果然发现System.dll的版本变化了,变成:2.0.50727.1433。虽然和我本机的版本还是不同,但是通过WebClient.DownloadData就能正常的下载了!

 

最后:上面的问题是在实际上项目中发现了。在这里只是做为一个开发笔记。方便以后查找。同时也希望提供给朋友们一种解决问题的一种思想。

(本机和服务器的环境由于安装不同的软件和框架,导致了程序运行的环境是不同的,通过怎样的思考来找出两端的差异性,这是一种有效的解决问题的方式)。

Best Regards,

Charles Chen

编辑推荐:
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
阅读排行:
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· [AI/GPT/综述] AI Agent的设计模式综述
点击右上角即可分享
微信分享提示