2012-04-03 4 views
2

*) IIS 7.5 - Server 2008 R2에서 실행되는 Delphi XE ISAPI dll이 있습니다. DLL이 TISAPIApplication 인스턴스를 시작합니다. 응용 프로그램은 신중하고 고정 된 미리 결정된 URL에 있으며 요청에 대해 특정 포트 (포트 80 아님)에서 수신합니다. 물론이 모든 것은 '표준 구성'입니다.Delphi TISAPIApplication에서 포트/URL 데이터 가져 오기 :

*) 내 서버에는 여러 개의 dll이 있는데, 각각 다른 TISAPIApplication 인스턴스를 시작하고 다른 URL에 매핑되어 다른 포트에서 수신 대기합니다. 런타임에 포트 번호를 기반으로 응용 프로그램의 다양한 인스턴스 (Dev, Prod, FailOver 등)를 구별합니다 (URL 구문 분석보다 쉽습니다).

*) TISAPIApplication 및 해당 조상 및 관련 클래스 인 의 문서 및 소스 코드를 살펴 보았지만 응용 프로그램의 특정 인스턴스가 수신하는 포트를 알려주는 속성을 어디에도 찾을 수 없습니다. 포트는 요청 별로만 사용할 수있는 것으로 보입니다. 간단한 배포에서는 청취 포트가 일반적으로 정적이기 때문에 응용 프로그램 시작시 해당 포트 값을 가져올 수 있어야합니다. 요청이 들어 오기를 기다리는 대신 특정 리소스를 할당하는 것을 용이하게합니다.

*) 누구든지이 작업을 수행 할 수 있습니다. 어떤 물건을 어디에서 가져 가야합니까? 사실, 응용 프로그램 자체가 상주하는 URL에 대해 나에게 아무것도 알려주지 않는 것이 무엇이든 찾을 수 없습니다. 모든 것이 요청별로 작동하는 것 같습니다.

( 는하십시오 - 나는 그 해결 방법을 알고 싶지 않아 - 내가 요청을 통해 그것을 할, 또는 HTTP가 상태이고 모든 요청별로 작동하는 방법을 말해 해결 방법을 찾는 게 아니에요 그리고 'stateless'방식으로 요청을 처리하기 위해 스레드가 ISAPI에 의해 생성되지만 ISAPI dll이 IIS에 의해로드되고이 TISAPIApplication 인스턴스가 ISAPI 응용 프로그램의 수명을 초과하지 않고 상태를 유지할 때 TISAPIApplication 인스턴스가 시작됩니다 응용 프로그램 인스턴스의 수명 동안 유효한 정보 ).

TIA

답변

0

아마도 전적으로 유효하지 않은 무언가를하려고합니다. 단순한 앱에는 일반적으로 변경되지 않는 지정된 포트에 앉아있는 청취자가 있지만, 그럴 필요는 없습니다. - 청취 포트를 확실하게 결정할 수있는 유일한 방법은 TISAPIApplication이 청취 포트에 대한 정보를 유지하지 않아야한다는 것입니다.이 포트는 본질적으로 휘발성입니다.

1

ISAPI 기능 GetServerVariable은 (http://www.podgoretsky.com/ftp/Docs/Internet/Late%20Night%20ActiveX/ch7.htm#CHttpServerContextObject - 표 7.7 HTTP 환경 변수)가 SERVER_PORT 변수를 반환 할 수 있습니다. 이 함수는 DLL이 초기화 될 때 호출 될 수 있습니다.


당신은

응용 프로그램은 신중, 고정, 소정의 URL에있는

및 요청

에 대한 특정 포트 (80 포트되지 않음)에 수신 대기 썼던 것처럼

런타임에 응용 프로그램의 다양한 인스턴스를 구별합니다.(데브, 생산성, 장애 조치 등) 포트 번호

내가 첫 번째 요청하는 대신 모든 요청을 수행하는 자원이 소요되는 초기화 작업과 같은 응용 프로그램을 명중하기 전에 당신이 뭔가를 할 필요가 있다고 가정

에 따라 . 이 경우 응용 프로그램 수명주기의 초기 단계에서 사용할 수있는 기능이 이점이됩니다. 그러나 ISAPI 응용 프로그램 수명주기에 대한 연구를 수행하여 이것이 일반적으로 수행되는 방식을 확인했습니다.

+0

"DLL이 초기화 될 때이 함수가 호출 될 수 있습니다."- 예, MAYBE - 보이지만 보았을 때 요청과 관련된 데이터가 필요합니다. 솔직히, 그 함수를 호출하는 데 필요한 모든 것을 연결하는 것만으로는 문제가되지 않는다. :-) 감사. – Vector

+0

전 완전히 유효하지 않은 무언가를하려고하기 때문에이 질문을 닫을 것 같습니다 : 단순한 앱은 일반적으로 변경되지 않는 지정된 포트에 앉아있는 청취자를 가지고 있지만, 그 방법이어야합니다. 청취 포트를 확실하게 결정하는 유일한 방법은 이전이 아닌 요청 자체에서 오는 것입니다. – Vector

+0

"...이 경우 응용 프로그램 수명주기의 초기 단계에서 사용할 수있는 기능이 장점입니다." - 그래, 그게 무슨 일이야. 내가 구현 한 해결 방법은 오래된 표준입니다. 첫 번째 요청은 적절한 초기화를 수행하고 완료된 플래그를 설정합니다. 통화하기 전에 플래그가 검사되므로 후속 요청은 초기화 코드를 건너 뜁니다. – Vector