My situation is that I have a “service application” that is a console application which gets launched by Agent tasks at various times.
Now my requirements have changed a bit and what I thought would only be run by a task scheduler needs to be invoked by a client application running on the intranet.
One problem is that the service uses .NET 4.0 (as opposed to Client Profile) and I don’t want to impose that into an installer and even if I did I don’t want the chance of different versions executing. For this reason, pushing the code into a library seems wrong.
Another problem is that currently I control the scheduling of Agent tasks so I never tried to design the functionality such that more than one instance of the service would be executing a command at the same time. There’s no logic that specifically depends on this being the case but I don’t feel good about assuming it will all work – it just wasn’t designed to work that way.
Basically, I know what needs to be done here. What I’m asking is what is the modern and efficient way to accomplish it. Should I look at WCF? Is there a really simple way that I’m overlooking?
Here’s a picture of what I’m thinking to hopefully make it clearer.

WCF should be a right choice and it is simple and powerful.
Client profile supports it – http://msdn.microsoft.com/en-us/library/cc716765.aspx
Number of instances and services are controlled in WCF using behaviors.
Configuration below should guarantee that only one method is run at the same time. You may play with parameters (remove
maxConcurrentCalls="1") if it is fine to run several methods at the same time but only one instance should be executed.