2011-12-21 27 views
3

私はasp.netウェブアプリケーションで、セッション状態が失われるという奇妙な動作をしています。AJAX投稿内のHttpWebRequestの後でセッション状態が失われました

プロセスは、ユーザがアプリケーションにログインし、セッションが設定されています。次に、1つのフィールドに入力し、アプリケーションはAJAX POST.asmx Webサービスに送信します。 Webサービス内で、別のサーバーからデータを取得するのにHttpWebRequestを使用しています。

このデータは、ブラウザに出力されます。

さらにいくつかのフィールドが入力され、AJAX POSTを介して同じWebサービスに再度Postのデータが入力されます。

問題

ストレートHttpWebRequestた後、私は、セッション変数からユーザー名をつかみます。これは機能します。 ただし、次のAJAXリクエストでは、セッションは存在しなくなりました。

これをテストしている間に、HttpWebRequestが呼び出され、セッションが失われることのないステージを削除しました。だから何らかの理由で、セッションが私の最初のAJAX POSTの後で、HttpWebRequestコードを実行している場合にのみ、AJAX POSTの前に削除されます。

コード

私はコード内の空想何もしていないのです。単純なjQueryのAJAXポストをやって

$アヤックス({ URL:方法、 データ:パラメータ、 タイプ: "POST"、 のcontentType: "アプリケーション/ jsonの;のcharset = UTF-8"、データ型: "json"、 成功:関数(データ){ //データの処理 }、 エラー:function(xhr、status、error){} });

System.Net.HttpWebRequestを作成してからSystem.Net.HttpWebResponseを削除してください。 (ただし任意のAJAXを使用していない)の前に、私はHttpWebRequestを使用した場合の前に、この動作に気づいたことがありませんそして、セッション変数dim username as string = Session(_SESSION_USERNAME).ToString()

を読ん

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 

このメソッドを呼び出さないと、セッションは常に設定されます。

質問

あなたはこの動作を引き起こしているものを知っていますか?

+0

何かがセッションをリセットしています。ウェブサービスコードを投稿することは可能でしょうか? –

+0

は 'HttpWebRequest'のコードで更新されていますが、webserviceは' HttpWebRequest'コードを呼び出すこと、セッションを読み込み、 'SQL'データベースに保存することなど何もしません。 –

+0

session.sessionidが同じかどうか確認できますか2番目のリクエストで? – lloydom

答えて

3

あなただけのセッションを失うか、アプリケーション全体が再起動されるかどうかを確認できます。仮想ディレクトリ/ WebアプリケーションフォルダにXMLを保存する場合は、Webアプリケーションを再起動することがあります。多くのダースファイルが少しずつ連続して追加された場合、App Poolを再起動することになります。

+0

ありがとう。私はそれが 'HttpWebRequest'と関係があり、' XmlDocument'を保存していたコードについても考えていないと確信していました。しかし、これをやっている理由を知ることはまだありませんが、コードのその部分を削除してセッションの問題を止めました。 –

+0

ファイルが 'bin'ディレクトリにあったフォルダ内に保存されていました。スクールボーイのエラー:P –

+0

今、なぜアプリケーションが再起動したのかが分かります:) –

0

ちょうど愚かですが、おそらくHttpWebRequests全体でCookieを維持する必要があります。

詳細については、この質問をご覧ください。

Http web request doesn't maintaining session

+0

私はそれを行かせます。セッションがまだ 'HttpWebRequest'の後に設定されているが、2回目の' AJAX POST'には設定されていないのは確かです。 –

+0

残念ですが、これは役に立ちませんでした。しかし、答えに感謝します。 –

関連する問題