1. I would do it with WCF
2. I would make my program n-tier UI, business logic and DAL
3. I'd make sure that my business logic interacts with the DAL using a consistent data type like datasets or array to minimize the endpoints exposed by my web service
My endpoints with pass a list, dataset, JSON , XML or some data structure that can be easily used by my DAL as long as its consistent to avoid changing the structure of the program too much.
In the client machines you can use a delegate or a small function to call the webservice and translate the data so that you only have to install the UI and the business logic layer on the client machine.