Тайм-аут соединения SMO сервера Sql не работает - PullRequest
1 голос
/ 02 мая 2010

У меня есть следующий код PowerShell:

function Get-SmoConnection
{
    param 
        ([string] $serverName = "", [int] $connectionTimeout = 0)

    if($serverName.Length -eq 0)
    {
        $serverConnection = New-Object `
            Microsoft.SqlServer.Management.Common.ServerConnection
    }
    else
    {
        $serverConnection = New-Object `
            Microsoft.SqlServer.Management.Common.ServerConnection($serverName)
    }

    if($connectionTimeout -ne 0)
    {
        $serverConnection.ConnectTimeout = $connectionTimeout
    }

    try
    {
        $serverConnection.Connect()
        $serverConnection
    }
    catch [system.Management.Automation.MethodInvocationException]
    {
        $null
    }


}

$connection = get-smoconnection "ServerName"  2

if($connection -ne $null)
{
    Write-Host $connection.ServerInstance
    Write-Host $connection.ConnectTimeout
}
else
{
    Write-Host "Connection could not be established"
}

Кажется, что это работает, за исключением части, которая пытается установить время ожидания SMO-соединения. Если соединение установлено успешно, я могу убедиться, что для ServerConnection.ConnectTimeout установлено значение 2 (секунды), но когда я подставляю поддельное имя для экземпляра SQL Server, он все равно пытается подключиться к нему в течение ~ 15 секунд (что, я считаю, значение тайм-аута по умолчанию).

У кого-нибудь есть опыт установки таймаута SMO-соединения? Заранее спасибо.

1 Ответ

0 голосов
/ 04 мая 2010

Я не могу воспроизвести поведение, которое вы видите. Если воссоздать вашу функцию как скрипт, а не функцию, свойство ConnectionTimeout, похоже, будет работать независимо от того, является ли параметр имени сервера фиктивным или нет:

Measure-Command {./get-smoconnection.ps1 'Z03\sq2k8' 2}
...