UWP IoT RPi3连接DLNA媒体服务器无法列出文件夹问题
我之前折腾IoT Core访问NAS的时候也踩过类似的坑,结合你已经做的排查,给你几个针对性的方向试试:
1. 先换IP地址访问,排除NetBIOS解析问题
Windows桌面版对局域网设备的NetBIOS名称解析很友好,但IoT Core的网络栈在这方面弱不少。你Win10上用的\\NAS名称\共享文件夹这种路径,到了RPi上可能根本解析不到NAS的位置。建议直接换成NAS的静态IP来访问,比如把\\MySynology\Audio改成\\192.168.x.x\Audio,先确认是不是名称解析导致的“找不到文件”。
2. 检查SMB协议版本的兼容性
Synology NAS默认一般开着SMB3,但有些旧版的IoT Core默认可能只支持SMB1(虽然SMB1不安全,但可以临时测试),或者需要手动指定协议版本。你可以先去Synology控制面板的「文件服务」->「SMB」里,确认SMB2/3是开启状态;然后在代码里尝试显式指定SMB版本连接,避免协议不匹配的问题。
3. 确认IoT Core应用的网络权限
PC端能访问不代表IoT Core应用有权限——IoT Core的应用是跑在受限容器里的,必须在Package.appxmanifest里声明privateNetworkClientServer能力,不然连局域网内的共享都碰不到。你去看看应用的清单文件里有没有加这个权限,没加的话补上再试试。
另外,NAS的共享权限要注意:IoT Core应用访问SMB共享时,没法直接用Windows桌面的凭据缓存,得在代码里显式传入NAS的用户名和密码。比如用C#的话可以这么写:
var nasCred = new NetworkCredential("你的NAS用户名", "你的NAS密码"); var credCache = new CredentialCache(); credCache.Add(new Uri(@"\\192.168.x.x\Audio"), "NTLM", nasCred); // 之后用这个缓存去访问文件目录
4. 验证SMB端口是否能连通
虽然你能获取NAS的IP,但Ping通不代表SMB的445端口能正常访问。你可以用PowerShell连到RPi的IoT Core上,执行Test-NetConnection 192.168.x.x -Port 445,看看端口是不是通的。如果不通,要么是RPi的防火墙挡了,要么是NAS那边的防火墙限制了445端口的访问。
5. 先验证路径存在性,再枚举文件
别上来就直接枚举文件,先在代码里用Directory.Exists(@"\\192.168.x.x\Audio")判断一下共享路径能不能被识别。如果这个方法返回false,那就是路径本身的问题;如果返回true再去排查文件枚举的逻辑,这样能缩小问题范围。
内容的提问来源于stack exchange,提问作者LPatera

