2015-02-05 3 views
2

델파이 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을 어떻게 가져올 수 있습니까?

답변

1

URL을 얻으려면 확장 제어 블록이 필요합니다. HttpExtensionProc으로 전달되지만 GetExtensionVersion으로 전달되지는 않습니다. GetExtensionVersion을 호출 할 때 IIS가 아직 어떤 웹 사이트에도 DLL을 매핑하지 않은 것일 수 있습니다. 또한 IIS는 여러 웹 사이트에 대해 동일한 DLL을 사용할 수 있으며 여전히 GetExtensionVersion을 호출합니다.

질문에 고유합니다. 두 가지 옵션이 있습니다. IIS Admin API (perhaps with this)를 사용하여 DLL이 사용 된 웹 사이트를 찾을 수 있지만, IIS Admin이 필요한 유일한 방법 일 수 있습니다. API를 사용하고 보안 위주의 응용 프로그램을 실행하지 않으려는 너무 많은 액세스 권한이 필요합니다.

또 다른 옵션 (내가 직접 xxm에 사용)은 DLL에서 사용할 수있는 HInstance 글로벌에 GetModuleFileName을 호출하고 DLL이있는 디렉토리의 구성 파일을 읽는 것입니다. (자동으로 DLL 자체가있는 디렉토리라고 가정합니다. IIS를 통한 URL로 액세스 할 수 없음 ...)

+0

_ GetExtensionVersion_을 호출 할 때 IIS가 아직 어떤 웹 사이트에도 DLL을 매핑하지 않은 것일 수 있습니다. URL에 대한 클라이언트 요청이있을 때까지 호출되지 않습니다. _ 또한 IIS가 여러 웹 사이트에 대해 동일한 DLL을 사용 중일 수 있습니다 _ - IIS, AFAIK를 구성하는 방법에 따라 다르며 그렇게하지 않습니다. – Vector

+0

웹 사이트 URL을 포함하는 텍스트 파일을 DLL과 함께 디렉토리에 넣고 GetExtensionVersion에서 GetModuleFileName을 사용하고 텍스트 파일 이름을 얻기 위해 이름을 조금 다듬어 필요한 URL을 읽었습니다.약간의 원형 교차로하지만 고통스럽지 않고 방탄하는 것처럼 보입니다. IIS Admin API는 현재 ** 엉망으로 만들고 싶지 않은 ** 것입니다. – Vector