Eureka! I found the problem. The client was sending a request on a socket connection that was already open, and I was only processing messages from new connections. Adding a "Connection: close" to the previous http response solved this problem. The reason I saw the message come in 30 seconds later was because the client actually retransmitted it.
Kirby You can read messages from the Advanced DOTNET archive, unsubscribe from Advanced DOTNET, or subscribe to other DevelopMentor lists at http://discuss.develop.com.