7

故事:

我正在开发一个图表,显示假期(年假、已用假期”等),用于从组合框中选择一年、业务单位和部门,到目前为止,我很高兴它的工作结果...但是如果在一段时间后在这个部门之间切换我会得到这个奇怪的错误...... *

此页面的状态信息无效,可能已损坏。

[没有相关的源代码行]


所以我向下滚动了一点,发现了这个

[ViewStateException: Invalid viewstate. 
  Client IP: ::1
  Port: 27968
  Referer: http://localhost/HolidayTracker/Report/VacationChart.aspx
  Path: /HolidayTracker/Report/VacationChart.aspx
  User-Agent: Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.1; WOW64; Trident/6.0)
  ViewState: ....

所以我检查了我的视图状态,我没有发现错误或其他什么..

        private HtBusinessUnit selectedBU
    {
        get
        {
            return (HtBusinessUnit)ViewState["selectedBu"];

        }
        set
        {
            ViewState["selectedBu"] = value;
        }
    }
    private HtDepartment selectDep
    {
        get
        {
            return (HtDepartment)ViewState["selectedDep"];
        }
        set
        {
            ViewState["selectedDep"] = value;
        }
    }
    private string selectedYear
    {
        get
        {
            return ViewState["selectedYear"] != null ? ViewState["selectedYear"].ToString() : "";
        }
        set
        {
            ViewState["selectedYear"] = value;
        }
    }

这是错误消息

[ArgumentException: Invalid token for impersonation - it cannot be duplicated.]
   System.Security.Principal.WindowsIdentity.CreateFromToken(IntPtr userToken) +3597947
   System.Security.Principal.WindowsIdentity..ctor(SerializationInfo info) +187
   System.Security.Principal.WindowsIdentity..ctor(SerializationInfo info, StreamingContext context) +51

[TargetInvocationException: Exception has been thrown by the target of an invocation.]
   System.RuntimeMethodHandle.SerializationInvoke(IRuntimeMethodInfo method, Object target, SerializationInfo info, StreamingContext& context) +0
   System.Runtime.Serialization.ObjectManager.CompleteISerializableObject(Object obj, SerializationInfo info, StreamingContext context) +298
   System.Runtime.Serialization.ObjectManager.FixupSpecialObject(ObjectHolder holder) +45
   System.Runtime.Serialization.ObjectManager.DoFixups() +230
   System.Runtime.Serialization.Formatters.Binary.ObjectReader.Deserialize(HeaderHandler handler, __BinaryParser serParser, Boolean fCheck, Boolean isCrossAppDomain, IMethodCallMessage methodCallMessage) +137
   System.Runtime.Serialization.Formatters.Binary.BinaryFormatter.Deserialize(Stream serializationStream, HeaderHandler handler, Boolean fCheck, Boolean isCrossAppDomain, IMethodCallMessage methodCallMessage) +186
   System.Runtime.Serialization.Formatters.Binary.BinaryFormatter.Deserialize(Stream serializationStream) +15
   System.Web.UI.ObjectStateFormatter.DeserializeValue(SerializerBinaryReader reader) +1873
   System.Web.UI.ObjectStateFormatter.DeserializeValue(SerializerBinaryReader reader) +334
   System.Web.UI.ObjectStateFormatter.DeserializeValue(SerializerBinaryReader reader) +420
   System.Web.UI.ObjectStateFormatter.DeserializeValue(SerializerBinaryReader reader) +432
   System.Web.UI.ObjectStateFormatter.DeserializeValue(SerializerBinaryReader reader) +420
   System.Web.UI.ObjectStateFormatter.Deserialize(Stream inputStream) +139

[ArgumentException: The serialized data is invalid.]
   System.Web.UI.ObjectStateFormatter.Deserialize(Stream inputStream) +203
   System.Web.UI.ObjectStateFormatter.Deserialize(String inputString, Purpose purpose) +481
   System.Web.UI.ObjectStateFormatter.System.Web.UI.IStateFormatter2.Deserialize(String serializedState, Purpose purpose) +8
   System.Web.UI.Util.DeserializeWithAssert(IStateFormatter2 formatter, String serializedState, Purpose purpose) +40
   System.Web.UI.HiddenFieldPageStatePersister.Load() +127

[ViewStateException: Invalid viewstate. 
    Client IP: ::1
    Port: 27795
    Referer: http://localhost/HolidayTracker/Report/VacationChart.aspx
    Path: /HolidayTracker/Report/VacationChart.aspx
    User-Agent: Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.1; WOW64; Trident/6.0)
    ViewState: /wEPDwULLTE2OTYyMjA5MzkPFgQeCnNlbGVjdGVkQnUy1p4BAAEAAAD/////AQAAAAAAAAAMAgAAAElIb2xpZGF5VHJhY2tlckRhdGEsIFZlcnNpb249MS4wLjAuMCwgQ3VsdHVyZT1uZXV0cmFsLCBQdWJsaWNLZXlUb2tlbj1udWxsDAMAAABVU3lzdGVtLkRhdGEuRW50aXR5LCBWZXJzaW9uPTQuMC4wLjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49Yjc3YTVjNTYxOTM0ZTA4OQUBAAAAKEhvbGlkYXlUcmFja2VyLkRhdGEuTW9kZWwuSHRCdXNpbmVzc1VuaXQFAAAAD19CdXNpbmVzc1VuaXRJZAVfTmFtZQ9fT3JnYW5pc2F0aW9uSWQbRW50aXR5T2JqZWN0K19yZWxhdGlvbnNoaXBzF0VudGl0eU9iamVjdCtfZW50aXR5S2V5AAEABAQICDNTeXN0ZW0uRGF0YS5PYmplY3RzLkRhdGFDbGFzc2VzLlJlbGF0aW9uc2hpcE1hbmFnZXIDAAAAFVN5c3RlbS5EYXRhLkVudGl0eUtleQMAAAACAAAAFAAAAAYEAAAABUZTLUlTDgAAAAkFAAAACQYAAAAFBQAAADNTeXN0ZW0uRGF0YS5PYmplY3RzLkRhdGFDbGFzc2VzLlJlbGF0aW9uc2hpcE1hbmFnZXICAAAABl9vd25lcg5fcmVsYXRpb25zaGlwcwQDKEhvbGlkYXl...]

