It depends what you want to do with the service
You could expose functionality in a windows service and consume that from your clients using binary remoting over TCP. This is something we use on an older system, but it's been very successful & performance is excellent.
This would be fine for 'internal users on a LAN', but you wouldn't expose this to the internet
If you want your functionality to be consumed by any client, anywhere - then a web service is probably the way to go
This article is pretty good and compares the different approaches. (It's dated now - 2003 - but the concepts are still valid even if they've been superseded by WCF etc)
http://www.developer.com/net/net/article.php/2201701/NET-Remoting-Versus-Web-Services.htm[
^]
I quite like this diagram at the end
http://www.developer.com/img/articles/2003/05/06/Thiru/Remote4.jpg[
^]
Notice how both the internal and 'internet users' consume the same code, it's just it's exposed to internet users by wrapping in a web service