Distributed transaction in .NET program (MS-DTC config?!?) or rather in stored procedure via linked server?
See the question and my original answer on StackOverflowMy 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.