See the question and my original answer on StackOverflow

My suggestion would be to not rely on the DTC on client machines. The DTC is really useful in a controlled environment, i.e on servers, and this is quite unrelated to .NET (that would be true if you were doing native COM/ADO). Although it could work technically, it's difficult to setup in a reliable way on end-user machines, plus you don't want to deeply tie your server transaction performance to the behavior of client machine/setups.

I suggest you use the "service oriented" approach, like you propose, create a facade stored procedure that hides the distributed work from the client. In other words keep the DTC for server-to-server communications.