세션이 아직 연결 1c에 할당되지 않았습니다. 웹 서비스의 성능을 향상시킵니다. 구성기에서 세션 닫기




1C:Enterprise 8 정보 베이스에서 일상적인 유지 관리를 수행하려면 데이터베이스에 대한 독점 액세스 권한을 얻어야 하는 경우가 많습니다. 예를 들어, 데이터베이스 백업을 수행하거나 DBMS 서버에서 일상적인 유지 관리(인덱싱 재지정 등)를 수행하려면 모든 활성 세션의 연결을 끊어야 합니다.

1C:Enterprise 서버의 표준 기능을 사용하여 정보베이스에서 사용자의 연결을 끊는 간단한 방법을 살펴보겠습니다.

표준 기능

1C:Enterprise 8의 클라이언트-서버 버전에 대해 이야기할 것이라고 즉시 예약하겠습니다. 세션을 비활성화하려면 서버 관리 콘솔로 이동하겠습니다. 목록에서 필요한 정보 기반을 찾을 수 있습니다.

정보 보안 속성으로 이동하여 '세션 시작 차단이 활성화됨' 옵션을 설정하세요. 이 경우 정보베이스 관리자 계정의 로그인/비밀번호를 입력해야 할 수도 있습니다.

세션 잠금 기간을 설정하는 것을 잊지 마세요. 또한 세션이 차단되는 동안 모든 백그라운드 작업을 중지해야 합니다. 이는 "일상적인 작업 차단이 활성화되었습니다" 옵션을 사용하여 수행됩니다.

필요한 경우 세션이 차단되기 5분 전에 알림을 받을 사용자에게 메시지 내용을 설정할 수 있으며, 세션 차단 기간 동안 정보베이스에 진입하기 위한 권한 코드도 설정할 수 있습니다.

권한 코드는 다른 세션이 비활성화된 동안 일상적인 유지 관리를 수행하기 위해 정보 베이스에 로그인하는 데 사용할 수 있습니다. 매개변수를 사용하여 데이터베이스에 연결할 때 권한 코드를 입력해야 합니다. 예를 들어, 권한 코드가 "123456"인 경우 서버에 전달된 매개변수는 다음과 같습니다.

이러한 방식으로 데이터베이스에 로그인하면 정보 기반에 대한 독점적인 액세스 권한을 얻게 됩니다. 다른 세션은 우리와 함께 할 수 없습니다.

세션이 차단되었음을 사용자에게 알리는 알림은 다음과 같습니다(관리자가 입력한 메시지에 따라 다름). 차단 기간 5분 전부터 1분 간격으로 나타납니다.

세션 차단 기간이 시작되면 알림이 먼저 나타납니다.

그 후 세션이 종료됩니다.

활성 세션 목록에서 활성 세션을 제거하여 비활성화할 수도 있습니다. 중단된 세션을 종료하려면 이 작업이 필요한 경우가 있습니다.

실제로는 사용자가 입력했지만 아직 저장하지 않은 데이터가 손실될 위험을 줄이려면 사용자 연결 끊김에 대해 미리 알리는 것이 좋습니다.

클라이언트 애플리케이션이 비정상적으로 종료되는 경우(연결이 끊어지거나 브라우저 창이 닫히는 경우) 1C: Enterprise 8 클라이언트 라이선스가 차단될 수 있습니다.

PC를 재부팅하면 잠긴 클라이언트 라이센스를 해제할 수 있습니다.

클라이언트 애플리케이션이 비정상적으로 종료되면 세션은 20분간 더 유지됩니다. 이후 8.3.5 이전 버전에서는 세션이 삭제되었습니다. 버전 8.3.5부터 세션은 기본적으로 Sleep 상태에서 Sleep 상태가 되며 다음 날까지 유지됩니다. 수면 세션은 1C: Enterprise 8 클라이언트 라이센스를 차지하지 않습니다.

버전 8.3.5에서는 특수 프로그램을 사용하거나 권장 수면 세션 매개변수를 설정하여 관리/정보베이스 설정 대화 상자의 1C 구성기에서 세션 절전 시간과 사용하지 않는 절전 세션 삭제 시간을 변경할 수 있습니다.

  • 패시브 세션의 경우 잠들기까지의 시간 - 300
  • 수면 세션 종료 시간 - 10

그런데 세션 탭의 서버 콘솔을 통해 누가 자고 있고 누가 활동 중인지 항상 확인할 수 있습니다. 해당 열 "잠자기"에는 예/아니요 기호가 있습니다.

일반적으로 (1C 회사 버전에 따라) "파일"- "종료" 명령을 사용하여 웹 클라이언트에서 작업을 완료할 수 있습니다. 버전 8.3.8부터 애플리케이션 헤더의 버튼 옆에 종료 명령이 추가되었습니다. 프로그램 소개. 현재 사용자의 이름과 함께 하이퍼링크로 표시되며, 하이퍼링크를 클릭하면 사용자 이름과 명령이 포함된 대화 상자가 열립니다. 일을 끝내려면.

