2008-10-24 55 views
3

我有一个使用.net c#的web服务,我想写入服务器上的文本文件,但是我无法让它工作。我相信这是一个许可问题。我想问题是我正在使用System.IO.Directory.GetCurrentDirectory()从webservices写一个文件

有没有更好的选择?

+0

PLease提供了代码的简化示例。 – 2008-10-24 14:13:40

+0

需要更多的信息,我认为。从你的描述来看,这个问题实际上可能是任何事情。 – TheSmurf 2008-10-24 14:13:58

回答

9

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

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

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

0

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

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烫发,这可能是最好的选择。

希望这有助于 千电子伏

2

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

2

如果您不指定目标文件夹,我假设您的Web服务想要写入“C:\ Windows \ System32 \”或类似的东西。这就是为什么UnauthorizedAccessException会在服务器上抛出。为了写入Web服务的“home”目录,你必须找出第一个地方。

以下适用于我,但您也可以找到其他建议here

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

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

记得给在IIS服务写入权限。