Our product has two clients, a website and a windows application. Both clients need to share the data access layer because it contains some of our complex business logic that we do not wish to duplicate. Should this layer be exposed as a WCF service, or put into a shared .dll and deployed with both clients? what are the advantages/disadvantages of both?
The first aspect is security: if you have all your code running locally in your web server, and it gets hacked (which has been known to happen...) then the attacker has access to your DB and all the goodies it contains, or contained as would shortly occur afterwards.
If your code is in a web service, then the attacker has a much harder time snooping around your DB.
The disadvantage of course is that web services is a rather slow protocol, if you have a remote service that just you are accessing (ie no need for interoperability) then you should use a faster, more lightweight protocol - a simple RPC, socket or messaging system would be a better choice for the same result.