SharpSvn内でCreateRepositoryメソッドを実行しようとしているASP.NETWebアプリがあるので、Webインターフェイスを介して新しいリポジトリをプロビジョニングできます。Visual Studio内からアプリを実行すると、ローカルマシンで実行されているVisualSVNサーバーインスタンスに対する権限を持つ自分のIDで実行されているため、すべてが正常に実行されます。ただし、ローカル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:\ Repository \ TestRepoName'を作成できません:アクセスが拒否されました。]
[SvnAuthorizationException:トップレベルディレクトリを作成できませんでした]
[SvnAuthorizationException:リポジトリの作成に失敗しました]
SharpSvn.SvnClientArgs.HandleResult(SvnClientContext client、SvnException error)+165
SharpSvn.SvnClientArgs.HandleResult(SvnClientContext client、svn_error_t * error)+80
SharpSvn.SvnRepositoryClient.CreateRepository(String repositoryPath、SvnCreateRepositoryAr
SharpSvn.SvnRepositoryClient.CreateRepository(String repositoryPath)+53
RepoManager.DataAccess.RepoDataAccess.CreateRepo(String repoName、String projectName、EmployeecreatorEmployee)+183
RepoManager.Web.Default.SubmitButton_Click(Object sender、EventArgs e)+357System.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)+10System.Web.UI.Page
。 RaisePostBackEvent(IPostBackEventHandler sourceControl、String eventArgument)+13 System.Web.UI.Page.RaisePostBackEvent(NameValueCollection postData)+36
System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint、Boolean includeStagesAfterAsyncPoint)+1565
別のアカウント(ドメインレベルのアカウントなど)になりすますようにweb.configを構成することもできますが、aspnetアカウントに適切な権限を付与するだけの場合は冗長に見えます。
誰かがこれをどのように行うことができるかについて何か提案がありますか?これらの権利を付与することを一見不可能に見えるようにするaspnetアカウント構成についてはどうですか?
これが本番サーバーに移行するときにアプリプールIDを介してこれに対処できるかどうかはわかりませんが、IISでローカルに実行されている問題には対処できません。