![Windows Azure:虚拟机之间的文件共享、命名管道](https://linux22.com/image/799336/Windows%20Azure%EF%BC%9A%E8%99%9A%E6%8B%9F%E6%9C%BA%E4%B9%8B%E9%97%B4%E7%9A%84%E6%96%87%E4%BB%B6%E5%85%B1%E4%BA%AB%E3%80%81%E5%91%BD%E5%90%8D%E7%AE%A1%E9%81%93.png)
我无法让命名管道在 Azure 中的单个 VM 或 2 个 VM 中工作。可用性集不是一种选择。
因此,如果虚拟机名称为 testVM.cloudapp.net,则命名管道会因用户名或密码不正确而失败。如果我们使用 testVM 而不是 FQDN,则命名管道可以正常工作。
没有虚拟网络,我们已经正确设置了防火墙(甚至将其关闭)。
添加一个 lmhosts 文件,将内部 ipaddress 映射到 testVM.cloudapp.net 并不能解决这个问题。访问 \testVM.cloudapp.net 要求进行身份验证并失败。但 \testVM 可以工作。我该如何设置才能使其工作。一旦它工作正常,我想将其扩展到多个虚拟机。
答案1
命名管道仅在同一台物理机器上工作。(它们读取/写入内存块)
在 Azure 上,无法保证两台虚拟机位于同一台物理机器上*(而且我怀疑即使它们位于同一台物理机器上,它们是否被允许共享内存)。
因此,你需要使用一些基于 IP 的 Web 服务(tcp、http、AMPQ)
如果您想要共享文件,最好写入 Azure blob 存储并让您的第二台 VM 从中读取。Web 服务通常不擅长处理大块数据(通常 >2MB)
*我猜他们不会将它们放在同一台物理机器上,因为那将是一个单点故障,在这种情况下,更大的实例将是更好的选择。
更新
如果您使用WCF 命名管道绑定(NetNamedPipesBinding)您只能在单台机器上使用它。
你能使用Windows 命名管道跨越机器边界,因为它会回退到 tcp。(如果您使用 WCF,那么在跨越机器边界时,您应该选择基于 tcp 的绑定)更多详细信息这里。