Indeed there are many options.
Binding
The bindings available from WCF are a set of protocols for common scenarios. It specifies transport, message and security information.
When choosing a binding, you need to find out what feature you need from it.
e.g. you may need a way to
- authenticate the clients since you do not want everyone is able to use your service.
- the data might need to be encrypted.
- the service requires to be interoperable for clients from other platform.
- the overhead of message is becoming an issue.
If you know the clients are always from dot net, you could utilize net tcp binding, that is faster than basicHttpbinding. However, basicHttpBinding is an interoperable protocol, even php or java clients can talk to it without problem.
Define your own requirements for the service and then look for the existing binding to fit your needs, if there isn't any existing binding, you can create your own binding which is called custom binding, it could combine features from different binding together to achieve the objective.
Hosting
IIS is more scalable. If your service does not require the state which has to be hosted in a long run daemon process(windows service or console app), IIS is the choice since it is easy to enable compression and encrytion for your services.
More on Binding
If you want your service to be called within Browser i.e. javascript
WebHttpBinding is good one that dot net defined for you. You can utilize enbableWebScript to make the service understands JSON for javascript.
Availability
If one specific binding can not fulfill all the requirements, you can expose each service in different binding at different endpoints. e.g. host/soap host/nettcp host/json