My thought would be to use an xml file or some sort of disk storage so that in case the server goes down you don't loose information.

Locking issues would probably be transatory. I would put the code that opens the xml file in a procedure and have a loop in that procedure that checks to see if the file can be opened. If so, then open it. If not, then wait a few milliseconds and try again. Something along those lines.