我有一个 ASP.NET Web 应用程序,它试图在 SharpSvn 中执行 CreateRepository 方法,以便可以通过 Web 界面配置新的存储库。从 Visual Studio 中执行应用程序时,一切运行良好,因为它以我自己的身份运行,该身份有权访问在我的本地计算机上运行的 VisualSVN 服务器实例。但是,如果我在本地 XP 机器上的 IIS 下运行应用程序,那么 asp.net 工作进程会在本地 aspnet 帐户下执行,我似乎无法授予创建存储库的权限。无论我将权限扩展多远(甚至扩展到本地管理员或 VisualSVN 管理员组),SharpSvn 都会不断抛出 SvnAuthorizationException 并且我会在 aspnet 帐户下的安全事件日志中获得相应的条目。
这是代码的作用:
string repoPath = string.Format("{0}{1}", repoFolderPath, repoName);
using (var svnRepoClient = new SvnRepositoryClient())
{
svnRepoClient.LoadConfiguration(repoPath);
svnRepoClient.CreateRepository(repoPath);
}
这导致了这个堆栈跟踪:
[SvnAuthorizationException:无法创建目录'E:\Repositories\TestRepoName':访问被拒绝。]
[SvnAuthorizationException: 无法创建顶级目录]
[SvnAuthorizationException: 存储库创建失败]
SharpSvn.SvnClientArgs.HandleResult(SvnClientContext 客户端,SvnException 错误) +165
SharpSvn.SvnClientArgs.HandleResult(SvnClientContext 客户端,svn_error_t* 错误) +80
SharpSvn.SvnRepositoryClient.CreateRepository(String repositoryPath, SvnCreateRepositoryArgs args) +828
SharpSvn.SvnRepositoryClient.CreateRepository(String repositoryPath) +53
RepoManager.DataAccess.RepoDataAccess.CreateRepo(String repoName, String projectName, Employee creatorEmployee) +183
RepoManager.Web.Default.SubmitButton_Click(Object sender, EventArgs e) +357
System.Web. UI.WebControls.Button.OnClick(EventArgs e) +111
System.Web.UI.WebControls.Button.RaisePostBackEvent(String eventArgument) +110
System.Web.UI.WebControls.Button.System.Web.UI.IPostBackEventHandler.RaisePostBackEvent(String eventArgument) +10
System.Web.UI.Page。 RaisePostBackEvent(IPostBackEventHandler sourceControl,字符串 eventArgument)+13 System.Web.UI.Page.RaisePostBackEvent(NameValueCollection postData)+36
System.Web.UI.Page.ProcessRequestMain(布尔 includeStagesBeforeAsyncPoint,布尔 includeStagesAfterAsyncPoint)+1565
看起来另一种方法是将 web.config 配置为模拟另一个帐户(例如域级别帐户),但是当我想要做的只是授予 aspnet 帐户适当的权限时,它似乎很冗长。
有人对如何做到这一点有任何建议吗?是什么让 aspnet 帐户配置看似不可能授予这些权限?
我不确定当它进入生产服务器时是否可以通过应用程序池标识来解决这个问题,但它仍然不能解决在 IIS 下本地运行的问题。