Would you really want your service class as a Singleton? I can understand why you might want to enforce a single instance, but I would still say that a client class would want to be able to create an instance of the object, rather than referencing the static instance property. As a Singleton, you'll be able to get a reference to it from anywhere in your app, which on a large app serviced by multiple developers will inevitably cause code smell - Do you actually need to enforce a single instance? What's the worst that could happen if two or more are created? Might be worth evaluating
If you do decide a single instance must be enforced, create it in a way that still requires an instance to be created by the client class, then set an internal static property that prevents the constructor from running a second time. That way, you have a single instance, and it'll also sit correctly in the rest of your application framework as a proxy.
As for your actions, I think you're definitely going down the right route by creating some kind of abstraction of the base funtionality that each will perform, then subclassing this to add the bit and pieces for each action. I'd probably say that it's worth typing your action objects to an interface though, just in case the implementation in the base class changes, or you want to add another API.
Good luck
