HttpServerUtility에 액세스하는 방법.스레드 또는 타이머의 MapPath 메서드?
사용합니다.System.Timers.Timer
나의 Ap에서.인터넷 애플리케이션과 나는 사용해야 합니다.HttpServerUtility.MapPath
를 통해서만 사용할 수 있는 것처럼 보이는 방법.HttpContext.Current.Server.MapPath
문제는HttpContext.Current
이라null
그 때Timer.Elapsed
화재 사건
HttpServerUtility 개체에 대한 참조를 얻을 수 있는 다른 방법이 있습니까?우리 반의 컨스트럭터에 주입할 수 있습니다.그것은 안전한가요?현재 요청이 끝날 때 가비지 수집이 되지 않는지 확인하려면 어떻게 해야 합니까?
감사합니다!
사용할 수 있습니다.HostingEnvironment.MapPath()
대신에HttpContext.Current.Server.MapPath()
아직 스레드나 타이머 이벤트에서 시도해 본 적은 없습니다.
제가 고려한 몇 가지 (실행 가능하지 않은) 해결책;
내가 신경 쓰는 유일한 방법은
HttpServerUtility
이라MapPath
그래서 제가 다른 대안으로 사용할 수 있습니다.AppDomain.CurrentDomain.BaseDirectory
여기서부터 내 길을 닦는 거지그러나 앱에서 가상 디렉터리를 사용하는 경우에는 실패합니다(내 디렉터리).또 다른 접근 방식: 필요한 모든 경로를 데이터 센터에 추가합니다.
Global
class. 이 경로들을 해결합니다.Application_Start
.
이렇게 하면 가상 디렉터리 문제가 해결될 수 있을지는 모르겠지만 MapPath:
public static string MapPath(string path)
{
if (HttpContext.Current != null)
return HttpContext.Current.Server.MapPath(path);
return HttpRuntime.AppDomainAppPath + path.Replace("~", string.Empty).Replace('/', '\\');
}
HostingEnvironment는 모의하기가 매우 어려운 클래스이기 때문에 완벽한 솔루션은 아닙니다(HostingEnvironment를 사용하는 테스트 코드를 구성하는 방법 참조).맵 경로).
테스트 가능성이 필요한 사용자의 경우, https://stackoverflow.com/a/1231962/85196, 에서 제안한 대로 자체 경로 매퍼 인터페이스를 만드는 것이 더 나은 방법일 수 있습니다. 단,
public class ServerPathMapper : IPathMapper {
public string MapPath(string relativePath) {
return HostingEnvironment.MapPath(relativePath);
}
}
결과는 쉽게 조롱할 수 있고, 내부적으로 호스팅 환경을 사용하며, 69s의 문제를 동시에 해결할 수도 있습니다.
타이머를 시작하기 전에 MapPath 함수를 호출하지 말고 결과만 캐시할 수 있습니까?틱 이벤트 내에서 MapPath 호출이 꼭 필요합니까?
시간이 경과하면 현재 HTTP 컨텍스트가 없습니다.타이머 이벤트가 특정 HTTP 요청과 관련이 없기 때문입니다.
HttpServerUtility를 사용해야 합니다.HTTP 컨텍스트를 사용할 수 있는 MapPath입니다.요청 파이프라인 이벤트(예: Page_Load) 중 하나 또는 Application_Start와 같은 Global.asax 이벤트에서 이 작업을 수행할 수 있습니다.
MapPath 결과를 Timer에서 액세스할 수 있는 변수에 할당합니다.경로를 사용할 수 있는 경과 이벤트입니다.결합하여 필요한 특정 파일의 위치를 가져옵니다.
그때 null인 이유(생각해보면)는 HTTP 요청의 일부로 타이머 경과 이벤트가 발생하지 않기 때문이라고 생각합니다(따라서 컨텍스트가 없습니다).서버의 문제로 인해 발생했습니다.
언급URL : https://stackoverflow.com/questions/111927/how-to-access-the-httpserverutility-mappath-method-in-a-thread-or-timer
'programing' 카테고리의 다른 글
SQL Server의 다른 저장 프로시저에서 호출된 저장 프로시저의 SELECT 출력을 억제하는 방법은 무엇입니까? (0) | 2023.06.29 |
---|---|
Angular 8에서 서비스를 이용한 행동 주체 구현 방법 (0) | 2023.06.29 |
오라클. 날짜와 시간을 어떻게 출력합니까? (0) | 2023.06.29 |
Firebase를 사용하여 이름 속성별로 사용자 가져오기 (0) | 2023.06.29 |
T-SQL을 사용하여 날짜/시간 가져오기 (0) | 2023.06.29 |