Wow wow wow. They all share one DB? If that's the case, no, no, and no. If the DB is NOT shared, then it's definately DLL.
The correct choice is Web Service. The reason is very simple too.
1) Consistency of domain model and business logic. Lets say you store an enum in a column, and you add an enum and deploy to one application. It will now break the other two applications.
2) Ease of deployment. One change = one deployment. If it's a dll, one change = 3 deploy.
3) DB transactions and concurrency control. A lot easier to resolve it in one app domain.
As for Cons suggested by others, I find them being too partial.
1) Difficulty in debugging across app domain. You should publish the possible exceptions through WSDL as fault exceptions. The calling client should handle those fault exceptions appropriately as well. It's also incredibly easy to setup unit tests and mocks on both calling client and server. Breakpoint is not the correct way to debug and work with distributed applications. You can, and it's not difficult. I just don't believe that's the correct approach.
2) Performance. WCF allows you to set different bindings through configuration. From basic http (which is easier to debug) all the way down to named pipe which you can use to obtain near-native call performance. This decision can (nearly. There are a few quirks with different binding that you need to take into consideration.) be decided after development too.
3) Security. Saying WCF doesn't handle security is hilariously wrong.
Lastly, real cons from me:
1) More complex. Agreed. Different context makes application design more difficult. That goes two ways tho. This complexity enforces clear separation of tiers. Presentation context should stay where they are, at presentation level.
2) Require more planning. Designing contracts for WCF Web Services is an art in itself.
3) Management overhead for configuration. Can be daunting for newer developers, but I hope you can get over this hurdle quickly. WCF configuration is a double edged sword, powerful, yet complex (for some).
My personal experience is, anytime a DB is shared and the DLL is used across multiple app domains, I regret that I didn't hammer the dev team enough to go with Web Services route.
So what was your final decision? It's been four years now.