我有一个Azure文件存储帐户,我创建了一个共享。我有2个Azure VM,一个运行SQL服务器,一个运行IIS和一个Windows服务(用c#.net 4.5.1编写)。我需要它们来访问共享以共享文件。我已阅读了几篇文章,并尝试使用cmdkey保留凭据并使用net use映射驱动器。我遇到了两个问题。
在SQL VM上,一切似乎都运行正常。它正在将文件写入共享,我在那里遇到了很多麻烦。在另一台VM上我遇到了问题。首先,坚持的位似乎并没有真正发挥作用。我运行它,验证它已存储(当我执行cmdkey / list时显示,并在凭证管理器中显示),我可以使用net use映射驱动器。它出现。我可以浏览资源管理器中的驱动器,但是如果我退出机器,那么当我重新登录时它不会重新连接。一旦我退出虚拟机,连接似乎就会丢失,直到我再次运行net use 。其次,即使我可以浏览到该文件夹,Windows服务也无法找到它。我已经验证了它正在寻找的路径是正确的。我将其复制并粘贴到资源管理器窗口中,然后直接进入该文件夹。我尝试将服务作为本地系统运行,因为我登录到VM的帐户...所有给出路径未找到错误。至于我能够找到的,我唯一需要的两件事就是cmdkey命令和net use命令,驱动器应该可用并自动重新连接。我错过了什么吗?
编辑:我忘了提及,如果我在同一台机器上将该服务作为控制台应用程序运行,它会找到该文件夹并正常运行。作为服务运行,它没有。它被配置为能够使用http://www.dontpaniclabs.com/blog/post/2011/10/20/running-a-service-as-an-application/
中找到的方法运行答案 0 :(得分:0)
我自己也遇到了同样的问题,我在Stack Exchange上发布但没有回答。
问题是映射网络驱动器或网络共享UNC仅对创建它的用户持久,而cmdkey存储的凭据也只对创建它的用户持久。
这就是为什么当您登录VM并访问持久凭据时,您可以导航到共享或将其用作映射的网络驱动器。但是,作为Windows服务安装的应用程序将无法使用该共享,因为它没有凭据可以执行此操作。
我解决这个问题的方法是,我在我的VM上创建了一个本地用户,其用户名设置为访问我的StorageAccount FileShare所需的用户名,并将密码设置为StorageAccount访问密钥。然后,我将Windows服务设置为以此用户身份运行,而不是作为本地系统帐户运行。
我想这对您的IIS实例也是同样的问题。默认情况下,您的IIS将使用具有默认" ApplicationPoolIdentity"的ApplicationPool。用户。您可以将此用户更改为也以新创建的本地用户身份运行。
编辑: 上述Windows用户解决方案仅在您的StorageAccount名称长度低于20个字符时才有效,因为这是Windows用户名的限制
还有另一种解决方法。您可以更改代码,以便在调用UNC或映射网络驱动器时,它可以通过身份验证所需的凭据。
我刚试过以下链接中的示例,效果很好。