The message is getting unlocked while you are a processing it. The right place to set the lock timeout for the message is on the QueueDescription
http://msdn.microsoft.com/en-us/library/microsoft.servicebus.messaging.queuedescription.lockduration.aspx
The max time allowed here is 5 Minutes, so if you need to process the message for longer then you can call RenewLock
on the message to continue to keep it invisible to other consumers. You are right in that calling Complete
before you have finished processing is not advisable as if you process crashes then you will not get the message back again.
The above mentioned property of BrokeredMessage.ScheduledEnqueueTimeUtc
is used to "delay" when a message shows up to consumers from the Queue. Say you send a message on Day 1 and set the scheduled time to day 2 then the message will not be returned by the Recieve
call until Day 2.