SignalR集线器连接在几次回发后破坏了viewstate

时间:2012-11-27 22:04:39

标签: viewstate signalr

我使用signalR编写了一个聊天应用程序。它是一个ASCX控件,包含运行聊天的标记和javascript。保存用户控件的页面有一个updatepanel,它呈现异步,并允许用户刷新特定于输入代码的某些内容。问题是,我可以点击刷新按钮的次数,页面的行为没有任何问题。当我点击连接聊天(全部用JavaScript构建)并点击几次刷新按钮时,它似乎表现良好,但突然页面刹车,并且记录了一些视图状态错误:状态信息对此无效页面,可能已损坏。视图状态无效..等等......这是一个丑陋的错误。

仅当我连接到集线器时才会发生这种情况。如果我不发起连接,这种情况永远不会发生。

有一点要提一下,控件背后的代码在引用视图状态的属性中存储了一些值(没有将它存储在每个回发中的页面制动器的视图状态中),稍后将在标记中写入以便脚本启动聊天的人知道谁应该成为对话的一部分。

请帮忙。

这里有一些代码:

StandAlonePanel.aspx - >包含带有刷新按钮的updatepanel。 ChatControl.ascx - >

public int userId{
        get
        {
            if (ViewState["UserID"] == null)
                ViewState["UserID"] = 0;
            return Convert.ToInt32(ViewState["UserID"]);
        }
        set
        {
            ViewState["UserID"] = value;
        }
    }
//--- Same for userName

if (userId == 0 && CurrentUserSession.User != null)
{
   this.userId = CurrentUserSession.User.Id;
   this.userName = CurrentUserSession.User.Name;
}
标记中的

var userInfo = {
    userId : "<%= userId %>",
    userName : "<%= userName %>",        
    IsAnonymized: "<%= IsAnonymized %>",
    enableLogging: "<%= enableLogging %>"
}



if (chat != null) {
      chat.Disconnect();   
   }



chat = new Chat(userInfo);
   chat.Connect();

// - 脚本conn

var hubConn = $.hubConnection(url);

hubConn.logging = self.enableLogging
hubConn.qs = { 'u': userInfo.userId, 'tc': '0', 'oo': userInfo.showOnlineOnly, 'ach': self.IsAnonymized, 'lgch': self.enableLogging }; /* Initiating queryString */


hubConn.error(function (error) {
    logMe(error);
});

var hubProxy = new ChatProxy(hubConn);

/* hook up callbacks to hubProxy */

self.Connect = function () {
    if (self.longpolling == true) {
        hubConn.start({ transport: 'longPolling' }).done(function (result) {
            ///--            
        }).fail(function (error) {
            ///--
            alert("error" + error);
        });
    }
    else {
        hubConn.start().done(function (result) {
            ///--            
        }).fail(function (error) {
            ///--
            alert("error" + error);
        });
    }
}

1 个答案:

答案 0 :(得分:-1)

我想我正在关闭这个问题,因为它只发生在我的asp dev env中。当我将应用程序部署到iis时,它不会出现同样的问题