WCF 서비스를 설계하고 있습니다. netTCP 바인딩을 사용하고 있습니다. 서비스는 멀티 스레드 클라이언트에서 호출 될 수 있습니다. 다중 스레드 클라이언트가 프록시를 공유하지 않습니다.WCF 디자인 질문
1. WCF 서비스 설계 질문.
클라이언트는 모든 호출에서이 두 값인 UserID 및 SourceSystemID를 전송해야합니다. 이렇게하면 서비스가 사용자와 사용자가 속한 시스템을 식별하는 데 도움이됩니다. 모든 호출에서이 두 값을 전달하는 대신 클라이언트에서 호출하는 동안 서비스와 함께 캐시되도록 결정했습니다. 이 기사에서 설명한대로 서비스에 대한 매개 변수화 된 생성자를 지정하고이 값을 ChannelContext에 저장하기로 결정했습니다. http://www.danrigsby.com/blog/index.php/2008/09/21/using-icontextchannel-extensions-to-store-custom-data/
처음에는 세션에 값을 저장하고 초기화 및 종료 방법을 알고 싶었습니다. 그러나 거기에서 각각의 경우에 수동으로 세션을 정리해야한다는 것을 알게되었습니다. 채널 컨텍스트에 값을 저장할 때마다 매번이를 정리할 필요가 없으며 채널이 닫히면 저장된 값이 이미 파괴됩니다. 누군가 내 가정에서 내가 맞는지 확인할 수 있습니까?
2. SessionMode를 사용해야합니까? 계약서에는 [ServiceContract (SessionMode = SessionMode.Required)]를 사용했으며이 서비스 특성은 사용하지 않았습니다.
내 선택에 관계없이 항상 다음 값을 찾습니다. System.ServiceModel.OperationContext.Current.SessionId 어떻게 설명 할 수 있습니까?
내가 SessionMode.Required라고 말하면 내 InstanceContextMode가 자동으로 PerSession으로 변경됩니까?
3. InstanceContextMode를 사용 하시겠습니까? (1)에서 언급 한 것처럼 채널 컨텍스트에 일부 값을 저장한다는 점을 제외하면 내 서비스는 상태 비 저장입니다. Percall 또는 PerSession을 InstanceContextMode로 사용해야합니까?
세션에 대한 훌륭한 통찰에 감사드립니다. 현재 전송 수준 세션을 사용 중이며 PerCall을 사용하여 응용 프로그램 세션을 사용하지 않도록 설정했습니다. –