Поскольку ваши комментарии стали более конкретными, я также должен добавить следующее. Если вы создаете класс, подобный следующему:
public class PartitionResolver : System.Web.IPartitionResolver
{
private String[] partitions;
public void Initialize()
{
// create the partition connection string table
// web1, web2
partitions = new String[] { "192.168.1.1", "192.168.1.2" }; // keep adding servers
}
public String ResolvePartition(Object key)
{
String oHost = System.Web.HttpContext.Current.Request.Url.Host.ToLower().Trim();
if (oHost.StartsWith("10.0.0") || oHost.Equals("localhost"))
return "tcpip=127.0.0.1:42424";
String sid = (String)key;
// hash the incoming session ID into
// one of the available partitions
Int32 partitionID = Math.Abs(sid.GetHashCode()) % partitions.Length;
return ("tcpip=" + partitions[partitionID] + ":42424");
}
}
... и затем в вашем файле web.config вы добавляете что-то вроде следующего:
<sessionState mode="StateServer"
partitionResolverType="NameSpaceName.PartitionResolver"
cookieless="false"
timeout="60" />
... и следуйте инструкциям:
http://www.c -sharpcorner.com / UploadFile / gopenath / Page107182007032219AM / Page1.aspx
... и создать идентичный ключ компьютера на всех ваших веб-серверах; тогда вам не потребуется состояние сеанса SQL, и у вас будет общее состояние сеанса, которое вы можете распределить по нагрузке на любое количество серверов состояний, которые вам могут потребоваться.
Все, что вам нужно будет сделать, это обновить эту строку:
partitions = new String[] { "192.168.1.1", "192.168.1.2" }; // keep adding servers
... и у вас может быть несколько веб-серверов, использующих одни и те же серверы состояний, поэтому даже если по какой-либо причине вы переключаете веб-серверы, вы все равно будете поддерживать сеанс. А также, поскольку вы видите замедление сеанса, просто продолжайте добавлять серверы состояний.