У меня есть веб-приложение ASP.NET, которое пытается выполнить метод CreateRepository в SharpSvn, чтобы новые репозитории можно было предоставлять через веб-интерфейс. Все работает нормально при выполнении приложения из Visual Studio, поскольку оно работает под моей собственной учетной записью, у которой есть права на экземпляр сервера VisualSVN, работающий на моем локальном компьютере. Однако, если я запускаю приложение под IIS на своем локальном компьютере с XP, рабочий процесс 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 (Структурный путь к репозиторию, аргументы SvnCreateRepositoryArgs) +828
SharpSvn.SvnRepositoryClient.CreateRepository(Строковый путь к репозиторию) +53
RepoManager.DataAccess.RepoDataAccess.CreateRepo(Строковый репоИмя, Строковый проектИмя, Сотрудник 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(String eventArgument) +110
System.Web.UI.WebControls.Button.System.Web.UI.IPostBackEventHandler.RaisePostBackEvent(String eventArgument) +10
System.Web.UI.Page.RaisePostBackEvent(источник IPostBackEventHandler) eControl, String eventArgument) +13 System.Web.UI.Page.RaisePostBackEvent(NameValueCollection postData) +36
System.Web.UI.Page.ProcessRequestMain(логическое значение includeStagesBeforeAsyncPoint, логическое значение includeStagesAfterAsyncPoint) +1565
Похоже, что альтернативой является настройка web.config для олицетворения другой учетной записи (например, учетной записи уровня домена), но это кажется многословным, когда все, что я хочу сделать, это предоставить учетной записи aspnet соответствующие права.
Есть ли у кого-нибудь предложения о том, как это можно сделать? Что такого в конфигурации учетной записи aspnet, что делает невозможным предоставление этих прав?
Я не уверен, можно ли решить эту проблему с помощью идентификатора пула приложений, когда он переходит на рабочий сервер, но он по-прежнему не решает проблемы, работающие локально в IIS.