If the attribute InstanceContextMode is not set explicit, the mode depends on the wcf settings. To be more specific, it depends on the "reliableSession and on the "security mode" properties in case of wsHttpBinding.
wsHttpBinding: "ReliableSession = false", and "SecurityMode = none" means it is PerCall.
wsHttpBinding: "ReliableSession = false", and "SecurityMode=Message" means it is PerSession.
wsHttpBinding: "ReliableSession = true", and "SecurityMode=none" means it is PerSession.
basicHttpBinding: It is always PerCall.
If you set the attribute "PerSession" where the settings doesn't allow to use sessions(because of using basicHttpBinding, or because of not using security and relaiability on wsHttpBindng), a exception is thrown at startup.
It is best practice to set the expected InstanceContextMode explicit, then it is clear what wcf will do(either what you say, or fail at startup)
[ServiceBehavior(InstanceContextMode = InstanceContextMode.PerCall)]
class YourService : IYourService
[ServiceContract(Namespace="....", SessionMode=SessionMode.NotAllowed)]
interface IYourSession
Documentation: http://msdn.microsoft.com/en-us/library/system.servicemodel.instancecontextmode.aspx