플랫폼은 5초마다 클라이언트를 1C 서버로 ping합니다(4바이트 패킷이 표시됨). 서버는 "핑"을 기반으로 클라이언트 애플리케이션과의 연결 무결성을 모니터링합니다. 서버는 약 2분 동안 ping이 없으면 연결 실패로 해석합니다.

버전 8.3.9.1818에서 구현되었습니다.

버전 8.3.9에서는 다양한 플랫폼 메커니즘을 최적화하기 위해 상당한 수의 작업을 완료했습니다. 여기서 나는 그 중 하나에 대해 이야기하고 싶습니다. 이는 웹 서비스의 성능이 향상되는 것입니다.

세션 재사용

웹 서비스의 성능 부족은 웹 서비스를 호출할 때마다 세션을 생성하고 종료하는 데 상당한 오버헤드가 발생했기 때문에 발생했습니다. 게다가 생성하는 동안 SetSessionParameters() 핸들러가 실행될 때마다 이는 일반적인 구성에서 상당히 "무거울" 수 있습니다.

게다가 기능적인 단점도 있었습니다. 웹 서비스는 상태가 없습니다. 이로 인해 웹 서비스 호출 간에 상태 지속성을 사용하는 논리를 구현할 수 없었습니다.

버전 8.3.9에서는 웹 서비스 메커니즘(SOAP 서비스, HTTP 서비스, OData 서비스)이 개선되었습니다. 그 결과 생산성이 약 10배 증가했습니다.

표준 Enterprise Accounting 구성에 대한 테스트를 수행했습니다. Contractors 디렉토리에서 선택을 수행하는 HTTP 서비스를 추가했습니다. 테스트는 클라이언트가 서비스에 대해 100번의 연속 호출을 수행하는 것으로 구성되었습니다. 이전 작동 모드에서는 29.9초가 필요했습니다. 새로운 작동 모드에서는 평균 3초입니다.

이러한 결과는 세션 재사용을 보장하기 위해 두 가지 다른 전략을 구현했기 때문에 달성되었습니다.

  • 풀에서 세션을 자동으로 재사용합니다.
  • HTTP 헤더를 사용하여 세션을 관리합니다.

자동 세션 재사용을 사용하면 클라이언트는 세션 수와 수명을 제어할 수 없습니다. 단순히 기존 세션 풀에서 세션이 자동으로 할당됩니다. 이 전략은 일상적인 작업을 수행하고 통합된 권한을 갖는 클라이언트가 액세스하는 고부하 공용 서비스에 적합합니다.

예를 들어 원격 소매점의 거래 활동을 자동화하여 서버의 최대 부하 기간을 제공할 수 있습니다. 처리를 위해 필요한 세션 수가 할당됩니다. 로드가 떨어지면 완료됩니다.

또 다른 예는 http 서비스를 통해 문서 흐름 구성에서 파일을 수신/배치하는 것입니다. 이러한 작업에는 동일한 특수 사용자를 사용할 수 있습니다.

수동 세션 관리 전략은 클라이언트가 세션 수와 수명을 독립적으로 관리하는 것을 의미합니다. 이 전략은 단일 조직 내의 고도로 통합된 시스템에 가장 적합합니다. 세션 수명과 세션 수를 제어하는 ​​자체 알고리즘을 구현할 수 있습니다.

통제 수단

구성 개체 트리에서 하나 또는 다른 전략을 사용해야 하는지 결정할 수 있으며, 필요한 경우 default.vrd 게시 파일에서 이를 재정의할 수 있습니다. 구성 개체 트리에서 웹 서비스 및 HTTP 서비스 개체에 두 가지 새로운 속성을 추가했습니다.

  • 세션 재사용은 자동으로 사용, 사용 또는 사용 안 함 값을 가질 수 있습니다. 자동 사용 값을 사용하면 풀에서 세션을 자동으로 재사용할 수 있고, 사용 값을 사용하면 HTTP 헤더를 사용하여 세션 관리를 사용할 수 있습니다.
  • SessionLifeTime 속성에서 플랫폼이 세션을 자동으로 종료하기 전에 세션이 유휴 상태로 유지되는 시간(초)을 지정할 수 있습니다.

1C:Enterprise 8의 세션 개념과 연결 개념의 차이점

이 기사에서 무엇을 배울 수 있나요?

  • 1C를 통과할 때 가장 인기 있는 질문 중 하나에 대한 정답: 전문가
  • 연결 및 1C 세션의 목적 및 특징
  • 세션 데이터는 무엇을 저장하나요?

세션과 연결의 차이점은 무엇입니까? 1C:Expert 시험의 겉으로는 간단해 보이는 이 질문은 많은 사람들을 혼란스럽게 합니다. 상당한 프로그래밍 경험에도 불구하고 모든 전문가가 명확하고 정확한 답을 내릴 수 있는 것은 아닙니다.

이 기사에서는 이 문제에 대한 자세한 분석을 제공할 것입니다. 먼저 1C:Enterprise에서 세션과 연결의 개념을 별도로 살펴보겠습니다. 이 정보는 플랫폼 버전 8.2.x 및 8.3.x와 관련이 있습니다.