[HttpException (0x80004005): The state information is invalid for this page and might be corrupted.]
   System.Web.UI.ViewStateException.ThrowError(Exception inner, String persistedState, String errorPageMessage, Boolean macValidationError) +198
   System.Web.UI.HiddenFieldPageStatePersister.Load() +266
   System.Web.UI.Page.LoadPageStateFromPersistenceMedium() +88
   System.Web.UI.Page.LoadAllState() +36
   System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +6704
   System.Web.UI.Page.ProcessRequest(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +245
   System.Web.UI.Page.ProcessRequest() +72
   System.Web.UI.Page.ProcessRequestWithNoAssert(HttpContext context) +21
   System.Web.UI.Page.ProcessRequest(HttpContext context) +58
   ASP.report_vacationchart_aspx.ProcessRequest(HttpContext context) in c:\Windows\Microsoft.NET\Framework\v4.0.30319\Temporary ASP.NET Files\holidaytracker\ad68c354\56d80455\App_Web_k5s5ajkf.1.cs:0
   System.Web.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() +341
   System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously) +69

这是我的 Global.asax.cs

namespace HolidayTracker {
    public class Global : System.Web.HttpApplication {

        void Application_Start(object sender, EventArgs e) {
            // Code that runs on application startup

        }

        void Application_End(object sender, EventArgs e) {
            //  Code that runs on application shutdown

        }

        void Application_Error(object sender, EventArgs e) {
            // Code that runs when an unhandled error occurs

        }

        void Session_Start(object sender, EventArgs e) {
            // Code that runs when a new session is started
            if (HttpContext.Current.User != null && HttpContext.Current.User is HtUser)
            { 
                HtUser user = (HtUser)HttpContext.Current.User;
                Session["UserId"] = user.UserId;

                Session["User"] = user.LastName+" "+user.FirstName ;


                if (user.HtDepartments.Any() && user.HtDepartments.SingleOrDefault().HtBusinessUnit != null)
                {
                    int BusinessUnitId = user.HtDepartments.First().HtBusinessUnit.BusinessUnitId;
                    Session["BusinessUnnitId"] = BusinessUnitId;
                }


            }
        }

        void Session_End(object sender, EventArgs e) {
            // Code that runs when a session ends. 
            // Note: The Session_End event is raised only when the sessionstate mode
            // is set to InProc in the Web.config file. If session mode is set to StateServer 
            // or SQLServer, the event is not raised.

            //if (Session["UserId"] == null)
            //{
            //    Response.ClearContent();
            //    Response.Write("Not agine");
            //    Response.End();
            //}
            //else
            //{
            //    Response.Write(Session["UserId"].ToString());
            //}
        }

         protected void WindowsAuthentication_OnAuthenticate(Object source, WindowsAuthenticationEventArgs e)
        {
            if (Request.Cookies.Get(Constants.AUTHORIZATION_COOKIE_NAME) != null)
                return;

            String strUserIdentity;
            FormsAuthenticationTicket formsAuthTicket;
            HttpCookie httpCook;
            String strEncryptedTicket;
            AdLookup adLookup = new AdLookup();

            strUserIdentity = e.Identity.Name;

            bool loggedIn = false;
            String email = null;
            String role = null;

            email = strUserIdentity; 
            HtUser userInfo = null;
            if (email != null && email != "")
            {
                userInfo = HtUser.GetByLogin(e.Identity, email);

                if (userInfo != null && userInfo.UserName.Length > 0)
                {
                    loggedIn = true;
                    role = HtUser.GetUserRoleString(userInfo);
                }
                //Checks if user is in domain
                else
                {
                    userInfo = adLookup.GetAdUserByUsername(HtUser.getUserNameFromDomainString(email));
                    if (userInfo != null && userInfo.UserName.Length > 0)
                    {
                        loggedIn = true;
                        role = UserRoles.User;
                    }
                }
            }
            //}

            if (loggedIn)
            {
                formsAuthTicket = new FormsAuthenticationTicket(1, email, DateTime.Now,
                                                                DateTime.Now.AddMinutes(60), false, role);
                strEncryptedTicket = FormsAuthentication.Encrypt(formsAuthTicket);
                httpCook = new HttpCookie(Constants.AUTHORIZATION_COOKIE_NAME, strEncryptedTicket);
                Response.Cookies.Add(httpCook);
                HttpContext.Current.User = userInfo;
            }
            else
            {
                HttpContext.Current.User = null;
            }
        }

    }
}

我你需要更多的东西随时问我!

感谢您的帮助和快速答复

4

1 回答 1

0

Oo I see it not something big but I would you highly recommend to replace your view states with just a "normal" solution just use the values from your Rad Combo boxes its way easier but for sure this is not a real solution for you problem cause as I see its really strange I don't see the error here , for me it seems all to me Ok. but if send you your updated code back with some comments .

If you have and problems feel free to ask!¨

PS: If you wind the solution give contact me!!

于 2013-03-21T13:37:40.307 回答