2014-11-10 5 views
0

웹 서비스로 별도의 웹 응용 프로그램에 "로그 서비스"가 있습니다. 사용자 페이지 로깅을 위해 새로운 스레드를 만들고 웹 서비스를 호출합니다. 이런 방식으로 최종 사용자는 "로그 서비스"를 호출 할 때까지 기다리지 않고 즉시 응답을 얻습니다.ASP.NET에서 많은 수의 스레드를 생성합니다.

어떤 문제가 발생할 수 있습니까? 누군가 "F5"를 오랫동안 누르고 있다면 어떨까요? 스레드 풀을 사용하면 어떻게됩니까?

더 좋은 아이디어가 있습니까?

+0

웹 서비스를 비동기 적으로 호출 할 수 있습니까? 비동기 연산을 사용하여 클라이언트 코드를 생성 할 수 있다면'service.Log (...) '대신'service.AsyncLog (...)'를 호출 할 수 있어야합니다. –

답변

1

새 스레드를 만드는 것은 값 비싼 작업이기 때문에 각 웹 서비스 호출마다 새 스레드를 만드는 것은 좋지 않습니다.

기존 스레드를 다시 사용하기 때문에 ThreadPool을 사용하는 것이 좋습니다. 이 경우 ThreadPool.QueueUserWorkItem 방법을 사용할 수 있습니다.

웹 서비스에 대한 비동기 호출을 만드는 것이 최선의 선택이라고 생각합니다. 호출하는 웹 서비스의 유형에 따라 다릅니다. 웹 서비스가 SOAP 서비스 일 때 생성 된 서비스 참조에서 비동기 메서드를 사용할 수 있습니다. 그렇지 않으면 WebClient.UploadStringAsync과 같은 WebClient 클래스의 비동기 메서드 중 하나를 사용할 수 있습니다.

1

크래시, 배포 또는 재부팅이 발생하고 모든 뛰어난 작업이 손실 될 수 있습니다.

또한 무제한의 리소스를 사용할 수 있습니다. 쓰레드는 비싸다 (1MB 메모리). 스레드 풀을 사용하거나 외부 서비스에 대한 비동기 IO 또는 일괄 호출을 사용합니다.

또한 백그라운드 스레드의 처리되지 않은 예외로 인해 프로세스가 더 이상 알리지 않고 종료 될 수 있습니다. 그 버그에 대해 통보를받지 않고 뛰어난/실행중인 작업을 잃어 버리게됩니다.

관련 문제