문제

웹 응용 프로그램은 프록시를 사용하여 회사와 관련된 다양한 판매 지역, 현장에 있는 다양한 매장 등과 같이 AS400에서 데이터를 반환하는 WCF 서비스에 대한 작업을 호출합니다.이러한 판매 지역과 매장은 자주 변경되지 않으며 매장은 1년에 두 번만 추가되며 지역은 몇 ​​년 동안 동일했습니다.

내 혼란은 InstanceContextMode에 있다고 생각합니다.프록시 클라이언트가 GetRegions() 또는 GetStoresForRegion(int RegionNumber)를 호출할 때 "지역" 및 "상점" 목록을 반환합니다.

InstanceContextMode를 단일로 설정하고 서비스 작업 호출 전에 지역과 저장소를 초기화하고 채우면 어떤 식으로든 도움이 됩니까?기본적으로 지금은 모든 호출에 대해 DB 조회를 수행하고 있는데 그럴 필요는 없다고 생각합니다.

따라서 사용자가 웹앱에 로그온 -> 웹앱 페이지 -> 지역 드롭다운을 로드해야 함 -> 웹 개발자가 지역을 가져오기 위해 프록시를 호출합니다...하지만 이는 모든 단일 사용자가 웹 앱을 사용할 때 발생하므로 기본적으로 사용자가 웹 앱에 액세스할 때마다 프록시가 DB를 호출합니다. 이는 서비스 운영을 설정하는 방식에 있어서 어리석은 일이자 오류라고 생각합니다. 아니면 내가 뭔가를 완전히 오해한 걸까?

업데이트 - 서비스는 IIS에서 호스팅되므로 이 질문 전체가 논란의 여지가 있을 수 있습니다.

도움이 되었습니까?

해결책

기본적인 모범 사례 권장 사항은 호출별 단일 인스턴스 서비스를 사용하는 것입니다.이는 생성하기 가장 쉽고 동시성 악몽 등이 없습니다.

하지만:물론 서비스를 호출할 때마다 서비스 인스턴스가 생성되고 데이터베이스 백엔드가 쿼리됩니다.

가능하다면 이것을 고수하려고 노력하십시오.캐싱 논리를 데이터베이스에 넣으십시오. RAM이 충분하면 자주 요청하는 대부분의 데이터가 메모리에 유지됩니다.

WCF 서비스에서 ConcurrencyMode = multiple로 전환하면 매우 주의해야 할 모든 종류의 동시성 문제가 발생합니다.가능할 때마다 이것을 피하십시오.

먼저 호출별, ​​단일 인스턴스를 시도하고 꼭 필요한 경우에만 최적화하세요!

마크

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top