세션 1C

관리자 가이드를 참고해 보겠습니다. 세션의 개념을 다음과 같이 정의합니다.

세션은 정보베이스의 활성 사용자와 이 사용자의 제어 흐름을 정의합니다.

서버 클러스터는 사용자를 보지 않고 대신 세션과 세션 데이터를 본다고 말할 수 있습니다. 원칙적으로 클러스터 관리 콘솔에는 "사용자" 섹션이 없으며 클러스터는 세션을 사용자로 이해합니다.

이는 "세션" 항목의 시각적 표현을 확인합니다. 아이콘은 사용자 형태로 표시됩니다.

활성 사용자가 반드시 클라이언트 연결을 의미하는 것은 아니며 다음과 같은 경우도 가능하다는 점을 분명히 해야 합니다.

  • 1C:Enterprise 클라이언트 애플리케이션의 인스턴스
  • 웹 클라이언트가 실행되는 웹 애플리케이션 인스턴스
  • V83.COMConnector 개체에서 얻은 외부 연결 인스턴스
  • 백그라운드 작업 인스턴스 1개
  • 웹 서비스 호출 1회

세션 데이터

세션 데이터의 개념을 고려해 봅시다. 세션에는 다음과 같은 일부 정보가 포함되어 있습니다.

  • 정보 베이스의 이름
  • 세션 번호
  • 인증된 정보베이스 사용자의 이름
  • 인터페이스 언어
  • 세션 매개변수 값
  • 임시 저장
  • 세션 통계
  • 관리되는 신청서 정보
  • 일부 내부 플랫폼 데이터

이 정보를 세션 데이터라고 합니다. 또한 각 활성 사용자는 자신의 세션 데이터를 가지며 이는 작업 기간 동안에만 관련됩니다. 사용자가 데이터베이스를 떠나면(세션 종료) 해당 세션 데이터가 삭제됩니다.

세션 데이터는 서버 클러스터에 저장되며 클러스터 관리자가 이를 담당하며 이것이 바로 세션 데이터 서비스의 목적입니다. 작업 속도를 높이기 위해 세션 데이터는 작업자 프로세스와 씩(thick) 클라이언트에 캐시됩니다.

서버 클러스터가 다시 시작되면 세션 데이터가 보존됩니다. 활성 사용자가 20분 이내에 클러스터에 단일 호출을 하지 않고 세션이 연결에 할당되지 않은 경우 세션은 해당 데이터와 함께 삭제됩니다.

세션을 유지하기 위해 씬 클라이언트와 웹 클라이언트는 최소한 10분마다 한 번씩 클러스터에 액세스합니다.

연결 1C

이제 연결의 개념을 이해해 봅시다. 관리자 가이드를 다시 살펴보겠습니다.

연결은 1C:Enterprise 서버 클러스터에 대한 세션에 액세스하는 수단이며 제한된 연결 데이터 세트를 포함하며 활성 사용자로 식별되지 않습니다.

즉, 연결을 통해 세션이 클러스터에 액세스할 수 있습니다. 이 경우 연결 수는 제한되어 있으며 세션에 더 이상 필요하지 않은 즉시 연결 풀로 반환됩니다.

세션이 클러스터에 액세스하지 않는 경우, 즉 사용자가 유휴 상태인 경우 해당 사용자에게 연결이 할당되지 않습니다. 따라서 연결 없이도 세션이 존재할 수 있습니다.

세션 데이터는 서버에 저장되므로 연결이 20분 미만으로 끊어져도 연결은 단지 액세스 수단이므로 세션에 영향을 미치지 않습니다.

예를 들어 실수로 네트워크 케이블을 뽑은 경우 20분 이내에 케이블을 연결하면 사용자에게 오류 메시지가 표시되지 않습니다. 이 경우 세션에 새 연결이 할당되고 계속 실행됩니다. 사용자는 약간의 정지 현상을 제외하고는 문제를 인식하지 못할 수도 있습니다.

연결은 클러스터 프로세스 간 통신에도 사용됩니다. 즉, 작업자 프로세스(rphost)는 세션을 사용하는 대신 연결을 사용하여 클러스터 관리자(rmngr 프로세스)와 통신합니다.

연결과 세션의 차이점

이러한 개념의 주요 차이점을 설명하기 위해 비유를 제시하겠습니다.

세션이 승객이고 연결이 택시라고 가정해 보겠습니다. 승객이 집에 가야 할 때(세션이 서버에 연결되어야 함) 택시를 부릅니다(세션에는 연결 풀의 연결이 할당됨).

집에 도착한 승객이 다시 출근하고 싶지만 택시가 이미 떠난 경우(연결 후 연결이 끊어진 경우) 승객은 새 택시를 부르고 업무를 시작합니다(새 연결이 다음에 할당됨). 세션).

이 비유는 세션과 연결이 동일하지 않으며 연결이 끊어진 후에도 세션이 쉽게 살아남을 수 있음을 명확하게 보여줍니다.

부르미스트로프 안드레이