2011-07-06 3 views
0

궁극적으로 요청을 처리하기 전에 요청을 처리 할 webmethod에 대한 참조를 얻으려는 중입니다. 요청을 처리하기 전에 사용자 지정 속성을 검사합니다.PreRequestHandlerExecute 내에서 .asmx 파일의 클래스 이름을 확인하십시오.

현재 프로젝트 네임 스페이스에 요청 경로를 추가하고 .asmx 확장명을 제거하고 슬래시를 점으로 바꾸는 방법으로 작업하고 있습니다. 그러나 이것은 클래스 네임 스페이스 계층 구조가 요청 경로 계층 구조와 일치한다고 가정하므로 필요하지 않습니다.

파일을 열고 파싱하는 것보다는 짧습니다. asmx 파일에 대한 요청 경로가 있으면 클래스 유형 또는 클래스 유형 이름에 대한 참조를 검색 할 수 있습니까?

.NET에 익숙해 져서 내가하고있는 일이 바보 같을 수도 있습니다. 그것은 내 프로젝트 아니다, 그것은 ASP.NET 3.5 및 ASMX 웹 서비스

편집

를 사용하기에 잠겨 : 목표는 할 수있다 그러나 어느 쪽이든, 난 답 :

편집에 관심이있을 것 모든 웹 메소드에 인증 코드를 추가하지 않고 특정 웹 서비스가 인증되지 않은 사용자에 의해 실행되는 것을 방지합니다. 내 생각은 webmethods에 대한 사용자 지정 특성을 public으로 표시하는 것으로, 사용자 지정 HTTP 모듈이나 처리기가 인증되지 않은 사용자에 의해 실행되도록 허용하는 것입니다. 사용자 유형이 세션에 저장됩니다.

답변

1

우선 asmx가 레거시 기술로 간주되기 때문에 (WCF 웹 서비스로 전환하는 것이 좋습니다 (MSDN 참조). WCF에는 파이프 라인에 몇 가지 확장 점이있어서 목표를 달성해야합니다.

이제 해킹 솔루션 중 하나는 자신의 처리기 또는 처리기 팩토리를 asmx 파일에 넣은 다음 WebServiceParser.GetCompiledType 메서드를 사용하여 실제 asmx 서비스 유형을 얻고 속성을 검사 할 수 있다고 말했습니다. 그런 다음 WebServiceHandlerFactory.GetHandler을 사용하여 실제 처리기를 만들고 요청을 실행할 수 있습니다.

아마도 사용자 지정 특성으로 수행하고자하는 작업을 설명해야 누군가가 더 나은 솔루션을 제공 할 수 있습니다.

편집가 : 혹시 그때는 기본 인증을 사용하여 쉽게 가능하게 할 수 있습니다 전체 ASMX 또는 디렉토리를 확보 할 - 예를 들면 :

<location path="secure.asmx"> 
<system.web> 
    <authorization> 
    <allow users="*" /> 
    <deny users="?" /> 
    </authorization> 
</system.web> 
</location> 

이 인증 된 모든 사용자에 대한 액세스를 허용하고 익명 사용자를 거부합니다.

당신이 웹 메소드 레벨에서 세부적인 제어를 원한다면 내가 도우미 메서드의 전체 논리를 넣어 제안합니다 - EnforceSecurity (ASMX에 대한 기본 웹 서비스 호출에 정적 메소드 또는 인스턴스 메소드)를 말하고있는 도우미 메서드를 호출 관련 웹 방법. 당신이 원하는 것에서 다소 동등한 것 - 커스텀 속성으로 메소드를 꾸미는 것 대신에 메소드 호출을 삽입 할 것입니다.

+0

WebServiceParser.GetCompiledType을 주셔서 감사합니다.이 과정에서 하나의 불쾌한 단계를 밟았습니다. 슬프게도 나는 당신을 투표하기에는 너무 새로운 사용자입니다. 나는 원래의 질문을 달성하려는 것에 대한 더 많은 정보로 업데이트했다. 클래스와 컨텍스트가 주어진 웹 메서드 자체를 해결할 비슷한 비슷한 것을 알고 있습니까? 그 동안에는 Request.PathInfo xor 또는 op GET 매개 변수 –

+0

을 사용하여 해결할 것입니다. @ 답변에서 편집을 참조하십시오. 보안 및 비보안 방법을 다른 asmx로 분리 할 수 ​​있다면 보안 적용이 훨씬 간단해질 수 있다고 생각합니다. – VinayC

+0

이 접근법의 유일한 장점은 EnforceSecurity 메서드를 호출 할 필요없이 사용자 수준의 액세스가 필요한 기본 동작을 가질 수 있으므로 사용자가 제안한대로 할 수 있다는 것입니다. 원래 속성으로 시작했는데 데코레이터 코드가 데코 레이팅 된 메서드 앞이나 뒤에 실행될 수 있도록 파이썬 데코레이터와 같다고 잘못 생각했습니다. IIS 서버가 웹 팜 모드에서 구성되지 않을 수 있으며로드 밸런서가 동일한 사용자의 동일한 요청을 동일한 IIS 서버로 보낼 필요가 없기 때문에 inbuilt 인증 프레임 워크를 사용하지 않습니다. –

관련 문제