QnA
|
사용언어 (칠해주세요) => (C#,VB) |
|
사용툴 (VS) : |
|
운영체제 (OS) : |
|
상세언어(칠해주세요.) => 1) ASP.NET, 2) ASP.NET MVC, 3) ASP.NET AJAX |
ASP.NET 초보입니다.
Web API용 서버를 띄웠는데
정각마다 특정 프로세스를 진행합니다.
물론 특정 클래스 안에 있는 타이머를 정각마다 작동하게 만들었고요.
이 타이머가 있는 클래스는 싱글톤으로 사용합니다.
그런데 문제가 새로운 세션이 생성되면 이 싱글톤을 또 만드는 것 같기도 하네요?
제가 원하는건 세션과 상관없이 서버가 살아있는한 계속 유지되는 타이머와 변수들인데요.
서버로 만드니 이런 문제가 있네요 어떻게 해야 할까요?
** 추가
/api/request 라는 POST api를 띄워놨습니다.
이 api를 호출할 때마다 서버에 있는 A라는 프로그램을 호출해서 값을 얻어와 반환합니다.
api를 호출했을 때 A 프로세스가 떠있으면 호출만 하고 A 프로세스가 떠있지 않으면
A를 실행시킨 뒤 변수 v에 담아놓고 호출하는데
문제는 user1이 A 프로세스를 띄워 변수 v에 담아놨는데도
일정 시간 후(약 40분) 다른 세션의 사용자는 변수 v가 null로 확인이 됩니다.
이렇게 되면서 정각마다 돌아야하는 타이머도 null이 되는 것 같네요
다음검색
댓글
댓글 리스트-
답댓글 작성자다행 작성자 본인 여부 작성자 작성시간 17.11.03 asp.net mvc web api 형태의 프로젝트 입니다
-
작성자몬난아 작성시간 17.11.06 1. 타이머는 닷넷 BCL에 3가지 종류가 있으며 각기 Thread생성 동작이 틀립니다.
2. 웹프로그램에서 타이머를 생성하는것자체가 위험한게 IIS등에 서버에 올라가면 node.js처럼 싱글 쓰레드로 동작하는것이 아니라 멀티쓰래드로 생성될것입니다. 보통 최소 CPU수 만큼 생성은 됩니다. 보통 4코어 쓴다면 최소 생성하신 변수가 static이라 할지라도 4개가 메모리에 있을겁니다.
3. wcf로 개발하시고 InstanceContextMode.Single 모드로 실행하시면 1개의 쓰레드에서 정상 동작할것같아보이나..이건 본인의 선택사항이 되는게 아닐까 싶네요 -
작성자심재운 작성시간 17.11.06 비추천하지만... 흠.... IIS의 응용 프로그램 풀의 기본 설정에는 제한 시간이 있습니다. 따라서 웹 API를 한번 호출하더라도 제한 시간이 경과하면 응용 프로그램 풀이 종료됩니다. 그래서 null 이 나올겁니다. 따라서 iis 의 pool timeout 을 비활성화 해야 하는데요. http://ssamlee.tistory.com/40
-
작성자퇴근5분전 작성시간 17.11.06 음. 서버에서 도는거면.. 스케쥴러 같은걸로 작업해서 DB나 특정 파일에 작성하는 형태로 하시고
서비스에서 이 파일에 접근하는 형태로 하셔야 되는게 아닐까용? ... 뭘 만드시려는지...
-
작성자랜덤 작성시간 17.12.09 좀 늦었지만 도움이 되신다면....이방법 문제없고요 수십개 프로젝트에서 잘도는 중입니다. 일단 타이머 대신 quartz.net을 사용하시고 정시 작동을 원하시면 cron으로 설정하시고. 싱글톤으로 하시고 따로 cs에 코딩하시면 쓰레드 상관없고요. global 이나 startup에서 시작하시면 되고요. IIS 가 중요한데 버젼마다 다르지만 AlwaysRunning을 꼭하셔야 되고요 idel timeout을 0으로 하시고 또 몇가지 세팅은 찿아보시고요 그러면 계속 돌아갑니다 재부팅 해도요. 단점은 웹코드를 업데이트하면 도중에 쓰레드가 죽고 다시지작하고요. 메모리를 많이 먹는 프로세스 안좋습니다.