WCF service and database
SqlConnection, SqlCommand, etc. all implement IDisposable and thus they should be encapsulated in using blocks. Instead you tie SqlConnection to a singleton class, which is the opposite of that.

Here's how they should be used:

using (SqlConnection con = new SqlConnection(connectionString))
{
    con.Open();

    using (SqlCommand command = new SqlCommand("SELECT TOP 2 * FROM Dogs1", con))
    using (SqlDataReader reader = command.ExecuteReader())
    {
        while (reader.Read())
        {
            Console.WriteLine("{0} {1} {2}",
            reader.GetInt32(0), reader.GetString(1), reader.GetString(2));
        }
    }
}