I have created my own IConnectionIdGenerator
implementation which for simpicty in my webforms application names the client connection Id by the EmailAddress.ToL
I recently tried to do the same and experienced the same problems, so my conclusion is that the connection id must be unique, otherwise everything starts to fail with repeated 301 and 200 responses.
What I did to workaround this problem was to use the default GUID connection id and instead add the connection to a group which is identified by my own id (email address in your case) after starting the connection.
This way I can call Clients[emailAddress].doSomething()
and it broadcasts to all open tabs of this user.