2012-12-03 10 views
0

내 웹 역할의 백그라운드에서 실행되는 메시징 서비스를 만드는 중입니다. 웹 역할이 시작되면 하루에 한 번 실행되는 Quartz 작업을 시작하고 이메일을 보냅니다. 유휴 상태로 절대로 절대로 잠들지 않도록 웹 역할을 설정했습니다. 이렇게하면 내 사이트의 활동에 관계없이 내 직무를 실행할 수 있습니다.배포시 Azure 웹 역할 시작

내가 처음으로 배포 한 작업이 처음 시작될 때 사이트를 방문하지 않으면 문제가 발생합니다. 나는 내 웹 서비스가 일부 Azure 마법에 의해 새로운 인스턴스로 옮겨지면 내 이메일 서비스가 실행되지 않을 것이라고 걱정합니다.

작업은 Application_Start 메소드의 Global.asax에서 시작됩니다. 웹 역할이 배포 될 때 자동으로 시작되게하려면 어떻게해야합니까? -Edit-

원래 나는 WebRole.cs ONSTART에서 내 일을 시작하려고했지만, 나는 내 데이터베이스 연결에 대한 엔티티 프레임 워크에서 오류를 얻고 있었다. 그래서 누구든지 WebRole.cs OnStart 내 웹 구성에서 연결 문자열에 액세스하는 방법을 알고 내 질문에 너무 대답 할 것이다.

답변

1

당신의 WebRole.cs에 코드를 넣어 : 인스턴스가 시작될 때

public class WebRole : RoleEntryPoint 
{ 
    public override bool OnStart() 
    { 
     Task.Factory.StartNew(StartQuartzJob); 
     return base.OnStart(); 
    } 

    private void StartQuartzJob() 
    { 
     // Do work here.    
    } 
} 

이 코드를 실행 (재부팅 후하는 배포 한 후, ...). 이점은 웹 응용 프로그램이 IIS에서 시작되기 전에 실행되는 다른 프로세스 (WaIISHost.exe)에서 실행된다는 것입니다. 따라서 해당 인스턴스로 이동하는 요청이 없거나 응용 프로그램 풀이 재활용되면이 프로세스가 계속 실행됩니다. 이 과정이 다르므로 web.config에 액세스 할 수 없게됩니다.

+0

그래도 문제 일뿐입니다. 내 이메일 서비스는 내 데이터베이스를 쿼리하여 이메일을 생성합니다. 연결은 웹 구성에 있습니다. 이 문제를 해결하는 방법에 대한 제안이 있으십니까? ORM으로 엔티티 프레임 워크를 사용하고 있습니다. –

+0

두 가지 옵션이 있습니다. [WaIISHost.exe.config] (http://blogs.msdn.com/b/windowsazure/archive/2010/12/02/new-full-iis-capabilities-differences-from- hosted-web-core.aspx)이 파일에 연결 문자열을 추가하거나 Visual Studio에서 웹 역할을 열면 서비스 구성 (설정 탭)에 연결 문자열을 저장하고이 문자열로 컨텍스트를 초기화합니다. 'var context = new MyDatabaseContext (CloudConfigurationManager.GetSetting ("MyConnectionString"));' –