답변

13

이 실제로 가능하지만,이 Global.asax 파일을 포함하지 않습니다.

많은 Microsoft의 사례는 Global.asax를 통해 코드를 전달하는 방법을 보여 주지만 SharePoint와 관련하여 모범 사례가 아닙니다. 이상적으로 코드는 Feature로 패키징되어 WSP를 통해 배포되어야합니다 (이미 알고있는 것처럼).

핵심은 문제의 코드를 HttpModule (즉, IHttpModule 인터페이스를 구현하는 형식)으로 구현하고이를 SharePoint 응용 프로그램 서비스를 제공하는 ASP.NET 파이프 라인에 연결하는 데 있습니다. 대략적으로 말해서 다음 단계가 있습니다.

  1. IHttpModule 인터페이스를 구현하는 클래스를 만듭니다.
  2. HttpModule에서 Init 메서드를 구현합니다. 이것은 HttpApplication (이 경우 SPHttpApplication)이 설정 될 때 호출되며 처리, 다른 파이프 라인 이벤트에 대한 이벤트 위임을 수행 할 수있는 기회를 제공합니다.
  3. 추가 할 SPFeatureReceiver를 만들고 활성화 및 비활성화시 target web.config 파일에서 HttpModule을 제거하십시오. 이 작업은 SPWebConfigModification 유형을 사용하여 대상 web.config 파일의 <httpModules> 노드를 업데이트합니다.
  4. 모두를 기능으로 패키지하고 WSP를 통해 배포합니다.

HttpModule 개발에 대한 자세한 내용은 http://msdn.microsoft.com/en-us/library/ms227673.aspx을 참조하십시오. SPWebConfigModification 유형에 대한 자세한 내용은 http://msdn.microsoft.com/en-us/library/microsoft.sharepoint.administration.spwebconfigmodification.aspx을 참조하십시오.

결과 : 응용 프로그램 시작을 처리 할 수 ​​있고 기능을 통해 배포 할 수있는 클래스입니다. 수동 파일 해킹이 필요하지 않습니다.

필자는 가장 최근에 SPHttpApplication이 시작될 때 콜백에 등록해야하는 사용자 지정 캐싱 공급자 (IVaryByCustomHandler)를 사용하여 여러 시나리오에서이를 성공적으로 사용했습니다.

질문이 조금 나이가 들지만, 이것이 도움이되기를 바랍니다.

3

내 직감은 가능하지 않다는 것입니다. Application_Start는 asp.net 엔진이 시작될 때 런타임에 의해 호출되므로 Global.asax를 수정하는 외부에서 처리기를 연결할 수있는 가능성이 거의 없습니다. 응용 프로그램을 중지/언로드하는 동안 생존해야하므로 훅은 선언적이어야하며 지속적이어야합니다. 따라서 global.asax에 작성해야한다면, 수정을 수행하기 위해 Feature EventReceiver를 작성할 수 있다고 생각합니다.

그렇다면 왜 그런지 자세히 설명해 주실 수 있습니까? 아마도 다른 각도의 공격이있을 수 있습니다. 비행 중에 global.asax를 수정하는 아이디어는 나를 아프게합니다. 그것은 좋을 수 없다.

Oisin