我有一个ASP.NET Web应用程序,它试图在SharpSvn中执行CreateRepository方法,以便可以通过Web界面配置新的repos。从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:Repository 创作失败]
SharpSvn.SvnClientArgs.HandleResult(SvnClientContext 客户端,SvnException错误)+165
SharpSvn.SvnClientArgs.HandleResult(SvnClientContext 客户端,svn_error_t *错误)+80
SharpSvn.SvnRepositoryClient.CreateRepository(字符串 repositoryPath, SvnCreateRepositoryArgs args)+828
SharpSvn.SvnRepositoryClient.CreateRepository(字符串 repositoryPath)+53
RepoManager.DataAccess.RepoDataAccess.CreateRepo(字符串 repoName,String projectName,Employee creatorEmployee)+183
RepoManager.Web.Default.SubmitButton_Click(对象 发件人,EventArgs e)+357
System.Web.UI.WebControls.Button.OnClick(EventArgs的 e)+111
System.Web.UI.WebControls.Button.RaisePostBackEvent(字符串 eventArgument)+110
System.Web.UI.WebControls.Button.System.Web.UI.IPostBackEventHandler.RaisePostBackEvent(字符串 eventArgument)+10
System.Web.UI.Page.RaisePostBackEvent(IPostBackEventHandler sourceControl,String eventArgument) +13 System.Web.UI.Page.RaisePostBackEvent(NameValueCollection postData)+36
System.Web.UI.Page.ProcessRequestMain(布尔 includeStagesBeforeAsyncPoint,Boolean includeStagesAfterAsyncPoint)+1565
看起来另一种方法是将web.config配置为模拟另一个帐户(例如域级帐户),但是当我想要做的只是授予aspnet帐户适当的权限时,它似乎很冗长。
有没有人对如何做到这一点有任何建议?什么是aspnet帐户配置,使得似乎无法授予这些权利?
我不确定这是否可以通过应用程序池标识解决,当它进入生产服务器但它仍然无法解决在IIS下本地运行的问题。
答案 0 :(得分:1)
您是否检查了尝试创建存储库的位置的NTFS权限?
根据您的asp.net设置,需要创建权限的用户可以是ASP.Net/Network服务帐户或登录用户(匿名互联网用户,或者如果您使用Windows身份验证,则连接到该站点的用户) /
您可以使用web.config
中的设置强制ASP.Net作为特定用户运行答案 1 :(得分:1)
您需要做四件事才能在运行IIS 7的Windows上运行。
即使SharpSVN不需要在机器上安装Tortoise SVN,您也需要它来清除身份验证缓存。右键单击Windows中的任何菜单> TortoiseSVN>设置>保存的数据>单击“清除”进行身份验证。如果您在该计算机(服务器)上使用Tortoise SVN,则每次单击“保存凭据”选项时都需要清除缓存,这会让人烦恼。我通常在我的开发机器上有一个配置选项来硬编码用户。
管理工具> IIS 7>单击应用程序池>右键单击相应的应用程序池,然后选择高级设置>将“Identity”设置为可以通过Active Directory中的Kerberos和NTLM进行身份验证的用户帐户(这取决于浏览器以及浏览器如何建立身份验证票证)
IIS 7>点击网站>身份验证>禁用所有,然后启用“Windows身份验证”
使用此代码进行身份验证。
client.LoadConfiguration(Path.Combine(Path.GetTempPath(), "Svn"), true);
client.Authentication.Clear();
client.Authentication.UserNamePasswordHandlers
+= delegate(object obj, SharpSvn.Security.SvnUserNamePasswordEventArgs args)
{
args.UserName = System.Configuration.ConfigurationManager.AppSettings["svn_user"].ToString();
args.Password = System.Configuration.ConfigurationManager.AppSettings["svn_pass"].ToString();
};
client.Authentication.SslServerTrustHandlers +=
delegate(object sender, SvnSslServerTrustEventArgs e)
{
e.AcceptedFailures = e.Failures;
e.Save = true; // Save acceptance to authentication store
};