WTM(基于Blazor)访问共享文件夹
有个需求,需要访问内网网络共享文件夹中的文件,有域控限制。
一开始直接在本地映射一个网络驱动器,然后像本地磁盘一样访问共享文件夹里的文件,比如:Y:\ 。
然后直接在程序中访问共享文件夹中的文件,如下代码:
DirectoryInfo directoryInfo = new DirectoryInfo(@"\\10.10.65.14\文件夹"); if (directoryInfo.Exists) { FileInfo[] fileInfos = directoryInfo.GetFiles(); string result = String.Empty; foreach (FileInfo fileInfo in fileInfos) { result += fileInfo.Name + "\n"; } await MessageService1.Show(new MessageOption() { Content = result }); }
经过测试,发现调试程序时能够访问得到里面的文件,但发布程序后不能得到里面的文件。初步判断,IIS的某些设置权限没有开放。
设置方法:
应用程序池-高级设置-标识-自定义账户,设置你登录此系统的用户名和密码。
结论:
1. 登录系统的账号为administrators管理员权限
2. 不能使用Y:\文件夹 这样的路径直接访问,直接使用其网络路径,例如:\\10.10.65.14\文件夹
3. 项目发布到IIS后,选择应用程序池,设置应用程序池标识为该账号。
————————————————————————————————————————————————————————————————————
问题一:.NET Core Runtime、ASP.NET Core RunTime 、Host三个环境都安装好了,为什么IIS访问WTM(Blazor版)还是报错呢?
打开事件查看器查看错误日志
解决办法:
1. 应用程序池将标识修改成当前登录的管理员账户。
2. 32位应用程序是否启用
3.检查appsettings.json文件内容
"Domains": { "server": { //Blazor Server模式下页面调用接口的内网地址 "Address": "http://localhost:8082" }, "serverpub": { //Blazor Server模式下页面调用接口的外网地址,可为空,为空表示api和页面部署在同一地址下 "Address": "http://localhost:8082" }, "mainhost": {//用于指定单点登录的主站地址 //"Address": "https://localhost:5001" }, "github": { "Address": "https://api.github.com" } },
这里面的server和serverpub节点下的Address地址中的端口号要跟发布到IIS中的端口号一致。
问题一:为啥调试时登录不进去,也没有错误提示?
因为调试时启动的url的端口号跟发布的url的端口号不一致,需要设置成相同。
修改项目的Properties目录下的launchSettings.json的端口号即可。这里的8018跟appsettings.json里的Domains节点下的server配置的端口号一致。
{
"profiles": {
"FileAutoGen": {
"commandName": "Project",
"launchBrowser": true,
"inspectUri": "{wsProtocol}://{url.hostname}:{url.port}/_framework/debug/ws-proxy?browser={browserInspectUri}",
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development"
},
"applicationUrl": "http://localhost:8018/"
}
}
}