Missing Viewstate

Discussion in 'ASP .Net' started by Kev, Nov 4, 2009.

  1. Kev

    Kev Guest

    Hi all,

    I hope someone understands this better than I do. I have an ASP.NET
    app using a MasterPage (which I actually created in DreamWeaver then
    copied the HTML to the MasterPage). So far so good.

    The master page has a fancy nav menu (a SpryMenu) at the top - this
    does not cause post backs - just a fancy collection of hyperlinks.

    I want to track the currently logged in user in the View State. I do
    this thus:

    If (correct password)
    {
    Session["USERID"] = userid;
    Server.Transfer("MyAccount.aspx");
    }

    And in all pages do something like

    if (Session["USERID"] == null)
    Response.Redirect("Login.aspx");

    At this point I am on MyAccount.aspx via a Server.Transfer. I can
    choose any page in my fancy nav menu, which are just hyperlinks, and
    in the respective Page_Load I can get the userid from the session.
    But only the once. That page will load fine and display user
    information from the database etc. But if I choose another page from
    the nav menu - even the same page, the Session variables have gone.
    The Session.SessionID is the same but Session.Count is 0.

    Can anyone shed any light on what may be happening behind the scenes -
    I am perplexed.

    Thanks

    Kev
    Kev, Nov 4, 2009
    #1
    1. Advertising

  2. Kev

    Kev Guest

    Hi again,

    further investigation leads me to believe that something in the eBay
    API is causing the vewstate to get reset. Which is odd as the eBay
    API should not user the viewstate - what if it was a desktop client
    application? However, it does make a web service call.

    If I remove the eBay API SOAP call the problem I previously described
    vanishes and the viewstate remains intact across pages in the nav bar
    despite none of them doing postbacks. Is this correct or just luck?

    Should making a web service call confuse the view state?

    I believe this is still the correct place for this discussion but if
    not will accept any guidance to the correct place.

    Thanks all.


    On 4 Nov, 16:49, Kev <> wrote:
    > Hi all,
    >
    > I hope someone understands this better than I do.  I have an ASP.NET
    > app using a MasterPage (which I actually created in DreamWeaver then
    > copied the HTML to the MasterPage).  So far so good.
    >
    > The master page has a fancy nav menu (a SpryMenu) at the top - this
    > does not cause post backs - just a fancy collection of hyperlinks.
    >
    > I want to track the currently logged in user in the View State.  I do
    > this thus:
    >
    > If (correct password)
    > {
    >     Session["USERID"] = userid;
    >     Server.Transfer("MyAccount.aspx");
    >
    > }
    >
    > And in all pages do something like
    >
    >  if (Session["USERID"] == null)
    >                     Response.Redirect("Login.aspx");
    >
    > At this point I am on MyAccount.aspx via a Server.Transfer.  I can
    > choose any page in my fancy nav menu, which are just hyperlinks, and
    > in the respective Page_Load I can get the userid from the session.
    > But only the once.  That page will load fine and display user
    > information from the database etc.  But if I choose another page from
    > the nav menu - even the same page, the Session variables have gone.
    > The Session.SessionID is the same but Session.Count is 0.
    >
    > Can anyone shed any light on what may be happening behind the scenes -
    > I am perplexed.
    >
    > Thanks
    >
    > Kev
    Kev, Nov 4, 2009
    #2
    1. Advertising

  3. Kev

    Scott M. Guest

    "Kev" <> wrote in message
    news:...
    > Hi all,
    >
    > I hope someone understands this better than I do. I have an ASP.NET
    > app using a MasterPage (which I actually created in DreamWeaver then
    > copied the HTML to the MasterPage). So far so good.
    >
    > The master page has a fancy nav menu (a SpryMenu) at the top - this
    > does not cause post backs - just a fancy collection of hyperlinks.
    >
    > I want to track the currently logged in user in the View State. I do
    > this thus:
    >
    > If (correct password)
    > {
    > Session["USERID"] = userid;
    > Server.Transfer("MyAccount.aspx");
    > }
    >
    > And in all pages do something like
    >
    > if (Session["USERID"] == null)
    > Response.Redirect("Login.aspx");
    >
    > At this point I am on MyAccount.aspx via a Server.Transfer. I can
    > choose any page in my fancy nav menu, which are just hyperlinks, and
    > in the respective Page_Load I can get the userid from the session.
    > But only the once. That page will load fine and display user
    > information from the database etc. But if I choose another page from
    > the nav menu - even the same page, the Session variables have gone.
    > The Session.SessionID is the same but Session.Count is 0.
    >
    > Can anyone shed any light on what may be happening behind the scenes -
    > I am perplexed.
    >
    > Thanks
    >
    > Kev


    First, I'd ensure that sessions are enabled and configured correctly in IIS.

    Second, you need to check your browser's cookie setting to ensure that
    session cookies are allowed.

    Third, what does your scenario have to do with ViewState as you are not
    using it in the description you gave us?

    -Scott
    Scott M., Nov 4, 2009
    #3
  4. Kev

    David Guest

    This is not viewstate, but session.

    From what I remember from classic asp, the page has to be delivered to the
    browser in order that the session is set up correctly. Sessions use cookies
    to track them.

    Here, you are setting the session, then redirecting immediately (on the
    server, so the page is not even being sent to the client), hence the session
    cookie is not being dropped to the client.

    Instead, why not use the login tools from .NET and use the
    RedirectFromLoginPage(username, false) (but you need the ReturnUrl in your
    querystring) or the SetAuthCookie(username, false)...

    This will set up your authentication and in each page you can then check if
    the user is authenticated, User.Identity.IsAuthenticated


    --
    Best regards,
    Dave Colliver.
    http://www.AshfieldFOCUS.com
    ~~
    http://www.FOCUSPortals.com - Local franchises available


    "Kev" <> wrote in message
    news:...
    > Hi all,
    >
    > I hope someone understands this better than I do. I have an ASP.NET
    > app using a MasterPage (which I actually created in DreamWeaver then
    > copied the HTML to the MasterPage). So far so good.
    >
    > The master page has a fancy nav menu (a SpryMenu) at the top - this
    > does not cause post backs - just a fancy collection of hyperlinks.
    >
    > I want to track the currently logged in user in the View State. I do
    > this thus:
    >
    > If (correct password)
    > {
    > Session["USERID"] = userid;
    > Server.Transfer("MyAccount.aspx");
    > }
    >
    > And in all pages do something like
    >
    > if (Session["USERID"] == null)
    > Response.Redirect("Login.aspx");
    >
    > At this point I am on MyAccount.aspx via a Server.Transfer. I can
    > choose any page in my fancy nav menu, which are just hyperlinks, and
    > in the respective Page_Load I can get the userid from the session.
    > But only the once. That page will load fine and display user
    > information from the database etc. But if I choose another page from
    > the nav menu - even the same page, the Session variables have gone.
    > The Session.SessionID is the same but Session.Count is 0.
    >
    > Can anyone shed any light on what may be happening behind the scenes -
    > I am perplexed.
    >
    > Thanks
    >
    > Kev
    David, Nov 4, 2009
    #4
  5. Kev

    Kev Guest

    On 4 Nov, 17:23, "Scott M." <> wrote:
    > "Kev" <> wrote in message
    >
    > news:...
    >
    >
    >
    >
    >
    > > Hi all,

    >
    > > I hope someone understands this better than I do.  I have an ASP.NET
    > > app using a MasterPage (which I actually created in DreamWeaver then
    > > copied the HTML to the MasterPage).  So far so good.

    >
    > > The master page has a fancy nav menu (a SpryMenu) at the top - this
    > > does not cause post backs - just a fancy collection of hyperlinks.

    >
    > > I want to track the currently logged in user in the View State.  I do
    > > this thus:

    >
    > > If (correct password)
    > > {
    > >    Session["USERID"] = userid;
    > >    Server.Transfer("MyAccount.aspx");
    > > }

    >
    > > And in all pages do something like

    >
    > > if (Session["USERID"] == null)
    > >                    Response.Redirect("Login.aspx");

    >
    > > At this point I am on MyAccount.aspx via a Server.Transfer.  I can
    > > choose any page in my fancy nav menu, which are just hyperlinks, and
    > > in the respective Page_Load I can get the userid from the session.
    > > But only the once.  That page will load fine and display user
    > > information from the database etc.  But if I choose another page from
    > > the nav menu - even the same page, the Session variables have gone.
    > > The Session.SessionID is the same but Session.Count is 0.

    >
    > > Can anyone shed any light on what may be happening behind the scenes -
    > > I am perplexed.

    >
    > > Thanks

    >
    > > Kev

    >
    > First, I'd ensure that sessions are enabled and configured correctly in IIS.
    >
    > Second, you need to check your browser's cookie setting to ensure that
    > session cookies are allowed.
    >
    > Third, what does your scenario have to do with ViewState as you are not
    > using it in the description you gave us?
    >
    > -Scott- Hide quoted text -
    >
    > - Show quoted text -


    Thanks Scott - you just beat me to it.

    Forget all mention of ViewState. I am not using the ViewState at
    all. I am primarily interested in the Session state.

    I have checked IIS. It is configured to use in process session and
    uses cookies with a 20 minute time out.

    The browser is correctly observing cookies.

    When I run through the debugger, the session id remains constant at my
    break points so I am sure this is fine.

    I execute the web service and all the session elements are there. But
    when I hit the same break point (first line in Page_Load) they have
    gone and Session.Count is a red zero. Becuase of the web service
    call, it is getting reset.

    The question is, what is the web service call doing to cause the
    session to get reset? I have the web service source and it doesn't
    appear to be doing anything - is it an IIS thing?

    Thanks again

    Kevin
    Kev, Nov 4, 2009
    #5
  6. Kev

    Scott M. Guest

    "Kev" <> wrote in message
    news:...
    Hi again,

    further investigation leads me to believe that something in the eBay
    API is causing the vewstate to get reset. Which is odd as the eBay
    API should not user the viewstate - what if it was a desktop client
    application? However, it does make a web service call.

    If I remove the eBay API SOAP call the problem I previously described
    vanishes and the viewstate remains intact across pages in the nav bar
    despite none of them doing postbacks. Is this correct or just luck?

    Should making a web service call confuse the view state?

    I believe this is still the correct place for this discussion but if
    not will accept any guidance to the correct place.

    Thanks all.


    On 4 Nov, 16:49, Kev <> wrote:
    > Hi all,
    >
    > I hope someone understands this better than I do. I have an ASP.NET
    > app using a MasterPage (which I actually created in DreamWeaver then
    > copied the HTML to the MasterPage). So far so good.
    >
    > The master page has a fancy nav menu (a SpryMenu) at the top - this
    > does not cause post backs - just a fancy collection of hyperlinks.
    >
    > I want to track the currently logged in user in the View State. I do
    > this thus:
    >
    > If (correct password)
    > {
    > Session["USERID"] = userid;
    > Server.Transfer("MyAccount.aspx");
    >
    > }
    >
    > And in all pages do something like
    >
    > if (Session["USERID"] == null)
    > Response.Redirect("Login.aspx");
    >
    > At this point I am on MyAccount.aspx via a Server.Transfer. I can
    > choose any page in my fancy nav menu, which are just hyperlinks, and
    > in the respective Page_Load I can get the userid from the session.
    > But only the once. That page will load fine and display user
    > information from the database etc. But if I choose another page from
    > the nav menu - even the same page, the Session variables have gone.
    > The Session.SessionID is the same but Session.Count is 0.
    >
    > Can anyone shed any light on what may be happening behind the scenes -
    > I am perplexed.
    >
    > Thanks
    >
    > Kev


    You didn't mention anything about eBay in your original post, which
    certainly can contribute to the issue. You'll need to be clearer as to what
    eBay's systems have to do with your web application and how eBay affects
    your login. eBay has a published set of API's for developers wanting to
    automate thier functions.

    But, as I said in my last message, you haven't told or shown us anything
    about your site that relates to ViewState, you've discussed the problem you
    are having with Session state, which is entirely different than ViewState.

    -Scott
    Scott M., Nov 4, 2009
    #6
  7. Kev

    Kev Guest

    Hi Scott,

    you are corrrect. My apologies. I didn't believe eBay APIs were at
    fault when first posting. But I admit being new to ASP.NET I was
    confusing the ViewState session state issue.

    My issue is that a call the eBay API is resetting the Session state.

    Why I do not know as the eBay API should not know I am using a
    SessionState as I could be writing a WinForms app. So I am wondering
    if a .NET call the API makes is upsetting the .NET framework some how.

    Am still investigating but any thoughts appreciated.

    Cheers
    Kev, Nov 4, 2009
    #7
  8. Kev

    Kev Guest

    Ok - I now know which the offending line of code is. It is in the
    eBay API and its

    LogMessage(url, MessageType.Information,
    MessageSeverity.Informational);

    Looks pretty innocent, and what it does by stepping through it appears
    innocent too. Doesn't even look at the Session state. But something
    it is doing is sending ASP.NET into a spin. Not sure if this is
    correct place for this discussion but if anyone has any similar
    experiences please do feedback one way or another.

    Thanks again - particularly to Scott.
    Kev, Nov 4, 2009
    #8
  9. Kev

    Scott M. Guest

    It would be best if you could post your complete code, so we can see exactly
    what you are doing.

    But, I do believe that David is correct, that using Server.Transfer is not
    transfering your session state. It's working the first time because of the
    initial session variable you set, but after that it's being lost. Do you
    have a specific reason for using Transfer vs. Redirect, which would solve
    the problem.

    - Scott
    Scott M., Nov 4, 2009
    #9
  10. Kev

    Kev Guest

    Apologies - I never even saw Davids reply.

    David, your comments make sense and I will look into using a different
    method of UserAuthentication.

    However, the current situation is that a call to the eBay APIs is
    causing the session to get reset? What would cause this?

    I sm still trying to identify the exact line of code causing this.

    Kevin.
    Kev, Nov 4, 2009
    #10
  11. Kev

    Kev Guest

    Getting nearer - but its more complicated. The Logging issue above is
    still worrying but I have commented that out. This code appears to be
    the offender

    HttpWebRequest request = (HttpWebRequest)base.GetWebRequest(uri);
    request.ProtocolVersion = HttpVersion.Version10;
    request.Headers.Add("Accept-Encoding", "gzip, deflate");
    if (mCallMetrics != null)
    {
    mCallMetrics.NetworkSendStarted = DateTime.Now;
    request.Headers.Add("X-EBAY-API-METRICS", "true");
    }
    return request;

    However, the code then goes on to do some trickery reading and writing
    to memorystreams. Could this be upsetting the session being delivered
    to the browser?
    Kev, Nov 4, 2009
    #11
  12. Kev

    Kev Guest

    >But, I do believe that David is correct, that using Server.Transfer is not
    >transfering your session state. It's working the first time because of the
    >initial session variable you set, but after that it's being lost. Do you
    >have a specific reason for using Transfer vs. Redirect, which would solve
    >the problem.
    >- Scott

    Maybe, but when offending code is commented out as discussed I can
    visit the page as often as I want and the session remains in tact.
    Something somewhere is upsetting the session.
    Kev, Nov 4, 2009
    #12
  13. Kev

    Kev Guest

    OK - some code - but its getting detailed so hope someone can help.

    After invoking the webservice the code ends up here

    public override void ProcessMessage
    (System.Web.Services.Protocols.SoapMessage Message) {
    if ((Message.Stage ==
    System.Web.Services.Protocols.SoapMessageStage.BeforeSerialize)) {
    }
    else {
    if ((Message.Stage ==
    System.Web.Services.Protocols.SoapMessageStage.AfterSerialize)) {
    this.SaveRequestMessage(Message);
    this.Copy(mStrNew, mStrOld);
    }
    else {
    if ((Message.Stage ==
    System.Web.Services.Protocols.SoapMessageStage.BeforeDeserialize)) {
    this.SaveResponseMessage(Message);
    }
    else {
    if ((Message.Stage ==
    System.Web.Services.Protocols.SoapMessageStage.AfterDeserialize)) {
    }
    else {
    throw new System.ArgumentException
    (System.String.Format
    (System.Globalization.CultureInfo.InvariantCulture, "Invalid Soap
    Message stage [{0}]", Message.Stage), "Message");
    }
    }
    }
    }
    }


    It actually traces to this part
    if ((Message.Stage ==
    System.Web.Services.Protocols.SoapMessageStage.AfterSerialize)) {
    this.SaveRequestMessage(Message);
    this.Copy(mStrNew, mStrOld);

    And it si the copy routine which causes the problem (but also gets me
    the data I need).

    /// <summary>
    ///
    /// </summary>
    /// <param name="StrFrom"></param>
    /// <param name="StrTo"></param>
    private void Copy(System.IO.Stream StrFrom, System.IO.Stream
    StrTo) {
    if (StrFrom.CanSeek) {
    StrFrom.Position = 0;
    }
    System.IO.TextReader TxtReader = new System.IO.StreamReader
    (StrFrom);
    System.IO.TextWriter TxtWriter = new System.IO.StreamWriter
    (StrTo);
    TxtWriter.WriteLine(TxtReader.ReadToEnd());
    TxtWriter.Flush();
    if (StrTo.CanSeek) {
    StrTo.Position = 0;
    }
    }

    Is something there stopping the session propagating?
    Kev, Nov 4, 2009
    #13
  14. Kev

    Kev Guest

    PROBLEM SOLVED!!!!!

    http://weblogs.asp.net/owscott/archive/2006/02/21/438678.aspx

    The eBay API was writing a log file in the bin folder!!!!! And a
    change here causes a session reset. I have moed the log file and
    problem solved. Should of stuck to my first LogMessage hunch!

    Thank you both for your help! GOing to scour some groups for 10
    minutes now answering other peeoples questions (on sql) where I can!

    Kevin
    Kev, Nov 4, 2009
    #14
  15. Kev

    Scott M. Guest

    "Kev" <> wrote in message
    news:...
    > PROBLEM SOLVED!!!!!
    >
    > http://weblogs.asp.net/owscott/archive/2006/02/21/438678.aspx
    >
    > The eBay API was writing a log file in the bin folder!!!!! And a
    > change here causes a session reset. I have moed the log file and
    > problem solved. Should of stuck to my first LogMessage hunch!
    >
    > Thank you both for your help! GOing to scour some groups for 10
    > minutes now answering other peeoples questions (on sql) where I can!
    >
    > Kevin


    Good investigative work. Good luck.

    -Scott
    Scott M., Nov 4, 2009
    #15
    1. Advertising

Want to reply to this thread or ask your own question?

It takes just 2 minutes to sign up (and it's free!). Just click the sign up button to choose a username and then you can ask your own questions on the forum.
Similar Threads
  1. Mark Sisson

    Missing Viewstate in Custom Control

    Mark Sisson, Jul 19, 2003, in forum: ASP .Net
    Replies:
    0
    Views:
    474
    Mark Sisson
    Jul 19, 2003
  2. Replies:
    6
    Views:
    3,188
  3. John
    Replies:
    4
    Views:
    1,519
  4. Gary Herron
    Replies:
    2
    Views:
    662
    Bruno Desthuilliers
    Jul 4, 2006
  5. silverfox_1188
    Replies:
    0
    Views:
    3,491
    silverfox_1188
    Jul 25, 2006
Loading...

Share This Page