There are a number of tools for this.
Try TcpView from www.sysinternals.com for one.
When the process listening on a port is loaded within
a service host wrapped you sometimes have to follow
a trail to actually pin it down, but the newer version
of the mentioned tool now automates much of that.