It looks like you're new here. If you want to get involved, click one of these buttons!
I setup ACT Webserver and have it running through a loadbalancer at home. When folks hit the webserver URL they get an error 500 session key already used. They can simply refresh and it works fine. My question is how is that session key generated and passed through to the client ? Is it kept track of on the webserver, or is there a cookie or something that passes through to the client ?
Comments
If you're talking about the one built directly into ACT, there's no such thing. It doesn't use sessions or cookies. And that message is not coming from ACT.
ACT uses GET URL variables in AJAX requests. There's not really anything more complicated about it. It's an extremely simple HTTP server written in C#.
500
System.ArgumentException: An item with the same key has already been added.
at System.ThrowHelper.ThrowArgumentException(ExceptionResource resource)
at System.Collections.Generic.Dictionary`2.Insert(TKey key, TValue value, Boolean add)
at Advanced_Combat_Tracker.FormActMain.ActWebConnection.ParseHeaders()
at Advanced_Combat_Tracker.FormActMain.ActWebConnection.ProcessGet()
at Advanced_Combat_Tracker.FormActMain.ActWebConnection.ProcessRequest()
at Advanced_Combat_Tracker.FormActMain.ActWebConnection.Update()
Hmm, in my experience headers are usually unique... but I have seen them duplicated before, I think. Web browsers don't often do it, but maybe the load balancer is. Also, yeah... HEAD isn't implemented, probably also from the load balancer.
I'll add something to overwrite headers if they already exist in the Dictionary to prevent the error.
Reference: https://github.com/EQAditu/AdvancedCombatTracker/issues/7
Ok I think i figured it out, the webserver doesnt appear to like connection multiplexing... I.E. -> One TCP connection from the backend of the load balancer for all clients connected... So I created a special HTTP profile as a workaround and it looks like its fixed.
The webserver is HTTP/1.0 and does not support connection keep-alive. I couldn't get it to work for all browsers at the same time, so I discarded the implementation. Every request regardless of source will be a new connection as the ACT webserver will always respond with Connection: close and close the socket.
Yep, I just happened to look at the headers and saw 1.0 thats when the lightbulb turned on. So I just modified the way the back-end of the netscaler talked to the webserver and voila' !
Next Im putting it behind a unified gateway.. So I can use AD authentication to restrict access. I have too much time on my hands....
Again thanks for a bangin' product. Just dropped ya 20$ in paypal on the donate page. Go get a pizza ! (or a beer or two)