2

최근 Visual Studio를 2013로 업그레이드했습니다. 이제 Cashini 대신 기본적으로 IIS Express 만 사용하며 WCF 서비스 자바 스크립트 끝점 인 Myservice.svc/js 또는/jsdebug,하지만 .svc 직접 타격을 잘 작동합니다.WCF + MVC + WebAPI 처리기 및 라우팅

(일부 ExtensionlessUrlHandler 항목을 포함하는) web.config의 핸들러 > 섹션을 제거하면 스크립트 끝점의 기능이 복원된다는 것을 발견했습니다. 나는 다음과 같은 항목을 제거하는 반향이 어떤 대안을 가지고 있는지 궁금하다. 여기

내가 내의 Web.config에서 제거 된 블록 :

<handlers> 
    <remove name="ExtensionlessUrlHandler-Integrated-4.0" /> 
    <remove name="OPTIONSVerbHandler" /> 
    <remove name="TRACEVerbHandler" /> 
    <add name="ExtensionlessUrlHandler-Integrated-4.0" path="*." verb="*" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0" /> 
</handlers> 

일부 컨텍스트, 나는 모든 하나 개의 프로젝트에 .NET 4.5, MVC 5.1, WebAPI 2.1 및 WCF를 사용하고 있습니다. 기본적으로 모든 구성 요소의 최신 버전.

업데이트 1 : 또한 이러한 핸들러가 제거 된 상태에서 WebAPI PUT이 404로 복귀한다는 사실을 알고 있습니다. 그래서 무언가가 분명히 빠져 있습니다. 다른 작은 부두는 라이브 서버 (IIS 7.5 [버전 7.5.7600.16385])에 배포 할 때 모든 것이 훌륭하게 작동합니다. 따라서 Visual Studio 2013 통합 버전의 IIS Express와 전체 ​​IIS 7.5 설치의 라우팅 또는 처리기 매핑에는 차이가 있어야합니다.

또한 새 ASP.NET 웹 응용 프로그램을 만들고 WCF 서비스를 추가하면 모든 것이 로컬에서 올바르게 작동합니다. 그런 다음 WebAPI 컨트롤러를 추가하면 아래의 처리기 섹션이 web.config에 추가되고 모든 WCF 호출이 중단됩니다. MVC, WCF 및 WebAPI가 모두 하나의 응용 프로그램에 포함되어있는 경우 Microsoft의 기본 구성에서 "버그"처럼 들립니다.

업데이트 2 : 다음은 내가 겪고있는 오류를 재현 할 수있는 기본적인 테스트 사례입니다.

프로세스 기본 문제를 재현하기 : (404 WebAPI 가공, WCF * SVC는/JS 결과)

가 이
  1. 새 프로젝트 -> Asp.NET 웹 응용 프로그램 (웹 API 템플릿을 사용하여 MVC를 포함 웹 API 참조)
  2. 추가 새() 도움말 페이지를 렌더링
  3. 시작 프로젝트.
  4. 그/도움말 경로가 MVC 작동 확인 "TestService"WCF 서비스 (root라는 이름을 투사) 아약스는 지원 "
  5. 0 *
  6. 이 TestService 확인 -
  7. 이 API는/WebApi (반환 값)에 대한/1 작품
  8. * 그건 PUT/API/WebApi에 대한/1 작품 값 확인 값/즉 GET 확인 (무효 방법 아무 것도 반환하지 않습니다). svc가 WCF (메타 데이터 페이지 표시)에 도달 할 수 있음
  9. * TestService.svc/js가 WCF 용 라우팅 문제 인 경우 404 오류로 확인하십시오!*

부분 수정 : (WebAPI의 PUT 깨진, WCF가 렌더링 할 수있는 JS 요청)

  1. ... 위에서
  2. 업데이트의 Web.config를 계속 < 핸들러 >을 주석 섹션
  3. 프로젝트를 시작하십시오. MVC는 (도움말 페이지를 렌더링)에 대한
  4. 는/1이 실패
  5. *이 있는지 확인이 PUT/API를/값 API는/WebApi (반환 값)에 대한/1 작품 값/
  6. 은 그 GET 있는지 확인/도움말 경로가 작동하는지 확인 WebApi 용 404 - 라우팅 문제! *
  7. TestService.svc은 WCF에 대한 타격을받을 수 있는지 확인 (보여준다 메타 데이터 페이지)
  8. 이 실제로 MVC 라우팅
+0

IIS Express는 실제로 IIS 동작을 올바르게 재생하지 못하고 대안에 비해 많은 이점을 제공하지 않습니다. ASP.NET 개발 서버를 사용하면 어떻게됩니까? – CodeCaster

+0

저는 Visual Studio가 기본적으로 설치/실행되는 IIS Express의 별도 설치를 사용하지 않습니다. – bmherold

+0

알지만 프로젝트 속성에서 변경할 수 있습니다. – CodeCaster

답변

3

입니다 * * TestService.svc은 WCF에 필요한 자바 스크립트 JS 렌더링/있는지 확인 발행물. ~/App_Start/RouteConfig.cs를 다음과 같이 수정하십시오. extensionless url에서 mvc 라우팅이 정상적으로 작동하려면 ExtensionlessUrlHandler를 유지해야합니다.

public class RouteConfig 
{ 
    public static void RegisterRoutes(RouteCollection routes) 
    { 
     routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); 

     //This line is the addition. 
     routes.IgnoreRoute("{resource}.svc/{*pathInfo}"); 

     routes.MapRoute(
      name: "Default", 
      url: "{controller}/{action}/{id}", 
      defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional } 
     ); 
    } 
} 
+0

흠, 사실 RouteConfig가 시작될 때 실제로 그 행을 가지고 있으며, my * .svc/js가 여전히 404ing 인 위치의 핸들러가 있습니다. 또한 처리기를 제거한 상태에서 WebAPI PUT이 404로 돌아 오는 것을 알 수 있습니다. 그래서 뭔가 빠졌다고 당신이 맞다고 생각합니다. – bmherold

+1

웹 API 사용 예를 게시 할 수 있습니까? 속성 라우팅을 사용하고 있습니까? 나는 네 상황을 재현하려고 노력하고있어. 질문에 대한 첫 번째 편집을 기반으로 간단한 get 메소드로 웹 API 컨트롤러를 추가했으며 모든 것이 여전히 작동합니다. –

+0

감사합니다. Kenneth - "빈 프로젝트에서 빈 문제점을 재현하기 위해 사용한 정확한 단계로 위의 업데이트 2"를 추가했습니다. IIS Express가 내장 된 Windows 8.1 및 Visual Studio 2013을 사용 중이며 표시된 단계 만 사용하고 있습니다. – bmherold