public ServiceEnvironmentEventListener ListenForEvents(params ServiceEnvironmentEventType[] eventTypes) { ServiceEnvironmentEventListener listener = new ServiceEnvironmentEventListener(this, eventTypes); RegisterEventListener(listener); return(listener); }
internal void UnregisterEventListener(ServiceEnvironmentEventListener listener) { var env = EnvironmentConfiguration; using (var connection = new SqlConnection(env.ConnectionString)) { connection.Open(); var command = new SqlCommand(env.SP_EnvironmentEventListenerUnregister, connection) { CommandType = CommandType.StoredProcedure }; command.Parameters.AddWithValue("@listenerID", listener.ListenerID.ToString("N")); command.ExecuteNonQuery(); } }
internal void RegisterEventListener(ServiceEnvironmentEventListener listener) { var env = EnvironmentConfiguration; using (var connection = new SqlConnection(env.ConnectionString)) { connection.Open(); using (SqlTransaction transaction = connection.BeginTransaction()) { try { var command = new SqlCommand(env.SP_EnvironmentEventListenerRegister, connection, transaction) { CommandType = CommandType.StoredProcedure }; foreach (ServiceEnvironmentEventType eventType in listener.EventTypes) { command.Parameters.AddWithValue("@listenerID", listener.ListenerID.ToString("N")); command.Parameters.AddWithValue("@eventType", eventType.ToString()); command.Parameters.AddWithValue("@endpointName", listener.WcfHost.Description.Endpoints.First(endpoint => endpoint.Name == typeof(ServiceEnvironmentEventListener).FullName).Name); command.Parameters.AddWithValue("@endpointAddress", listener.WcfHost.Description.Endpoints.First(endpoint => endpoint.Name == typeof(ServiceEnvironmentEventListener).FullName).Address.ToString()); command.ExecuteNonQuery(); } transaction.Commit(); } catch (Exception ex) { try { transaction.Rollback(); } catch { } listener.Close(false); throw new ServiceEnvironmentException("Could not register listener in environment database. The listener has been closed. See inner exception for details.", ex); } } } }