У меня немного странное поведение в asp.net
веб-приложении, которое приводит к потере состояния сеанса.
Процесс
Пользователь входит в приложение, и сеанс установлен. Затем они заполняют 1 поле, и приложение затем выполняет веб-службу AJAX POST
.asmx
. В веб-службе я использую HttpWebRequest
для получения данных с другого сервера.
Эти данные затем выводятся в браузер.
Затем заполняются еще несколько полей, а затем данные снова Post
в тот же веб-сервис через AJAX POST
.
Задача
Сразу после HttpWebRequest
я получаю имя пользователя из переменной сеанса. Это работает.
Однако при следующем запросе AJAX
сеанс больше не существует.
Во время тестирования я удалил этап, на котором вызывается HttpWebRequest
, и мой сеанс никогда не теряется. Поэтому по какой-то причине сеанс удаляется ПОСЛЕ моего первого AJAX POST
и до второго AJAX POST
, только если я запускаю код HttpWebRequest
.
Код
Я не делаю ничего необычного в коде. Просто делаю простую JQuery AJAX Post
$. Ajax ({
URL: метод,
данные: параметры,
тип: "POST",
contentType: "application / json; charset = utf-8", dataType: "json",
success: function (data) {
// обрабатывать данные
},
error: function (xhr, status, error) {}
});
Создание System.Net.HttpWebRequest
и затем получение System.Net.HttpWebResponse
из этого.
Затем чтение переменной сеанса dim username as string = Session(_SESSION_USERNAME).ToString()
Я никогда раньше не замечал такого поведения при использовании HttpWebRequest
(хотя AJAX не использовался)
Function Backfill(value As String) As Details
Dim details As Details = Nothing
Dim appSettings As ConfigSettings.AppConfig = ConfigSettings.AppConfig.getConfig()
Dim url As String = appSettings.Settings.BackfillUrl
Dim username As String = appSettings.Settings.BackfillUser
Dim password As String = appSettings.Settings.BackfillPass
Dim expParameters As String = ""
Dim xml As XmlDocument = Nothing
Dim xmlHttp As XMLHTTP = Nothing
Dim nodeList As XmlNodeList = Nothing
Dim node As XmlNode = Nothing
Dim response As String = ""
Dim success As String = ""
'
' REMOVED TO HIDE INFO
expParameters = "<PARAMETERS>" & _
"</PARAMETERS>"
Try
xmlHttp = New XMLHTTP()
xmlHttp.open("POST", url)
xmlHttp.Send(expParameters)
response = xmlHttp.responseText()
xml = New XmlDocument
xml.LoadXml(response)
SaveExperianFile(xml, value)
nodeList = xml.DocumentElement.ChildNodes
node = nodeList.Item(0)
success = node.Attributes.GetNamedItem("success").Value.ToString.Trim
If success.ToLower.Trim = "y" Then
details = SetDetails(xml)
End If
Catch ex As Exception
Finally
If Not xmlHttp Is Nothing Then
xmlHttp.Dispose()
xmlHttp = Nothing
End If
End Try
Return details
End Function
редактировать
Код класса XMLHTTP можно увидеть здесь http://codepaste.net/ymnqsf
редактировать
Кажется, что-то странное происходит, когда я сохраняю XMLDocument
в моей файловой системе.
Private Sub SaveExperianFile(xml As XmlDocument, value As String)
Dim appConfig As ConfigSettings.AppConfig = ConfigSettings.AppConfig.getConfig()
Try
xml.Save(HttpContext.Current.Server.MapPath(appConfig.Settings.SavePath & value & "_backfill.xml"))
Catch ex As Exception
End Try
End Sub
Если я не вызываю этот метод, тогда сеанс всегда установлен.
Вопрос
Знаете ли вы, что вызывает такое поведение?