2011-10-05 2 views
1

우리는 많은 ASP.NET MVC 사이트 (클라이언트 인스턴스 당 하나의 사이트와 서버 당 약 50 개)를 실행합니다. 각 사이트에는 자체 구성/데이터베이스/등이 있습니다.ASP.NET MVC 백그라운드 서비스 처리

각 사이트는 유지 관리 일정에 따라 응용 프로그램의 버전이 약간 다를 수 있습니다.

현재 백그라운드 처리를 위해 우리는 웹 사이트의 앱 도메인에서 실행되는 Quartz.net을 사용하고 있습니다. 이것은 잘 작동하지만 장기간의 작업 후에도 appdomain이 종료 될 때 실행되지 않는 것과 같은 문제가있는 것은 분명합니다.

더 강력한 솔루션을 만들기위한 우리의 선택은 무엇입니까?

Windows 서비스가 논의되고 있지만 IIS 내에서 다른 버전으로 동일한 다중 사이트를 달성하는 방법을 알지 못합니다.

나는 각 IIS 사이트가 항상 서비스처럼 실행되지만 IIS 사이트와 동일한 방식으로 격리되는 고유 한 백그라운드 처리를 실제로 원합니다.

답변

0

각 클라이언트에 Windows 서비스를 설치할 수 있습니다. 그것은 유지 보수의 두통처럼 보입니다.

앱의 모든 버전을 이해하고 각 클라이언트를 하나씩 처리하는 단일 서비스를 작성할 수도 있습니다.

또한 SQL Server 작업을 작성하여 각 고객에 대해 하나의 작업을 설정할 수 있습니다.

+0

각 클라이언트의 Windows 서비스는 확장 성이 좋지 않습니다. SQL 작업은 응용 프로그램 외부에서 도메인 논리를 이동시킵니다. 하나의 서비스가 로직이 여전히 IIS 사이트 안에 있다면 rest/wcf 등을 통해 액세스 할 수 있습니다. AppFabric을 보면 적절한 인프라를 제공하는 것으로 보입니다. – IThasTheAnswer

0

내가 언급 한대로 각 클라이언트마다 여러 개의 데이터베이스가 있다고 가정합니다. 각 클라이언트에 대해 db connection-strings를 사용하여 사용자 정의 구성 파일을 만듭니다.

<?xml version="1.0" encoding="utf-8" ?> 
<MyClients> 
    <MyClient name="Cleint1"> 
    <Connection key="Client1" value="data source=<database>;initial catalog=client1DB;persist security info=True;user id=xxxx;password=xxxx;MultipleActiveResultSets=True;App=EntityFramework" />  
    </MyClient> 
    <Myclient name="client2".....></MyClient> 
</MyClients> 

위의 설정 파일을로드하는 Windows 서비스 쓰기 | 메모리에 (클라이언트 connectiostring)를 각 클라이언트 데이터베이스의 설정을 통해 반복. 모든 클라이언트가 비슷한 작업 큐 인프라를 가지고있어 각 데이터베이스에 대해 동일한 논리를 실행할 수 있다고 생각합니다.

Mutex을 사용하면 클라이언트에 대한 Windows 서비스를 시작할 수 있으므로 동일한 클라이언트에 대한 서비스의 두 인스턴스가 동시에 실행되지 않도록 할 수 있습니다.