3

我有一个使用 .net c# 的 Web 服务,我想写入服务器上的文本文件,但我无法让它工作。我相信这是一个许可问题。

具体来说,我认为问题在于我正在使用System.IO.Directory.GetCurrentDirectory().

有更好的选择吗?

4

5 回答 5

9

尝试授予 ASP.NET 用户(或任何运行 IIS 的帐户)写入您尝试写入的文件夹的权限。

如果这是网络共享,请尝试以可以写入共享的域用户身份运行 IIS。

记住授予最小权限的原则(不要使用管理员级别的访问权限)。

于 2008-10-24T14:14:39.300 回答
3

如果您没有指定目标文件夹,我假设您的 Web 服务想要写入“C:\Windows\System32\”或类似的东西。这就是为什么会在服务器上抛出 UnauthorizedAccessException 的原因。为了写入 Web 服务的“home”目录,您必须首先找出它在哪里。

以下对我有用,但您也可以在此处找到其他建议。

添加引用 System.Web,并通过调用获取当前目录:

strFileDestination = System.Web.Hosting.HostingEnvironment.ApplicationPhysicalPath + strFileName;

请记住在 IIS 中授予您的服务写入权限。

于 2011-09-28T11:59:12.027 回答
2

Stuart,您可能希望使用 Server.MapPath,而不是使用 System.IO.Directory.GetCurrentDirectory()。您可以为 Server.MapPath 提供相对于您要保存文件的 Web 服务位置的目录,否则您可能需要传递完整的文件路径“C:\Files\file.txt”。至于权限问题,我通常可以通过向 IIS_WPG 和 ASPNET 用户写入文件的文件夹添加写入权限来解决此问题(这些用户名在您的服务器上可能不同)。

于 2008-11-09T21:56:03.810 回答
2

如果您在 Windows 2003 上运行并且尚未打开 ASP.NET 模拟,并且在 DefaultAppPool 或配置为以“网络服务”身份运行的应用程序池中运行应用程序,那么您将需要授予“网络服务”帐户对目标文件夹的写入权限。如果您在使用“网络服务”以外的身份的应用程序池中运行该站点,则该帐户可能需要对目标文件夹的写入权限。

如果您运行的是 Windows 2000,则该'<MACHINENAME>\ASPNET'帐户将需要对目标文件夹的写入权限。

如果您打开了模拟,那么您需要授予站点的匿名用户帐户对目标文件夹的写入权限。

要检查是否启用了模拟,请打开(假设为 ASP.NET 2.0)然后检查您的 machine.config 文件 (C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\CONFIG) 以查看您是否具有以下设置:

<identity impersonate="true"/>

这也可能在您的应用程序的 web.config 中被覆盖。

此外,如果您在部分信任环境中运行,那么您可能只能写入网站的应用程序文件夹,因为默认 FileIOPermission 通常设置为 $AppDir$,即您不能在其他任何地方修改文件,即使使用正确的 NTFS 权限。

如果您正在写入网络共享,那么StingyJack会为您提供答案,但部分信任环境的考虑仍然适用。

但首先检查您的 NTFS 权限,这可能是最好的选择。

希望这有助于凯夫

于 2008-10-24T14:22:33.323 回答
0

您应该能够从 Web 服务写入文件。这很可能是权限或信任问题。如果您处于有限信任(即中等信任)中,请确保您正在写入您的 Web 根目录中或下面的补丁。如果您已经这样做了,或者处于完全信任环境中,请检查以确保该目录具有 IIS 工作进程写入它的权限。

于 2008-10-24T14:16:05.897 回答