我在以前没有使用的网络中编写了一个新的应用程序,并且遇到了问题。
如果我有以下C#代码:
FileStream fs = File.Create(@"\\MyServer\MyShare\testing.txt");
fs.Close();
在控制台应用程序中,此代码可以正确执行。
在ASP.Net应用程序中,我收到此错误:登录失败:未知用户名或密码错误。
在ASP.Net应用程序中,如果我添加了标识impersonate =“true”,我会收到此错误:拒绝访问路径'\ MyServer \ MyShare \ testing.txt'。
我以前从未遇到过登录失败消息;这是从哪里来的?如果我在服务器上创建一个应用程序并将其写入phsyical位置,它工作正常(因此安全性很好),看起来好像共享的安全性不起作用(即使它有'Everyone'集完全写入,或者在服务器级别缺少一些我不允许查看任何内容的东西。
有谁知道我在这里缺少什么?我已经编写了其他类似的东西并且从未遇到过这个问题的应用程序
谢谢!
答案 0 :(得分:1)
<强>更新强>
所以我觉得我发布这个太快了...它在我的localhost上失败的原因是由于目录被设置为允许匿名访问(所以页面没有模仿;用户是'')。 / p>
它也开始在服务器上工作;然而,那里没有任何改变...我不知道在应用程序的停机/关机期间是否触发了什么,或者什么,但一切都按预期工作。
感谢您的评论!
答案 1 :(得分:0)
问题是,如果将身份模拟设置为false,则ASP.NET辅助进程帐户将尝试写入共享,通常是NETWORK SERVICE或ASPNET帐户。取决于您正在运行的Windows版本。
将impersonate设置为true,而不指定用户名或密码将使用当前用户身份验证来尝试发出请求。
您需要A授予工作进程帐户权限,这很可能是不可能的。或者B创建应用程序可以模拟的特定帐户,然后在身份标记中指定web.config中的凭据。
答案 2 :(得分:0)
默认情况下,ASP.NET应用程序作为 YourMachine \ IUSR_ YourMachine运行。您必须打开对Everyone主体的共享权限(仍可能如果计算机不在同一个域上,则无法运行),或者将IIS应用程序作为有权访问共享的人运行。
您可以通过以下方式更改运行ASP.NET应用程序的用户:
。打开管理工具 - &gt; Internet信息服务然后右键单击包含该应用程序的网站或虚拟目录,然后单击属性。选择目录安全性标签,然后点击修改。最后,在匿名访问部分中,键入有权访问该共享的用户的用户名和密码。
麦克