You could define a WCF service as a singleton - I would recommend not to do so. You'll get yourself into a lot of trouble - performance and scaling issues, and to solve those, you'll have to deal with multithreaded, thread-safe programming - all pretty messy.
What you should do is use the per-call instantiation setup, and just limit your server to whatever you feel is reasonable. There's a service behavior called "serviceThrottling", which allows you to define things like how many concurrent instances of your service class you want to allow, how many concurrent calls you want to handle etc.
Those values are set pretty low by default, if you have a well equipped server, you can easily crank those up a bit. You define this in your server's web.config like this:
<behaviors>
<serviceBehaviors>
<behavior name="throttled">
<serviceThrottling
maxConcurrentCalls="16"
maxConcurrentInstances="26"
maxConcurrentSessions="10" />
</behavior>
</serviceBehaviors>
</behaviors>
(The values above are the default values)
Read up on service throttling and all its details with these excellent blog posts: