2011-11-17 5 views
2

저는 공통 기능 비트가있는 프로젝트에서 작업했습니다. 특히 마스터 파일과 관련 이미지/js/등을 공유하려고했습니다. 이를 위해 마스터 페이지와 종속 파일은 모두 모든 "하위 프로젝트"에서 사용되는 "전역"DLL로 래핑됩니다. 이 모든 것이 개발 과정에서 훌륭하게 수행되었지만 많은 사람들이 경비원을 잡아 당기는 것 같아서 배포가 갑작스럽게 나타났습니다. VirtualPathProvider은 사전 컴파일 될 때 작동하지 않습니다.VirtualPathProvider는 IIS 7.5의 프로덕션에서 작동하지 않습니다.

덕분에 this blog post containing a workaround 덕분에 다시 시도해 볼 수있었습니다. 유감스럽게도 아직 그렇지 않습니다.

나는 나의 Global.asax 구현을 제거하기로 선택하고 블로그 게시물의 AppInitialize 접근했다 :

public static class AppStart 
{ 
    public static void AppInitialize() 
    { 
     HostingEnvironment hostingEnvironmentInstance = (HostingEnvironment)typeof(HostingEnvironment).InvokeMember("_theHostingEnvironment", BindingFlags.NonPublic | BindingFlags.Static | BindingFlags.GetField, null, null, null); 
     MethodInfo mi = typeof(HostingEnvironment).GetMethod("RegisterVirtualPathProviderInternal", BindingFlags.NonPublic | BindingFlags.Static); 
     mi.Invoke(hostingEnvironmentInstance, new object[] { new MasterPageProvider() }); 
    } 
} 

실제 공급자가 디버그에서 작동하기 때문에, 내가 포함되지 않습니다. 그것을보고 싶다면 주저하지 말고 물어보십시오. 질문을 최대한 짧게하고 싶었습니다.

이 모든 상황에서 흥미로운 점은 제작을 통해 마스터 페이지를 찾을 수 없다는 오류가 발생하지 않는다는 것입니다. 나에게 이것은 공급자 이라는 것을 의미하지만, 어떤 이유로 든 나머지 리소스 (js/css/etc)는 어셈블리에서 제대로 검색되지 않습니다.

그럼 내 질문에이 문제가 발생합니다.이 솔루션은 개발시 큰 효과가 있지만 IIS 7.5에서는 작동하지 않는 이유는 무엇입니까?


UPDATE는

2011년 11월 20일 데이비드 에보의 제안을 시도하고 불행하게도 아무 결과도 없었다. (필자는 세 번째 줄에서 주석,

<configuration> 
    <connectionStrings> 
     <clear /> 
     <!-- ... --> 
    </connectionStrings> 
    <system.web> 
     <pages> 
      <controls> 
       <!-- ... --> 
      </controls> 
     </pages> 
     <compilation debug="true" targetFramework="4.0" /> 
     <webServices> 
      <protocols> 
       <add name="HttpGet"/> 
       <add name="HttpPost"/> 
      </protocols> 
     </webServices> 
    </system.web> 
    <system.webServer> 
     <modules runAllManagedModulesForAllRequests="true" /> 
    </system.webServer> 
</configuration> 

UPDATE 2011년 11월 21일

그냥 VirtualPathProvider 실제로 일하는 나의 의심을 확인 : 내 웹 설정은 이제 다음과 같이 보입니다 mi.Invoke(....) 사이트를 재배포하십시오. 의심 스럽지만 이제는 MasterPage 파일을 찾을 수 없기 때문에 중단됩니다. 이 문제는 VPP를 통해 전달되는 정적 파일과 관련이있는 것으로 보입니다.

답변

3

IIS 7.5는 정적 파일 자체를 처리합니다. web.config 파일에서 무시할 정적 파일마다 VPP를 통해 라우트되도록 각 줄을 지정해야합니다. 예제는 아래를 참조하십시오.

<system.webServer> 
    <handlers> 
     <add name="Images" path="*.png" verb="GET,HEAD,POST" type="System.Web.StaticFileHandler" modules="ManagedPipelineHandler" resourceType="Unspecified" /> 
     <add name="Stylesheets" path="*.css" verb="GET,HEAD,POST" type="System.Web.StaticFileHandler" modules="ManagedPipelineHandler" resourceType="Unspecified" /> 
    </handlers> 
</system.webServer> 
+0

일을 마치면 그 사진을 줄 것입니다. 이것은 내 최근 결과 (모든 것이 맞습니다)로 인해 대답 인 것 같습니다. 협조 해 주셔서 감사합니다. –

+0

도움을 주셔서 대단히 감사합니다. 이것은 지금 2 주 동안 나를 괴롭 히고있다! 이전에 한 번 보았지만 IIS가 정적 파일 자체를 제공한다고 생각하지 않았습니다. 225 명의 담당자를 즐기십시오! –

+0

답변을 조금이라도 확장하고자한다면 확장 기능 당 하나의 처리기가 필요하다고 언급해야합니다. 또한, 나는 POST 동사가 필요하다고 생각하지 않는다. (반드시 나쁜 것은 아니지만 ...). –

2

아마도 정적 파일에 대한 요청은 IIS에서 기본적으로 ASP.NET을 통과하지 않는 것이 문제 일 수 있습니다.

web.config의 runAllManagedModulesForAllRequests가 켜져 있는지 확인해보십시오. 예 :

<modules runAllManagedModulesForAllRequests="true" /> 
+0

불행히도이 주사위는 없습니다.나는 그것을 시도하고 그 시도에 대한 세부 사항으로 나의 질문을 업데이트했다. 생각해 줘서 고마워. –

2

post을 살펴보십시오. IIS 7에서 가상 경로 공급자를 통해 정적 파일을 가져 오는 방법에 대해 설명합니다.이 방법으로 문제가 해결 될 것입니다.

+0

링크가 손상된 것으로 보입니다 ... –

+0

@Ryan, thx. 링크가 수정되었습니다. 희망이 도움이됩니다! – santiagoIT

관련 문제