Rookie Andrew Cogliano also scored for the Oilers while Adrian Aucoin responded for the Flames.
The game was scoreless until the final minute of the first period. A shot got behind Calgary starter Curtis McElhinney and laid on the goal-line for about three seconds before Cogliano was able to fight his way through a crowd and nudge it in with 48 seconds left in the period. It was Cogliano's fourth goal of the preseason.
Edmonton had a chance to add to their lead when Ales Hemsky was awarded a penalty shot, but his attempt sailed over the net.
Soray added a power-play goal with 28 seconds left in the second period.
Aucoin scored just before the 8-minute mark of the third period to make it 2-1. Calgary had some good late chances to even the game up but Edmonton was able to hang on for the win.