2013-04-11 4 views
2

최근에 나는이 물었다.C# IIS 7 자료 URL이

나는 다음은 다음 IIS 7에

를 가리 킵니다 설치, 설치 생산 나는했다 :

void Application_Start(object sender, EventArgs e) 
    { 
     _baseUrl = HttpContext.Current.Request.Url.ToString(); 
     .... 
    } 

그러나 이것은 다음과 같은 오류 던졌다 :

요청에서 사용할 수 없습니다를 이 컨텍스트

나는 약간의 독서를했으며, 그 이유는 다음과 같다.

http://mvolo.com/iis7-integrated-mode-request-is-not-available-in-this-context-exception-in-applicationstart

는 I는 I Application_BeginRequest이 여러 번 실행되고 발견 된 위의 기술을 사용하여, Application_BeginRequest을 위해 Application_Start로부터 코드를 옮겼다.

그러나 문제는 내가 위해 Application_Start에서 사용하기 위해, IIS 7의 기본 URL을해야하고, 그래서 내가에서 설정하려고 글로벌 문자열이 있습니다 :이 작업을 시도 할 때

FirstRequestInitialization.Initialize(context); 

하지만하지를 surpriseingly을 :

Application["BaseUrl"] = HttpContext.Current.Request.Url.ToString(); 

이 오류를 얻을 : 는 'Microsoft.Web.Administration.Application'가 '형'이다 하지만

012,351,641에 '변수'처럼 사용된다

내가 원하는 건 IIS 7의 기본 URL은

나는 IIS에게 내가이 작업을 수행 할 수있는 방법 6.

를 지원할 수 없기 때문에 내가 디렉토리 항목 사용할 수 없습니다? 해결 방법은 무엇입니까? VS에서 AppCmd를 실행할 수 있습니까?

도움을 주시면 감사하겠습니다. 감사!

답변

4

짧은 답변 : 웹 사이트에 단일 정식 기본 URI가 없으므로 가져올 수 없습니다. 모든 바인딩, 모든 도메인 이름에 대한 요청에 응답하도록 웹 사이트 (또는 웹 응용 프로그램)를 구성 할 수 있습니다. , 및 모든 리소스 경로 - 호스트 웹 서버 (IIS)에서 응용 프로그램을 전혀 인식하지 않고 웹 사이트를 다시 구성 할 수 있습니다.

당신이 정말로 당신의 "기본 URL"을 저장하려면 (일이 실제로 존재하지 않는 심지어 불구하고) 다음과 같이 Application_BeginRequest 내에서 작업을 수행 할 수 있습니다

private static readonly Object _arbitraryUrlLock = new Object(); 
private static volatile String _arbitraryUrl; 

public void Application_BeginRequest() { 
    if(_arbitraryUrl == null) 
     lock(_arbitraryUrlLock) 
      if(_arbitraryUrl == null) 
       _arbitraryUrl = HttpContext.Current.Request.Url.ToString(); 
} 
+0

내가 코멘트를 추가하는 잠금을 수행하기 전에 _arbitraryUrl이 널인지 확인하고 널인 경우에만 잠금을 수행하려고합니다. 그렇지 않으면 모든 요청을 불필요하게 잠그고 있습니다. –

+0

Thansk, 좋은 캐치! – Dai

+0

감사합니다 Dai, CarlosAg, 응용 프로그램이 시작될 때 IIS7의 모든 응용 프로그램에 대한 하이퍼 링크를 만들고 싶습니다. 그래서 기본 URL이 필요한 것입니다. –