I found a way to fix the issue, here it is:
ChannelFactory<IRequestChannel> factory;
IRequestChannel channel;
Binding binding = GetBindingFromConfig( bindingName );
EndpointAddress address = new EndpointAddress( endpointAddress );
factory = new ChannelFactory<IRequestChannel>( binding, address );
// Since this endpoint uses sessions, we have to allow sessions to prevent an exception.
factory.Endpoint.Contract.SessionMode = SessionMode.Allowed;
factory.Open();
channel = factory.CreateChannel( address );
channel.Open();
responseMessage = channel.Request( requestMessage );
Credits: http://blogs.msdn.com/b/drnick/archive/2007/06/25/changing-the-channelfactory-contract.aspx