2012-11-27 3 views
-1

나는 signalR을 사용하여 채팅 앱을 작성했습니다. 채팅을 실행하는 마크 업과 자바 스크립트가 포함 된 ASCX 컨트롤입니다. 사용자 정의 컨트롤을 보유하고있는 페이지는 비동기식으로 렌더링되는 업데이트 패널을 가지고 있으며 사용자가 입력 된 코드와 관련된 일부 내용을 새로 고칠 수 있습니다. 문제는 새로 고침 버튼을 여러 번 클릭하면 페이지가 아무 문제없이 작동한다는 것입니다. 채팅을 연결하기 위해 클릭하면 JavaScript로 빌드됩니다. 새로 고침 버튼을 두 번 클릭하면 정상적으로 작동하지만 갑자기 페이지 브레이크 및 일부 viewstate 오류가 기록됨 : 상태 정보가 유효하지 않습니다. 페이지가 손상되었을 수 있습니다. 뷰 상태가 잘못되었습니다. blah blah ... 추한 오류입니다.SignalR 허브 연결이 약간의 포스트 백 이후에 viewstate를 손상시킵니다.

허브에 연결할 때만 발생합니다. 연결을 시작하지 않으면 결코 발생하지 않습니다.

한 가지 언급하지만 컨트롤 뒤에있는 코드는 viewstate를 참조하는 속성에 값을 저장합니다 (나중에 해당 태그가 모든 포스트 백에 브레이크가 걸리는 viewstate에 저장하지 않음). 그러면 나중에 마크 업에 기록됩니다. 채팅을 시작하는 스크립트는 대화의 일부분을 알아야합니다.

도와주세요. 여기

일부 코드 :

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(); 

// - 코네티컷 스크립트

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); 
     }); 
    } 
} 
+0

"새로 고침"기능의 기능은 무엇입니까? 그것을위한 코드가 있습니까? –

+0

이것은 복잡한 과정입니다. 한눈에 .. 코드는 db에 숫자가 있는지 확인하고, 그렇지 않으면 일부 시스템 (PACS 시스템)에서 쿼리합니다. 정보가 검색되면 페이지에서 일부 정보가 새로 고쳐집니다. – user1791567

+0

내 asp dev env에서만 발생하기 때문에이 질문을 닫을 것입니다. iis에 앱을 배포해도 동일한 문제가 발생하지 않습니다. – user1791567

답변

-1

나는이 질문 때문에 폐쇄 것 같아 그것은 단지 내 ASP dev env에서 발생합니다. iis에 앱을 배포해도 동일한 문제가 나타나지 않습니다.

관련 문제