문제

사용자가 파일을 업로드 할 수있는 웹 앱이 있습니다. 파일은 IIS가 외부 저장 장치에 매핑 된 가상 폴더에 물리적으로 저장됩니다. 업로드 된 각 파일에 대한 레코드는 데이터베이스에 저장됩니다. 데이터베이스 레코드에는 파일이 여전히 "활성화 된"(사용자가 삭제되지 않음) 및 가상 폴더 경로 (예 : /stoage1 /test)에 대한 정보가 포함되어 있습니다.

이제 IIS 외부에서 관리 작업을 주기적으로 실행하여 더 이상 "활성화되지 않은"모든 파일 목록을 검색하고 물리적 저장소에서이를 삭제하고 싶습니다. 관리 작업이 예정된 작업 또는 Windows 서비스로 IIS 외부에서 실행되기를 바랍니다. 그러나 데이터베이스 레코드에 저장된 가상 폴더 경로를 외부 프로세스에서 물리적 경로로 매핑하는 방법을 알 수 없습니다. 외부 프로세스에서 IIS를 "탭"하는 방법이나 다른 현명한 방법이 있습니까? (또는 내가 완전히 잘못된 방향으로 가고 있습니까).

Tia /Henrik

도움이 되었습니까?

해결책

프로젝트에서 System.Web에 대한 참조를 추가해야합니다.

string path = System.Web.HttpServerUtility.MapPath("/MyWebSite");

다른 팁

앱이 ASP.NET 앱 인 경우 Server.MAPPATH CALL을 조사 할 수 있습니다. 기본 앱과 동일한 가상 디렉토리를 사용하는 경우.

그렇지 않으면 외부 앱에 대한 구성에 "기본 경로"(가상 디렉토리 경로에 해당)를 저장하고 해당 기본 경로와 파일 경로를 전체 경로로 연결하는 것이 좋습니다.

마크

이 경로를 프로그래밍 방식으로 검색 해야하는 경우 다음과 같은 작업을 수행 할 수 있습니다.

using(DirectoryEntry de = 
    new DirectoryEntry("IIS://Localhost/w3svc/1/root/storage1/test"))
{
    string pathToFiles = de.Properties["Path"].Value;

    // Do my file tidy up tasks....
}

주목해야 할 몇 가지 사항이 있습니다.

  • 수 '1'의 길에DirectoryEntry 생성자는 사이트의 IIS 번호입니다.

  • 길에서IIS://Localhost/w3svc/1/root/storage1/test, 첫 번째 부분IIS://Localhost/w3svc/1/root 웹 사이트의 '루트'응용 프로그램입니다. 당신은 항상이 부분이 필요합니다.

  • 에 대한 참조를 추가해야합니다 System.DirectoryServices프로젝트에 어셈블리.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top