it depends on your system here, but I would have registered exceptions, probably inside BLL. And remember that you will not catch the "log"! That is - at the end of the catch there will be a retron!
I donโt understand anything at all in the service - itโs just communication with the client - there is no need to insert any IMHO logic into it.
And, of course: catch the expected exceptions when they are thrown, and just let the incomplete pass through.
For example: Scenario 1 - it is possible to catch SqlExceptions, try to process them, and if you do not wrap them in some DAL-Exception and throw them away. Scenario 2 - perhaps catch DAL exceptions from level 3 and see if you can handle them or wrap them again, ...
IMHO, it is almost never recommended to handle, register and disable all types of exceptions ( catch (Exception) ) - after this, the state of the application will be simply undefined.
source share