2009-09-23 2 views
1

내가 IIS에서 호스팅되는 다음과 같은 파일 레이아웃과 SOAP 서비스를 만들 수 WCF를 사용하고 다음 /web.config에서WCF에서 상속 된 web.config 파일과 HttpContext 버그?

/ 
/web.config 
/service 
/service/test.svc 
/service/web.config 

을, 나는 몇 가지 일반 설정 (system.codedom, 등)에이 /service/web.config 몇 가지 설정이 정의 된 appSettings 섹션이 있습니다. 이 이상한 얻는 곳

public class CustomUserNameValidator : UserNamePasswordValidator 
{ 
    public override void Validate(string userName, string password) 
    { 
     string expectedUsername = WebConfigurationManager.AppSettings["Username"]; 
     string expectedPassword = WebConfigurationManager.AppSettings["Password"]; 

     ... snip ... 
    } 
} 

이는 다음과 같습니다 :

<?xml version="1.0"?> 
<configuration> 
    <appSettings> 
    <add key="Username" value="user" /> 
    <add key="Password" value="password" /> 
    </appSettings> 

나는 다음 사용자 암호 검증이이 서비스에

  • 첫 번째 히트에서 expectedUserName 및 expectedPassword가 null 인을
  • 두 번째 및 후속 히트에서는이 두 변수에 /service/web.config 파일의 값이 포함됩니다.
  • 두 번째 또는 후속 히트에 도착하고 실제로 웹 서버의 간단한 다시 시작 예상대로 작동하거나 중단됩니다 컴파일하는 경우
  • 다음 무엇을 실제로하고있는 것은로드입니다,

사실 명중 appSettings 섹션을 첫 번째 히트의 /web.config에서 삭제 한 다음 WCF가 WSDL/XSD 등의 생성을 캐싱 한 후에 /service/web.config를 사용합니다.

이것은 버그처럼 보이고 appSettings를 /web.config 파일에 배치하는 것 이외의 해결 방법을 찾지 못하는 것 같습니다.

test.svc가 컴파일되지 않았거나 (또는 ​​캐싱이 무엇이든간에) 아직 첫 번째 히트에서/service 디렉토리를 실행의 루트로 간주하지 않는 WCF일까요? 그런 다음 첫 번째 히트를 수행 한 후 web.config 상속에서 해당 디렉토리를 고려합니까?

업데이트 : 아래의 설명에 따라 HttpContext.Current도 첫 번째 히트에서만 null이지만 그 이후의 모든 히트는 null이 아닙니다 (서비스의 적절한 web.config 및 특성과 함께) ASP.NET 호환 모드 허용). 제대로로드되지 않는 web.config는 더 큰 문제의 증상 일뿐입니다.

+0

이것은 또한 ConfigurationManager가 함께 발생, .NET 4.0 베타 2에서 수정되었습니다된다. – wojo

+0

이상하게 변하고 있습니다. 내가 HttpContext.Current (일부 설정 파일 경로에 대한 개인 필드를보고 디버깅했다), 그리고 그것은 항상 첫 번째 히트에 null이야. 그 후, HttpContext.Current를 사용할 수 있습니다. 이 사용되어 과 서비스에 대한 속성이 BTW는 HttpContext를 얻을 수 있습니다. – wojo

+0

뿐만 아니라 MS 연결 버그를 참조하십시오 https://connect.microsoft.com/wcf/feedback/ViewFeedback.aspx?FeedbackID=491844 – wojo

답변

0

WebConfigurationManager에 데이터를로드하는 방법 및시기와 관련이있을 수 있습니다.

업데이트 :

권한과 관련이있을 수 있습니다. 첫 번째 히트는 익명으로, 두 번째로 인증 된 것으로 나타납니다. 따라서 두 번째로 데이터를 읽을 수 있습니다.

당신은 확인해야합니다

  • IIS 보안
  • 보안 설정을 Web.config의에
  • 응용 프로그램 풀의
  • 정체성
  • web.config 파일에 대한
  • ACL

업데이트 2 :

어둠에 맞 춥니 다. : HttpContext를 너무 일찍 읽지 않고 사용할 수 있습니까?init에서 코드를 호출합니까? 어쩌면 페이지로드로 이동 하시겠습니까?

+0

글쎄, 난 특정 아무것도 (수동으로 로딩을)하고 있지 않다. ASP.NET/WCF 파이프 라인이 내 web.config 파일을 자동으로로드하고 AppSettings 속성을 활용하여 정상적으로 내 appSettings를 가져 오도록 할 것입니다. 수동으로 웹 구성을로드하려고 시도했지만 첫 번째 히트에서는 동일하게 실패합니다. – wojo

+0

그냥 web.config 경우 좋은 생각. 내 보안 설정을 확인했는데 모든 것이 정상적으로 보였습니다. 그러나 실제로 나를 잡아내는 것은 HttpContext.Current 속성이 첫 번째 히트에서도 null이라는 것입니다. ACL/인증 상태 등과 아무런 관련이 없어야합니다. 맞습니까? – wojo

+0

인증 후에도 내 서비스에서 사용할 수 있습니다 (하지만 나에게 너무 늦었습니다). 나는 validator를 우회하여 이것을 테스트했으며 실제로 유효하다. 하지만 이것은 유효성 검사기의 첫 번째 히트에서 사용할 수 있어야한다는 점에서 버그처럼 보입니다. 결국 모든 후속 공격에서 사용할 수 있습니다! – wojo