1

我一直在尝试在 Symfony 2.3 中为不同的 MSSQL Server 创建一个循环,但是如果某些服务器关闭或 MSSQL 服务关闭,应用程序不会产生异常并且它会破坏该功能。

这是主控制器:

function pruebaconAction()
{
    $enlistaServers = new array (
                                 10.10.10.1, 
                                 10.10.10.2, 
                                 10.10.10.3, 
                                 ...
                                 10.10.10.19,
                                 10.10.10.20
                                );

    foreach($enlistaServers as $datosServer)
    {
        $direccionIPParaConexion = $datosServer->getDireccionIp ();
        $nombreLocalidad = $datosServer->getNombre();
        register_shutdown_function(array($this, 'conectaSrv'), $direccionIPParaConexion, $nombreLocalidad);
    }
    return $this->render("GastoEnlaceBundle:Default:pruebacon.html.twig");
}

此函数创建连接:

function conectaSrv($direccionIpConexion, $nombreLocalidad)
{
    $pruebaDBAL = new \Doctrine\DBAL\Configuration();
    $parametrosConexion = array(
        'dbname' => 'MyDB',
        'user' => 'user',
        'password' => 'password',
        'host' => $direccionIpConexion,
        'driver' => 'pdo_sqlsrv'
    );
    $conexionDBAL = DriverManager::getConnection($parametrosConexion, $pruebaDBAL);
    if($conexionDBAL->connect())
        echo "Success<br />";
    else
        throw new Exception("Something is wrong :(<br />");
    echo "=======================================================================<br />";
}

我总是得到相同的结果,对于所有在线服务器,连接成功,但如果某些服务器离线,则该函数永远不会发送异常并且它会中断循环。

我希望有人可以帮助我或给我建议,非常感谢。

4

1 回答 1

0

register_shutdown_function 在脚本执行完成或调用 exit() 后注册要执行的回调

所以我认为即使你得到它也不能操作新的连接。恕我直言,更好的方法是创建自己的服务来处理数据库连接并且不使用 this->getDoctrine()。在此服务中,您可以调用不同的实体管理器(每个 ip 一个)并检查异常。如果出现异常,您可以使用另一个实体管理器来运行查询并将其设置为默认值;

于 2013-12-05T07:45:54.140 回答