Я исследовал это подробно. Самый простой способ сделать это - использовать подсистему обмена сообщениями Windows (журнал событий Windows - вы создаете свой собственный журнал и пишете в него сообщения). Asp.Net создает сообщение. Затем вам нужно написать службу Windows, которая читает сообщения каждые 3 секунды или около того. В тот момент, когда он сталкивается с сообщением «обновите svn, пожалуйста», вы запускаете cmd.exe / c svn.exe бла-бла из своей только что созданной службы Windows ... она работает очень хорошо, но много работы ... Тогда есть библиотека SharpSVN, но она требует небольшой настройки, и вы можете столкнуться с проблемами. Наконец, большинство людей, кажется, пытаются использовать класс ProcessStartInfo, но немногие, кажется, понимают это правильно ... Да, это не легко и долгий путь, но вот код ...... Вот код, который будет запускать svn. exe для вас и записывать все выходные данные экрана в буфер вывода ....
private static int lineCount = 0;
private static StringBuilder outputBuffer = new StringBuilder();
private void SvnOutputHandler(object sendingProcess,
DataReceivedEventArgs e)
{
Process p = sendingProcess as Process;
// Save the output lines here
// Prepend line numbers to each line of the output.
if (!String.IsNullOrEmpty(e.Data))
{
lineCount++;
outputBuffer.Append("\n[" + lineCount + "]: " + e.Data);
}
}
private void RunSVNCommand()
{
ProcessStartInfo psi = new ProcessStartInfo("cmd.exe",
string.Format("/c svn.exe --config-dir=%APPDATA%\\Subversion --username=yrname --password=yrpassword --trust-server-cert --non-interactive update d:\\inetpub\\wwwroot\\yourpath"));
psi.UseShellExecute = false;
psi.CreateNoWindow = true;
// Redirect the standard output of the sort command.
// This stream is read asynchronously using an event handler.
psi.RedirectStandardOutput = true;
psi.RedirectStandardError = true;
Process p = new Process();
// Set our event handler to asynchronously read the sort output.
p.OutputDataReceived += SvnOutputHandler;
p.ErrorDataReceived += SvnOutputHandler;
p.StartInfo = psi;
p.Start();
p.BeginOutputReadLine();
p.BeginErrorReadLine();
p.WaitForExit();
}
Краткое объяснение аргументов svn.exe и почему мы это делаем ... Вам необходимо указать config-dir для любой учетной записи, которая проверила svn dir. IIS работает под другой учетной записью. Если он не может найти файл конфигурации для SVN, вы получите сообщение об остановке. Неинтерактивный и --trust-сервер-сертификат в основном пропускают запрос, чтобы принять вызовы безопасности. Наконец, вам нужно будет указать имя пользователя и пароль, так как это по какой-то причине не отправляется (в любом случае, с моей версией svn.exe). Кроме того, подключение по протоколу https к серверу svn приводило к ошибкам, поскольку имя хоста, сообщаемое IIS, отличается от имени хоста на рабочем столе (несоответствие ssl-сертификата), поэтому ему не нравится имя хоста в файле конфигурации - см. Рисунок , Итак, я решил, что если я переверну прокси-сервер с http на https (так что теперь у меня есть два веб-сайта на одном сервере, один из которых - reversesvn.domain.com:80 с проксированием к svn.domain.com:8443) Это пропустит все выдача сертификата и это был последний кусок головоломки. Вот как это сделать - просто: https://blog.ligos.net/2016-11-14/Reverse-Proxy-With-IIS-And-Lets-Encrypt.html.