在项目中碰到的问题,具体背景如下:
网站项目中,提供报表文件下载,报表文件是由windows服务定时生成的,文件又多又大,所以导致网站所在的服务器磁盘总是告警,所以运维人员希望我们可以把报表文件单独放到其他地方,于是申请了一个1t的共享磁盘,本来以为,下一步很简单,直接把文件拷贝到共享磁盘,改一下网站下载文件的路径就完事了。结果如您所料,网站代码提示文件不存在,可我打开电脑就能看到它,还提示我不存在,这不是见了鬼了吗?!一番搜索查询,终于明白了为啥,iis权限问题,大概就是微软出于安全考虑,不允许iis访问网络盘,然后还有一堆的解决方案,各种建帐号,建虚拟目录,增加配置节点,因为某些原因,我这边无法获得提供共享磁盘的机器的全部权限,所以这些解决方案对我来说有点不适用,于是我开始了思考。导致这个问题的原因是什么,是iis没有访问权限。那些解决方案都是想办法让网站具有访问共享磁盘的权限,既然我现在无法让网站直接获得访问共享目录的权限,那么我可不可以绕过这个权限验证,让一个能获取到该权限的程序将我想要下载的文件传给我?答案是可以。在测试共享磁盘是否可用的时候,我自己开发了一个windows小程序,就是点个按钮,让程序从D盘复制一个文件至共享盘,点击另一个按钮,则反过来,从共享盘复制文件到D盘。也是行为这个小程序测试没问题,才会以为这次改造很简单,没想到掉坑里了。回到主题,上面只是想说明,windows程序是具有访问共享磁盘的权限的,可以像访问本地磁盘一张的访问共享磁盘。那么只要,让windows程序将网站需要下载的文件传过来不就可以下载了吗?没错,想来是可以,但是怎么传呢?让网站访问winform?好像没听说过。。。但是我知道另一件事情,那就是wcf服务是可以寄宿在winform中的,所以我在上面提到的Windows小程序中寄宿了一个wcf服务,服务中一个下载方法返回对应文件的stream,网站访问该方法,获得文件流,将文件流输出到客户端,文件就下载完成了。
具体寄宿代码请自行查询,网上多的是,此处只提供一个变相解决asp.net访问网络共享磁盘问题的方案,以供参考。
 
                    
                 
 
                
            
         浙公网安备 33010602011771号
浙公网安备 33010602011771号