Why Load Balance not work in Hessian C# client calling to hessian service?
When I was migrating our application from C# to Java, our Java service moved ahead of the client application. The client application is in C#. And we export service through Hessian service. So we call java hessian service through C# hessian client.
But we met a big problem on load balance after the new application deployed. The load is never balanced on the C# hessian client’s request. The service is invoked through F5.
After digging into the code of C# hessian, I found the cause: C# Hessian Client uses HttpWebRequest with default properties to call java hessian service, while the default HttpWebRequest’s KeepAlive property is true. That means after the C# client connected to a load balance server, it will keep on calling the same back-end service and the request from this client will not routed to other back-end service.
So the solution is to change the default KeepAlive property in file CHessianMethodCaller.cs
HttpWebRequest req = webRequest as HttpWebRequest;
req.KeepAlive = false; // newly added line to assure load balance work