Сбросить IIS на нескольких серверах одновременно вместо циклического перебора - PullRequest
1 голос
/ 25 февраля 2009

Я пытаюсь сбросить IIS на нескольких серверах одновременно, вместо того, чтобы перебирать и сбрасывать каждый из них по отдельности, но я не могу понять, как это сделать. Может ли кто-нибудь дать мне пример? Спасибо

Я использую System.Diagnostics

            With m_Process.StartInfo
                .FileName = strFileName
                .Arguments = String.Format("{0}{1}", server, strArguements)
                .UseShellExecute = False
                .CreateNoWindow = True
                .RedirectStandardError = True
                .RedirectStandardOutput = True
            End With

Ответы [ 3 ]

0 голосов
/ 25 февраля 2009

На каком-то уровне вам нужно перебрать список серверов и отправить каждому сообщение, чтобы дать им команду на сброс. Делаете ли вы это, запустив iisreset с каждым именем сервера или каким-либо другим способом, вы не сможете заставить цикл исчезнуть.

Однако, если вы просто говорите, что хотите начать сброс всех серверов как можно быстрее, а не ждать, пока первый завершит сброс, прежде чем начинать сброс второго, похоже, у вас это уже есть. Когда вы вызываете m_Process.Start (), он должен вернуться, как только начнется новый процесс iisreset. Насколько я вижу, он не блокируется и не ждет выхода из iisreset. Поэтому процессы iisreset уже должны выполняться параллельно.

0 голосов
/ 01 октября 2009

Если я понимаю, о чем вы спрашиваете, все в порядке с помощью серверов, но вы просто не хотите ждать завершения каждого сервера, прежде чем переходить к следующему. Поскольку ProcessStartInfo не позволяет каким-либо образом отсоединиться от запускаемого вами процесса (было бы неплохо, если бы он это сделал), вы можете сделать это следующим образом (очевидно, пропуская ваши параметры и тому подобное):

Imports System.Threading

Class Restarter

    Sub Main()

        Dim ServerList As New List(Of String)

        For Each server As String In ServerList
            ThreadPool.QueueUserWorkItem(AddressOf RestartServer, server)
        Next
    End Sub

    Sub RestartServer(ByVal Server As String)

        Dim m_Process As System.Diagnostics.Process

        With m_Process.StartInfo
            .FileName = strFileName
            .Arguments = String.Format("{0}{1}", Server, strArguements)
            .UseShellExecute = False
            .CreateNoWindow = True
            .RedirectStandardError = True
            .RedirectStandardOutput = True
        End With

        m_Process.Start()

    End Sub

End Class
0 голосов
/ 25 февраля 2009

Сегодня я видел несколько вопросов с похожими условиями ( "вместо зацикливания" ), и я пытался выяснить, в чем заключается проблема с зацикливанием. Поскольку iisreset (который, как я предполагаю, назначен strFileName в вашем примере) принимает одно имя машины, вам не повезло в этом отделе.

Я бы предположил, что iisreset подключается к SCM на целевом сервере и перезапускает IIS Admin и зависимые службы.

Полагаю, вы могли бы запустить свой собственный iisreset.exe, который занимал несколько серверов в командной строке, но для этого вам пришлось бы использовать какую-то итерацию.

Не могли бы вы объяснить, почему вы не можете или не хотите зацикливаться?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...