StreamWriter 抛出 IOException 登录失败:未知用户名或密码错误
Posted
技术标签:
【中文标题】StreamWriter 抛出 IOException 登录失败:未知用户名或密码错误【英文标题】:StreamWriter throws IOException Logon failure: unknown user name or bad password 【发布时间】:2017-07-15 04:30:09 【问题描述】:我正在尝试让我的网络服务写入我们内部网上的共享驱动器。我的 StreamWriter 上出现 IOException
string fullpath = path + "\\" + fileName;
using (System.IO.StreamWriter file = new System.IO.StreamWriter(fullpath, append))
file.WriteLine(contents);
file.Close();
我看到的例外,
IOException - Logon failure: unknown user name or bad password
如果我的理解正确,IIS Web 服务器的用户需要有权写入共享驱动器。我想知道是否有一种方法可以暂时对凭据进行硬编码,以写入共享驱动器以进行调试。如何向 StreamWriter 提供凭据,或者我应该使用其他机制?
我研究了模拟 (using StreamWriter on server in C#),并希望尽可能将其用作最后的手段。
【问题讨论】:
与文件交互的服务是否试图访问它没有文件级访问权限的文件?例如如果您使用相同的用户帐户,您可以打开文件吗? 为了澄清上述评论,用户/服务帐户将用于请求文件,因此 IIS 服务器运行应用程序池的任何用户都需要对该文件的权限。如果这是由 Active Directory 用户和 Windows 权限管理的,也许可以与系统管理员聊天并请求这些权限? @Joe_DM 是的,我认为这需要由系统管理。行政。我只是想今晚继续工作,想知道是否有其他方法可以提供凭据。 我看到一个答案已经发布。我不知道这是否可行,但值得一试。您可以出于测试目的将应用程序池设置为在您的个人凭据下运行以进行测试...尽管您应该自动提醒以确保您不会忘记稍后将其设置回来并最终在某些事情开始时挠头在本地与生产中的工作方式不同 【参考方案1】:每当您以编程方式写入网络驱动器时,您都会使用用于启动程序的用户名和密码。除非您使用的是域,否则这将产生错误,因为网络驱动器无法识别您的用户名和密码。
因此,要解决此问题,您只需运行与其他用户相同的代码即可。这基本上是您想要避免的模拟内容,但我找到了一个 useful Stack Overflow Thread 对此进行了解释,并提供了指向包装类的链接,您可以在代码中使用以使事情变得更简单。
就这么简单(来自thread):
using (Impersonation.LogonUser(domain, username, password, logonType))
// do whatever you want as this user.
这应该可以解决您的问题
【讨论】:
以上是关于StreamWriter 抛出 IOException 登录失败:未知用户名或密码错误的主要内容,如果未能解决你的问题,请参考以下文章