先说解决步骤:
1.在共享服务器上新建一个用户,在共享目录里为此用户分配读或写权限.
2.在IIS服务器上添加一个远程共享目录的网络位置(非必须).
3.在IIS服务器上添加一个本地用户,用户名和密码与步骤1的相同.
4.将IIS服务器上新建的这个本地用户分配进Administator组或IIS组.
5.在WEB.config中添加如下代码:
<system.web>
<identity impersonate="true" userName="User01" password="对应User01的密码" />
</system.web>
或者
应用程序池的 基本设置:.net clr 版本 :4.0,托管管道模式:【经典】 高级设置:启动32位程序:true ,进程模型下的标志:自定义账号,输入 User01/对应密码.
两者选其一即可,效果相同
6.完工
再来聊聊原因:
1. 为什么IIS访问不了?
IIS使用的权限为
IUSR_电脑名
或IWAM_电脑名
,并不属于Everyone,所以即使远程目录连接成功,并被设置为Guest可调用,依然是访问不到共享目录的
2. 为什么开发的时候VS可以访问?
因为VS用的是Administrator权限
3.为什么需要在IIS服务器上建本地帐户
我们必须指定一个帐号来替代IIS默认的帐号去访问远程共享目录,但IIS默认的帐号在项目运行时需要访问C:\Windows下DotNet 框架的临时文件目录(别问为什么,我TM也不知道微软为什么要这么搞),所以唯一的办法就是在本地建个相同的帐号,并为它分配本地相应的权限,好让它能去读写C:\Windows
注意!
- 不建议使用IIS虚拟目录方式来共享读取,容易有安全问题
- 不建议为IIS使用的共享帐号分配Administrator权限
- 如果不想在webconfig中明文保存共享帐号,可考虑使用aspnet_setreg.exe
网友评论