델파이 ISAPI DLL (32 비트)을 Delphi XE SPI를 사용하여 만들고 WinServer 2008 RS2 및 IIS 7.5를 실행하는 서버에서 호스팅합니다.IIS ISAPI의 GetExtensionVersion에서 내 웹 사이트 URL을 어떻게 가져올 수 있습니까?
참조 MSDN :
Initialization Using GetExtensionVersion:
초기화는 엔트리 - 포인트 기능 GetExtensionVersion에 의해 처리됩니다. 이 함수의 역할은 작업자 스레드, 동기화 개체 및 데이터베이스 연결의 생성을 포함하여 모두 초기화를 수행하고 DLL을 작성하는 데 사용 된 ISAPI 버전을 으로 설정하는 것입니다.
내 ISAPI DLL에서 GetExtensionVersion
을 사용하여 위의 MSDN 참조에 따라 초기화를 수행하고 있습니다. GetExtensionVersion
은 첫 번째 요청이 ISAPI DLL에 매핑 될 때 IIS에 의해 한 번만 호출되기 때문에 클라이언트 요청별로 초기화되지 않고 웹 응용 프로그램의 수명 동안 유지해야하는 리소스 초기화에 적합합니다. 자세한 내용은 How can I make ADO database connections in TISAPIApplication
before processing incoming requests?을 참조하십시오.
내 초기화 함수 중 하나는 해당 DLL이 호스팅되는 웹 사이트의 URL을 사용하지만 응용 프로그램 처리를 시작하기 전에 실행되는 GetExtensionVersion
의 컨텍스트 내에서 웹 사이트의 URL을 노출하는 Delphi 함수 나 속성을 찾을 수없는 것 같습니다. 실제 클라이언트 요청 - 이는 HttpExtensionProc
(을 사용하여 델파이의 TWebApplication
후크)에서 발생합니다.
내 ISAPI DLL은 웹 사이트에서 호스팅되고 클라이언트 요청이 해당 웹 사이트에 게시 될 때 GetExtensionVersion
은 IIS에 의해서만 호출되므로 IIS API 호출을 통해 어딘가에서 웹 사이트 URL을 사용할 수 있어야한다고 생각합니다.
GetExtensionVersion
에서 내 웹 사이트의 URL을 어떻게 가져올 수 있습니까?
_ GetExtensionVersion_을 호출 할 때 IIS가 아직 어떤 웹 사이트에도 DLL을 매핑하지 않은 것일 수 있습니다. URL에 대한 클라이언트 요청이있을 때까지 호출되지 않습니다. _ 또한 IIS가 여러 웹 사이트에 대해 동일한 DLL을 사용 중일 수 있습니다 _ - IIS, AFAIK를 구성하는 방법에 따라 다르며 그렇게하지 않습니다. – Vector
웹 사이트 URL을 포함하는 텍스트 파일을 DLL과 함께 디렉토리에 넣고 GetExtensionVersion에서 GetModuleFileName을 사용하고 텍스트 파일 이름을 얻기 위해 이름을 조금 다듬어 필요한 URL을 읽었습니다.약간의 원형 교차로하지만 고통스럽지 않고 방탄하는 것처럼 보입니다. IIS Admin API는 현재 ** 엉망으로 만들고 싶지 않은 ** 것입니다. – Vector