Если я правильно понимаю, вы хотите, чтобы сеанс пользователя истек из-за неактивности, но постоянный опрос поддерживает сессию живой. Знаете ли вы, какие критерии вы хотите использовать, чтобы определить, что пользователь неактивен?
Одна вещь, которую вы могли бы сделать, это сохранить DateTime LastUserInput как отдельную переменную сеанса. Переведите время ввода данных пользователя в чат, обновите эту переменную. Затем при каждом запросе получайте TimeSpan, сравнивая DateTime.Now - Session ["LastUserInput"], и если истекшее время>>, чем бы вы не хотели, чтобы TimeOut был, вы можете программно убить их сеанс.
Обновлено для предоставления примера кода
[WebMethod]
[ScriptMethod(ResponseFormat = ResponseFormat.Json)]
public string getContactList(object userID)
{
CheckUserInputTimeout();
string respuesta = "";
try
{
//your code
}
catch { respuesta = "error"; }
return respuesta;
}
private void ResetUserInputTimeout()
{
//Call this function from wherever you want to accept user input as a valid indicator that the user is still active
Session["LastUserInput"] = DateTime.Now;
}
private void CheckUserInputTimeout()
{
int iTimeoutInMinutes = 15;
DateTime dtLastUserInput = DateTime.Now;
if (Session["LastUserInput"] != null)
dtLastUserInput = (DateTime)Session["LastUserInput"];
TimeSpan tsElapsedTime = new TimeSpan(DateTime.Now.Ticks - dtLastUserInput.Ticks);
if (tsElapsedTime.TotalMinutes >= iTimeoutInMinutes)
Session.Abaondon();
}