사람들이ASP.NET MVC를 IIS 6에서 실행하는데 문제가 있다는 많은 보고서를 보았습니다. 때때로 문제는 매우 사소한 구성 오류이고, 때로는 IIS 6의 작동 방식에 대한 오해입니다.
이 게시물에서는 IIS 6에서 ASP.NET MVC를 실행하는 방법에 대한 확실한 가이드를 제공하고 싶습니다.먼저 URL에 대해.mvc또는.aspx파일 확장명을 사용하는 방법을살펴본다음 확장명이 없는 URL을 사용하여살펴 보겠습니다.
IIS 6 및 ASP.NET MVC에 문제가있는 경우.mvc또는.aspx매핑사용에 관심이없더라도이게시물의 모든 단계를 수행하는 것이 좋습니다.여기서 배운 교훈 중 일부는 ASP.NET MVC와 관련된 것보다 ASP.NET 자체가 IIS 6에서 작동하는 방식과 더 관련이 있습니다.
초기 설정
이 작업을 쉽게하려면 Visual Studio를 시작하고IIS 6이 설치된 컴퓨터에서 새ASP.NET MVC 웹 응용 프로그램 프로젝트를만듭니다.IIS 6 컴퓨터가 다른 컴퓨터에 있는 경우이 단계를 건너 뛸 수 있습니다.나중에 시스템에 사이트를 배포 할 수 있습니다.
프로젝트를 만든 후 프로젝트를 마우스 오른쪽 단추로 클릭하고속성을선택합니다.프로젝트 속성 편집기가 열립니다.웹탭을 선택하고IIS 웹 서버 사용을선택합니다.전체 크기로 보려면 이미지를 클릭하십시오.
프로젝트 속성 편집기
프로젝트 URL에서Iis6DemoWeb이라는 가상 애플리케이션 이름을지정한다음Create Virtual Directory를 선택했습니다.대화 상자가 나타나고 이제 기본 웹 사이트 아래에 IIS 가상 응용 프로그램이 있어야합니다 (이는 기어 모양 아이콘으로 표시되는 가상 디렉터리와 다릅니다).
IIS 6 가상 웹 응용 프로그램
URL 파일 확장자 사용
ASP.NET MVC 설치 관리자를 실행하면 IIS 6에서 ISAPI 매핑을 설정하여.mvc extension 을aspnet_isapi.dll에 매핑합니다.이는 IIS가.mvc파일 확장명을사용하는 요청을 ASP.NET 으로전달하기 위해 필요합니다.
확장명이 없는 URL을 사용할 계획이라면이 이번 섹션을 건너 뛸 수 있지만, 확장명이 없는 URL을 설정할 때 알아야 할 몇 가지 정보가 있으므로 어쨌든 읽는 것이 유용 할 수 있습니다.
.mvc를 ASP.NET에 매핑
.mvcURL 확장을 사용하고ASP.NET MVC가 설치되지 않은 컴퓨터에서 IIS 6에 배포하려는 경우 다음 단계를 수행하여이 매핑을 만들어야합니다.
.mvc 대신에 .aspx 확장자를 사용하면 좋은게 하나 있는데 그것은 .aspx 확장자에 대해 매핑하는 부분에 대해서 걱정할 필요가 없다는 것입니다. 이는 machine 상에 아마도 asp.net 이 설치되면서 이미 매핑 해 두었기 때문입니다.
나머지는가상 애플리케이션노드 (이 경우IIS6DemoWeb)를마우스 오른쪽 버튼으로 클릭하고속성을선택합니다.다음 대화 상자가 표시되어야합니다.
웹 사이트 속성
Virtual Directory탭에 있는지 확인하고Configuration을선택합니다.루트 웹 사이트에서이 변경을 수행하도록 선택할 수도 있습니다. 이 경우 찾고 있는 탭은가상 디렉토리가아닌홈디렉토리입니다.
이것은 나타납니다응용 프로그램 구성ISAPI 매핑의 목록을 표시 대화 상자를.아래로 스크롤하여 .mvc가 목록에 있는지 확인합니다.
응용 프로그램 매핑
스크린 샷에서.mvc가 목록에있음을 알 수 있습니다.컴퓨터의 목록에 존재한 경우, 다음 섹션으로 건너 뛸 수 있습니다.목록에 없는 경우 목록에 추가 하겠습니다.먼저 aspnet_isapi.dll 의 경로를 알아야합니다.내 컴퓨터에서는 다음과 같습니다.
컴퓨터에 따라 다를 수 있습니다.쉽게 찾을 수 있는 한 가지 방법은 목록에서 .aspx 확장명을 찾아 두 번 클릭하여 매핑 대화 상자를 표시하는 것입니다.
확장 매핑
이제실행 파일텍스트 상자의 경로를클립 보드로복사 할 수 있습니다..mvc를 매핑 할 경로입니다.
취소를 클릭하여애플리케이션 구성대화 상자로 돌아간다음추가를 클릭하면 빈애플리케이션 확장 매핑 추가 / 편집 대화 상자가 나타납니다.
확장자가따옴표없이" .mvc"여야한다는 점을 제외하고 .aspx에 대해 본 것과 정확히 동일한 값으로 필드를채웁니다.확인을클릭하면 매핑이 완료됩니다.
확장자가 있는 경로 지정
응용 프로그램을 실행하기 전에.mvc또는.aspx확장명을선택하여 선택한 파일 확장명을 찾기 위해 기본 route 를 업데이트 해야합니다.
.mvc 확장자를 사용하기 위해 Global.asax.cs 파일을 찾아 RegisterRoutes 메소드를 찾습니다. 만약에 .aspx 확장자를 사용하고자 한다면 아래 코드 중에 {controller}.mvc 를 {controller}.aspx 으로 변경하시면됩니다.
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(
"Default",
"{controller}.mvc/{action}/{id}",
new { action = "Index", id = "" }
);
routes.MapRoute(
"Root",
"",
new { controller = "Home", action = "Index", id = "" }
);
}
위의 코드를 설명하자면, 두 번째 route 인 "Default"에는 URL 세그먼트의 일부에 literal 확장자를 가지고 있으므로, application root 에 대한 요청과 일치 할 수 없습니다.그래서 application root 에 대한 요청과 일치 할 수있는 "Root"라는 세 번째 route 가 있습니다.
이제 CTRL + F5 (또는 내 웹 사이트 탐색)를 누르면 다음 홈 페이지가 표시됩니다.
홈 페이지
그리고 페이지에 대해.
페이지 정보
URL에는.mvc확장자가포함되어 있습니다.
어, 휴스턴!문제가있다
물론 프로젝트의 웹 루트로 이동할 수 있기를 원할 것입니다./ Iis6DemoWeb으로이동하면 어떤 일이 발생하는지확인하십시오.
루트 홈 페이지
이것은이 연습을 작성하면서 발견 한 기본 템플릿에 포함 된Default.aspx.cs파일의 버그입니다.즉시 수정 해 드리겠습니다. 매우 쉽기 때문에 여기에서 수정 해 드릴 수 있습니다.
참고 : root 를 요청 할 때 "파일을 찾을 수 없음" 오류가 발생하면 Default.aspx 가 기본 문서로 매핑되지 않았을 수 있습니다. 따라서 Default.aspx 를 기본 문서로 추가하시면 됩니다.
가상 응용 프로그램이 아닌 IIS root 에서 웹 사이트를 만든 경우 이 문제를 발견하지 못했을 것입니다.그러나 가상 애플리케이션(virtual application) 에서 렌더링 된 stylesheet의 URL 에는 가상 애플리케이션 이름이 포함되어 있어서는 안됩니다.두 번째 인수를 false 로 변경하면이 문제가 해결됩니다.
IIS6 확장명이 없는 URL
이제 우리는IIS 6의 악명 높은 "Star mapping" 또는 "와일드 카드 매핑"기능을사용하여 extension-less URLs 로 이 작업을 합니다. 이렇게 하면 성능에 미치는 영향에 대해 많은 우려가 있기 때문에 악명 높은 것 같습니다.물론 사이트의 성능을 직접 측정하여 실제로 문제가 있는지 확인해야합니다.
첫 번째 단계는.mvcISAPI 매핑을구성 할 때했던 것처럼 Application Configuration Properties대화 상자로 돌아가는것입니다 (나중에 정보가 유용 할 수 있다고 설명했습니다).
응용 프로그램 매핑
와일드 카드 애플리케이션 맵섹션옆에있는insert…버튼을클릭합니다.
와일드 카드 확장 매핑
그러면 와일드 카드 응용 프로그램 매핑 대화 상자가 나타납니다.aspnet_isapi.dll경로를 입력합니다.이 경로를 얻기 위해 앞서 언급 한 트릭을 따를 수 있습니다.
파일이 있는지 확인 확인란 을 선택 취소하는 것을 잊지 마십시오 !이것은 사람들이 저지르는 가장 흔한 실수 중 하나입니다.
이 게시물의 모든 내용을 따라왔다면 돌아가서Global.asax.cs파일의 경로를기본 경로로재설정해야합니다. 이제 경로에 더 이상.mvc파일 확장자가 필요하지 않습니다.이 시점에서원하는 경우Default.aspx를 제거 할 수도 있습니다. 더 이상 필요하지 않거덩요.
이제 사이트를 탐색 할 때 다음 스크린 샷에서 볼 수 있듯이 URL에 파일 확장자가 없습니다.
확장이없는 홈페이지
확장이없는 페이지 정보
마지막 팁
이해해야 할 한 가지는 ASP.NET 프로젝트의 범위가 해당 프로젝트가 있는 Website 또는 Virtual Application 으로 지정된다는 것입니다.예를 들어 여기에 있는 예에서IIS6DemoWeb이라는 Virtual Application을 ASP.NET MVC 웹 응용 프로그램이 포함 된 directory를가리 켰습니다.
따라서 해당 virtual application 에 대한 요청 만 web application 에서 처리됩니다.이 경우 http://localhost/에대한 요청을 할 수 없으며web application 에서 처리 할 것으로 기대합니다.이 응용 프로그램의 라우팅이 http://localhost/not-my-app/과 같은 다른 루트 디렉토리에 대한 요청을 처리 할 것으로 기대할 수도없습니다.
여기에서 수행 한 예제에서는 데모 목적으로 virtual application 을 사용했습니다.IIS의 root Website 를 내 응용 프로그램으로 지정하고 가상 응용 프로그램이 아닌 http://localhost/에서 실행하는 것은 매우 쉽습니다.이것은 문제가 되지 않습니다.도움이 되었기를 바랍니다.