As far as I am aware, the only recommendation NHibernate has regarding exception handling is described here:
http://www.hibernate.org/hib_docs/nhibe ... exceptions
The nature of most windows services is that they do the same thing over and over again. Therefore, running some form of an infinite loop is not unreasonable. Of course, you don't want to be hitting your database every millisecond. Depending on your need, I found that using a timer works for me. A few of my applications hit the database every few minutes to see if there is any work to do; if so, do it; if not, sleep and wait. If the database is not there... well, sleep and wait anyway.
Hope this helps.