2012-03-23 2 views
2

WebBroker를 사용하는 Delphi 6의 ISAPI 응용 프로그램이 있습니다. 각 작업의 끝과 끝에서 로깅 정보를 추가해야합니다.WebBroker 응용 프로그램에 로깅 필터를 추가하는 방법은 무엇입니까?

OnBeforeDispatch 및 OnAfterDispatch를 시도했지만 일부 동작이 브라우저에 직접 응답을 보내고 OnAfterDispatch 이벤트가 실행되지 않습니다.

각 동작에 코드를 추가하지 않고도 필터 등을 추가 할 수 있습니까?

답변

0

당신이 할 수있는 한 가지 방법은 단 하나의 행동을하는 것입니다. 경로를 "/"로 설정하고 조치를 기본 핸들러로 설정하십시오. 그런 다음 :

  1. 로그는 URL에서 활동
  2. 의 시작은
  3. 난 항상 모든이 작업 핸들러 엔진을 동작

의 끝을 로그 지정된 적절한 내부 핸들러 호출 조치가 등록되었습니다. 그러면 코드는 다음과 같습니다.

procedure TwmWebModule.wmWebModuleActionHandlerAction(Sender: TObject; 
                 Request: TWebRequest; 
                 Response: TWebResponse; 
                 var Handled: Boolean); 
var 
    HandlerID: string; 
begin 
    HandlerID := StringReplace(string(Request.InternalPathInfo), '/', '', []); 
    FHandlerEngine.ExecuteHandler(HandlerID, Request, Response); 
end; 

이제 로깅을 추가하십시오. 다른 장점이 있습니다. 모든 처리기는 자체 단위로 구현되며 MVC 접근 방식을 구현합니다. 코드는 훨씬 깨끗하고 유지 관리가 쉽습니다.

골격은 다음과 같습니다

TCustomHandler = class 
    private 
    FHandlerID: string; 
    FHandlerSettings: ISimpleStorage; 
    protected 
    procedure Execute(const Request: TWebRequest; const Response: TWebResponse); virtual; abstract; 
    public 
    constructor Create(const ID: string); 
    property HandlerID: string read FHandlerID; 
    property HandlerSettings: ISimpleStorage read FHandlerSettings; 
    end; 

    THandlerEngine = class 
    private 
    FHandlersList: TObjectList; 
    FRegisteredHandlers: THashTable; 
    protected 
    public 
    constructor Create; 
    destructor Destroy; override; 
    procedure RegisterHandlers; 
    procedure AddSingleHandler(const ID: string; const Handler: TCustomHandler); 
    procedure ExecuteHandler(const ID: string; const Request: TWebRequest; const Response: TWebResponse); 
    end; 

당신은이 모든에서 원리를 이해 할 수 있어야한다.

+0

이것은 흥미로운 접근 방법입니다. 처음에는 TCustomWebDispatcher를 서브 클래 싱하려고 시도했지만 대부분의 메소드가 정적이어서 상속을 통해 확장되도록 설계되지 않았습니다. 결과를 얻는 유일한 방법은 클래스를 복제하기 위해 많은 복사/붙여 넣기를 수행하는 것이 었습니다. 솔루션 솔루션이 더 나은 선택입니다. 감사! – danhakin

+0

문제 없습니다. 그것은 나를 위해 위대한 작품. – Runner

관련 문제