ASP.NET의 주요 명령어 정리 : 내장 개체

▶ Response개체 : 응답(서버(C#)에서 클라이언트(IE)로)
     .Write() : 페이지에 문자열 출력
     .Redirect() : 해당 페이지로 이동
     .Expires : 현재 페이지의 새로 고침 기능
          Response.Expires = -1; // 응답캐시 지우기
     .Buffer : 버퍼링 사용 설정
          Response.Buffer = true; // 버퍼링
     .Flush() : 현재 버퍼 내용 출력
     .Clear() : 현재 버퍼의 내용 비우기
     .End() : 현재 페이지 종료...
     .WriteFile() : 파일 출력
     .Cookies[] : 쿠키 저장
     
▶ Request개체
     .QueryString[] : 넘겨져 온 쿼리스트링값을 반환 : key/value쌍으로…
          Get방식 : URI(URL)에 ? 뒤에 키와 값으로 전달
     .Form[] : Post방식으로 넘겨져 온 값 반환
          Post방식 : HTTP 헤더에 데이터를 실어서 전송
     .Params[] : Get/Post 방식 중 아무거나 다 받음.
     Request[] : Params[] 컬렉션과 동일
     
     .UserHostAddress : IP주소
     .ServerVariables["REMOTE_HOST"] : IP주소
     .ServerVariables["REMOTE_ADDR"] : IP주소
     
     .Cookies[] : 저장된 쿠키 읽어오기.
     
▶ Server개체
     .MapPath(".") : 현재 파일과 같은 경로 값 반환 : .., /, \
     .Execute() : 다른 파일 포함(인클루드)후 제어권 돌아옴
     .Transfer() : 다른 파일 포함(인클루드)후 제어권 넘김 : Execute() + Response.End()
     .UrlPathEncode() : 넘겨져온 쿼리 스트링을 유니코드로 변환(한글 처리)
     .ScriptTimeout : 서버측에서 현재 ASPX페이지를 몇초간 처리할 건지 설정
          대용량 파일 업로드 페이지는 일시적으로 Server.ScriptTimeout을 증가
          
▶ Application개체
     - Application 전역 변수 선언(Public)
          Application["변수명"] = 값; // 딱 한개만 생성
     .Lock() : 애플리케이션 변수를 잠그는 메서드
     .UnLock() : 잠긴 애플리케이션 변수를 해제하는 메서드
     
▶ Session개체
     - Session 전역 변수 선언(Private)
          Session["변수명"] = 값; // 사용자 수 만큼 생성
     .Abandon() : 현재 세션 지우기
          예전에는 세션으로 로그인 처리시 로그아웃 할 때 사용
     .SessionID : 현재 세션의 고유번호 값 반환
          GUID와 비슷 : 한명이 접속하면 웹서버는 고유한 인증값을 부여
     .SessionTimeout : 세션 시간 기록 : 기본값 20분... 더 추가시키거나 줄일경우 사용...
     
▶ Page 개체
     .IsPostBack : 현재 페이지가 처음 로드했는지, 다시 게시(PostBack)되었는 지 확인
          처음로드 : Page.IsPostBack => false
          다시게시(PostBack) : Page.IsPostBack => true
     .RegisterClientScriptBlock() : 자바스크립트를 동적으로 웹 페이지에 추가
          Page.ClientScript.RegisterClientScriptBlock(this.GetType(), "스크립트 구분 이름", "자바스크립트코드");
     .RegisterStartupScript() : 자바스크립트를 동적으로 웹 페이지에 추가
          Page.ClientScript.RegisterStartupScript(this.GetType(), "스크립트 구분 이름", "자바스크립트코드");
     
▶ System.Web.Security.FormsAuthentication 개체 : 인증 관련
     
     [1] .SetAuthCookie() : 인증 쿠키값 부여... 인증 처리
          .GetRedirectUrl() : 인증 받기 이전의 페이지 경로값 반환.
     [2] .RedirectFromLoginPage() : 인증 처리와 동시에 이전(인증 받기 전) 페이지로 이동
     [3] Page.User.Identity.Name : 인증된 사용자명, SetAuthCookie()에서 부여된 인증 쿠키값, Admin, RedPlus식
     [4] Page.User.Identity.IsAuthenticated : 인증(로그인처리)되었다면, true, 그렇지 않으면 false를 반환
     
▶ 상태관리
     서버에 저장 : 웹 애플리케이션 전체에서 살아있는 변수값 저장
          Application[] : 1개만
          Session[] : 여러개
          Cache[] : 1개만 빠른 메모리에 저장
     클라이언트에 저장
          ViewState[] : 웹 브라우저의 소스코드에 히든필드로 저장
          Response.Cookies[] : 웹 브라우저에 쿠키 저장
          Request.Cookies[] : 저장된 쿠키 읽어오기

▶ 캐싱
     <%@ OutputCache Duration="3600" VaryByParam="None" %>
          3600초 동안 현재 페이지를 캐싱(메모리에 처리 결과 담고 바로 출력)

Posted by Sting!

댓글을 달아 주세요


Request URL: http://WebResource.axd?d=9n4PyABCLnJPx4xoU3nxwC4Kt15K3u-a245UfT6hW8JSf4r6suGuS1kEScfmyvro0&t=633739595980000000

로컬테스트 및 개발서버에서 정상적으로 되던것들이 리얼서버로 올라갔을때 위메세지 처럼 발생하는 에러를 가끔씩 보실 수 있습니다.

WebResource.axd 는 ASP.NET 2.0에서 기본적으로 제공하는 HttpHandler 로서 커스텀 컨트롤의 DLL 내에 embedded resource 로서 제공되는 .gif .js .htm 등을 반환하기 위해 추가된 기능입니다.
WebResource.axd 가 리소스가 포함된 DLL과 리소스의 ID를 query string에 포함시키고 이것을 암호화 하는데 디폴트 암호화 알고리즘이 (AES)Rijndael 알고리즘 입니다.

이 알고리즘은 ASP.NET의 기본설정은 암호화/복호화에 사용하는 키를 자동생성 합니다.
암호화 할 때 사용한 키와 복호화 할 때 키값이 다를경우 예외가 발생합니다.

예외가 발생될 경우

/WebResource.axd?d= .... 렌더링 할 때 사용한 (자동 생성된) 암호화 키와 실제 이 URL이 요청되었을 때의 (자동 생성된) 복호화 키가 다를경우 패딩예외가 발생하는 것입니다.

ASP.NET으로 구성된 웹 어플리케이션 서버가 L4 Switch에 의하여 Load Balancing 되는 경우..

- 웹 페이지 접속 시 ASP.NET 컨트롤에서 없던 오류날 경우

- 이미지가 액박 표시 되는 현상


이 경우 Fiddler를 통하여 페이지 요청 시 WebResource.axd 요청이 실패하는지 확인합니다.
해당 요청에서 문제가 있다면 서버의 이벤트 로그에는 다음과 같이 CryptographicException 오류가 발생하였는지 확인해보는 것이 좋습니다.


Event code: 3005
Event message: 처리되지 않은 예외가 발생했습니다.
Event time: 2010-07-26 오후 오후 1:05:45
Event time (UTC): 2010-07-26 오후 1:05:45
Event ID: 28188a45397841e499de7a4c38b4f4cd
Event sequence: 61
Event occurrence: 3
Event detail code: 0
 
Exception information:
    Exception type: CryptographicException
    Exception message: 패딩이 잘못되었으며 제거할 수 없습니다.
 
Request information:
    Request URL: http://WebResource.axd?d=9n4PyABCLnJPx4xoU3nxwC4Kt15K3u-a245UfT6hW8JSf4r6suGuS1kEScfmyvro0&t=633739595980000000
    Request path: /WebResource.axd

[패딩이 잘못되었으며 제거할 수 없습니다. (Padding is invalid and cannot be removed.)]


이 에러는 WebResource.axd 파일을 요청할 때 발생합니다.
이 파일은 ASP.NET의 컨트롤을 사용하는 경우 요청되는데요.
이 때 암호화 작업이 발생합니다. 암호화에 사용되는 Machine Key는 서버가 가지고 있습니다.
ASP.NET에서 Machine Key를 설정한적이 없다면 동적으로 생성되어 사용됩니다.

서버가 한대일 경우는 상관 없지만, 여러대 이면서 LoadBalancing을 하는 경우는 문제가 발생합니다. 요청마다 서버가 바뀌므로 암호화 키를 전달해준 서버가 아닌 서버가 암호화된 정보를 받는다면 해독할 수 없으므로, 위 처럼 오류가 발생하는 것이지요.


이는 모든 웹 어플리케이션 서버의 Machine Key를 동일하게 함으로 해결할 수 있습니다.
새로운 Machine Key 키 생성은 다음의 사이트에서 도움을 받으세요.

http://aspnetresources.com/tools/machineKey


생성된 Machine Key는 web.config에 다음의 형태로 삽입하면 됩니다.
 </system.web>
 <machineKey validationKey="D3373ECBFB7F1D94A57890DD8C676F5E925713E79BCF5A8A2692D408A5E9A1E06ED9FBF352B876D2B465EE70DDCF69CA2FD263711401ED6171ED5AC8F795E88A" decryptionKey="0B12BC1D697005FF915095556F3E528F261F5D08847AAB9881E409D525D1D5C6" validation="SHA1" decryption="Auto" />
 </system.web>

 

참고자료
-- machineKey 요소(ASP.NET 설정 스키마)
http://msdn.microsoft.com/ko-kr/library/w8h3skw9.aspx

 

 

출처 : http://inaekkuya.blog.me/70090690083

Posted by Sting!

댓글을 달아 주세요


Visual SourceSafe over the Internet using HTTP

여러 명이 공동작업을 하는 데 프리랜서 그룹이라고 하자. 멋있는 말로 분산개발환경이라고 하면 되나? 이번에 나온 Visual SourceSafe(VSS, 소스세이프)는 인터넷을 통한 작업이 가능하게 지원을 한다. SSL을 이용하면 더 안전하겠지만 이 부분은 생략하기로 한다.
먼저 Visual SourceSafe를 설치하고 공유할 데이터 베이스를 지정한다. HTTP를 사용할 경우 로컬인 경우도 꼭 \\ComputerName\SharedFolderName 으로 지정을 해야한다.


새로 추가된 기능의 하나로 Multiple Checkouts를 지원한다.


보안에 대한 안내로 Everyone 그룹에 대한 권한이 있다면 제거하라는...



HTTP를 통한 소스세이프 사용을 위해 SSL을 사용할 것을 권한다. 현재는 테스트라 Yes를 눌러 무시했다.

IIS관리자에 해당 SourceSafe 가상 폴더가 생성되고 VssService.asmx 웹서비스가 구성된 것을 확인 할 수 있다.

ASP.NET 1.0을 동시에 쓰는 경우는 꼭 APP Pool을 ASP.NET 2.0으로 맞춰주길~


WebDAV가 허용되어 있는 것을 확인할 수 있다.

Visual Studio 2005의 Tools ? Option을 보면 아래와 같이 Internet을 통한 소스제어가 가능하게 선택을 할 수 있다.

설정을 변경하고 프로젝트를 오픈하면 그림과 같이 SourceSafe (Internet)항목이 보인다.

Address에는 http경로를 넣으면 된다. 예를 들면 http://aaa.bbb.com/ 그리고 Folder에는 \\ComputerName\SharedFolderName ....
Posted by Sting!

댓글을 달아 주세요

ASP.NET 실행주기

ASP.NET 2010. 10. 4. 17:31

출처 동석이의 블로그 | 허둥사마
원문 http://blog.naver.com/tit99hds/120018010240

개요

페이지의 실행주기가 언뜻 아무것도 아닌것처럼 보이나 어떠한 복잡한 로직이 페이지에 구현될때

실행주기때문에 머리가 엉킨 경험을 한번씩은 경험 해 보았을 것이라고 생각합니다.

페이지의 실행주기를 한번만 확실히 집고 넘어가면 앞으로 개발하는데 많은 장점이 있을 듯 합니다.



<%@ Page Language="C#" Debug=true %>
<Script Language="C#" Runat="Server">
string s = "데이타 바인드 하기";
private void Page_Init(Object o , EventArgs e)
{
 Response.Write("Page_Init 이벤트 발생!<p>");
}
private void Page_Load(Object o , EventArgs e)
{
 Response.Write("Page_Load 이벤트 발생!<p>");
}
private void Page_PreRender(Object o , EventArgs e)
{
 Response.Write("Page_PreRender 이벤트 발생!<p>");
}
private void Page_Unload(Object o , EventArgs e)
{
 //페이지가 메모리에서 언로드 될때 발생, 아직 해제(disposed)되지는 않는다
 //응답을 사용할수 없다(Respnose개체 사용 불가)
 //화면에 출력하는 코드를 사용할 수 없다
}
private void Page_Disposed(Object o , EventArgs e)
{
 //페이지 생명주기 마지막 단계
 //페이지가 메모리에서 해제됨
}
private void DoClick(Object o , EventArgs e)
{
 Response.Write("클릭 이벤트 발생!(포스트 백 일어남)<p>");
 //Page.DataBind();
}
</Script>
<form runat="server">
 <asp:Button Runat="Server" OnClick="DoClick" Text="클릭!" /><p> <%# s %>
</form>

위의 코드는 페이지 실행주기동안에 발생하는 대부분의 이벤트입니다.

1. 페이지가 처음 로딩될 경우 [ init -> load -> PostBack체크 -> preRender 순으로 발생 ]


2. 포스트 백(버턴클릭시)이 될 경우 [ init -> load -> PostBack체크 -> 버턴클릭이벤트 -> PreRenader 순으로 발생 ]

주의 할 것은 포스트백이 일어날때 Page_Load 이벤트는 다시 호출되며 컨트롤의 
이벤트보다 먼저 수행된다는 점입니다. 
실수를 해보지 않은 사람은 다 아는 내용이지 않는냐 하겠지만 한번씩 실수를 해본 사람은 
이미 알고 있고 또한 기본적이지만 중요한 개념입니다. 
그리고 Page_PreRender 이벤트는 컨트롤의 이벤트 뒤에 또는 처음로딩시 호출되기에 
나름대로 유용하게 쓰일 수 있는 이벤트이기도 하죠. 
 
3.

private void Page_DataBind(Object o , EventArgs e)
{
    Response.Write("Page_DataBind 이벤트 발생<p>");
}
Page의 또다른 이벤트인 DataBind 입니다. 
이 놈은 페이지에서 DataBind 가 호출될때 발생하는 이벤트 입니다. ( ex> Page.DataBind(); ) 
이 외에도 실행주기에 대한 내용은 많지만 제가 아는 내용은 대략 이정도군요^^ 
 


페이지 요구시 처리과정

  1. init : 페이지 초기화
  2. ViewState복구
  3. Load : 일반적으로 알고 있는 Page_Load()
  4. PostBack 이벤트 처리
  5. PreRender
  6. ViewState 저장
  7. Render
  8. UnLoad : 페이지 객체 소멸 직전에 발생하는 이벤트


서버 컨트롤의 실행주기

  1. 컨트롤 생성
  2. Init
  3. ViewState 복구
  4. PostBack 데이터 처리
  5. Load
  6. 데이터 변경 이벤트
  7. PastBack 이벤트
  8. PreRenser
  9. ViewState 저장
  10. Render
  11. UnLoad
Posted by Sting!

댓글을 달아 주세요


1. 단순 스크립트 블록일때.(cs파일에서)

string Script="<script language=javascript>";
Script+="parent.location.href='http://kr.yahoo.com';";
Script+="</";
Script+="script>";
------------------------------------------------------------- 자바스크립트 소스부분 스트링으로 선언

this.RegisterClientScriptBlock("OnStart",Script);
------------------------------------------------------------- 자바스크립트 실행 메소드

2. 메소드 스크립트 블록일때
aspx파일에서 스크립트 블록
<script language=javascript>
function test()
{
......( 메소드 내용);
}
</script>

cs파일에서 자바스크립트 메소드 호줄
private void Button1_Click(object sender, System.EventArgs e)
{
string method="test();";

Button1.Attributes.Add("onclick",method);
Posted by Sting!

댓글을 달아 주세요