NDCs are managed on a per-thread basis - that means that if you push the session ID onto the stack in one thread and then call a method in another thread your session ID won't be present.
It's hard for me to answer without the context of your code... If you post your code I could probably provide a specific answer.