2010-03-16 2 views
33

WAS를 사용하도록 IIS7에서 현재 호스팅되는 내 WCF 응용 프로그램에 netTcpBinding을 사용하고 싶습니다. 그러나 이것은 매우 간단합니다. 그러나 이전에 global.asax 파일에서 Application_Start 이벤트를 사용했습니다. httpContext에 대한 액세스 (IIS7에서 액세스가 제거되었음을 이해함)가 필요하지 않지만, 여전히 시작 또는 초기화 메소드에 연결하고 싶습니다.IIS7에서 WAS를 사용할 때 global.asax Application_Start의 기능은 무엇입니까?

WAS에서 IIS7에 응용 프로그램을 호스팅 할 때 해당 기능이 있습니까?

클래식 모드를 사용하는 것은 옵션이 아닙니다 (다시 httpcontext에는 관심이 없습니다. http 바인딩을 사용하는 경우에만 작동하는 것으로 보입니다) - 정적 클래스를 app_code 폴더에 삽입하는 예제를 보았습니다 끔찍한 해킹처럼 보입니다.

답변

27

나는 AppInitialize()이 당신이 찾고있는 방법이라고 생각합니다.

Castle Windsor and non-HTTP Protocol WCF Services

기사의 본질 대신 WAS에서 호출되지 않습니다 Application_Start()를 사용한다 : 여기를 호스팅하고 WCF 서비스에 성 윈저를 초기화하는 데 사용에 대한 기사는 다음과 같습니다

protected void Application_Start(object sender, EventArgs e) 
{ 
    var container = new WindsorContainer("ioc.config"); 
    DefaultServiceHostFactory.RegisterContainer(container.Kernel); 
} 

사용 :

public class InitialiseService 
{ 
    /// <summary> 
    /// Application initialisation method where we register our IOC container. 
    /// </summary> 
    public static void AppInitialize() 
    { 
     var container = new WindsorContainer("ioc.config"); 
     DefaultServiceHostFactory.RegisterContainer(container.Kernel); 
    } 
} 

매트를 인용 :

나는 내가 DefaultServiceHostFactory 포장을 찾고, 더 자세히 호스트 공장에서 을 찾고있는 동안을 보냈다 고백합니다. 그러나 훨씬 간단한 솔루션으로는 이 나타나고 작은 문서화 된 AppInitialize 메서드를 사용하는 것이 좋습니다. 클래스 (모든 클래스)를 만드는 경우 프로젝트의 ASP.NET App_Code 폴더에 넣고 아래에 정의 된대로 메서드 서명을 지정하면이 작은 아기가 원할 때 정확히 번 해고됩니다. 그런 다음 IoC 컨테이너를 초기화 할 수 있습니다.

+0

respone을 주셔서 감사합니다. 나는 그것을 가로 질렀다. 그러나 가볍게보기에는 오히려 "hacky"해 보인다 ... 나는 app_code 폴더에 의존해야한다고 생각하지 않았다. –

+0

하지만 VS Web Server (일명 Casini, ASP.NET Dev Server)에 의해 무시되는 것 같습니다. – abatishchev

+0

@abatishchev - IIS Express는 어떻게됩니까? – Kev

13

AppInitialize는 서비스를 초기화하는 유효한 방법입니다. 그러나 당신을 위해 더 잘 작동 할 수있는 몇 가지 다른 방법이 있으며이 기사에서 설명합니다. How to Initialize Hosted WCF Services

+0

감사합니다. Graham -이 코드를 검증 할 기회가 없었지만 기사는 다른 해킹 솔루션에 의존하지 않는 것보다 더 나은 옵션처럼 보입니다. –

+0

Application_Start는 전체 응용 프로그램에 대해 하나를 실행합니다. 링크와 같은 서비스 팩토리를 사용하면 서비스 당 한 번 실행되므로 코드를 두 번 실행하지 않으려면 추가 로직이 필요합니다. –

관련 문제