2010-08-21 6 views
8

내가 마이크로 소프트의 WCF REST 서비스 템플릿 내가WCF REST 서비스는

IIS 6에서 서비스를 호스팅하고 40 사용하여 .NET 4에서 WCF REST (일명 WebHttp) 서비스를 만들어 PUT 및 DELETE 지원하지 않습니다

서비스 템플릿은 ".svc"가 포함되지 않은 "깨끗한"URL을 만드는 방법으로 Global.asax의 RouteTable을 사용합니다.

예 : http : // localhost를/항공편/878

GET 및 POST이 URL에 대해 잘 작동하지만, "구현되지 않음"HTTP 501에 결과를 PUT 및 DELETE.

나는이 같은 간단한 SVC는 파일을 작성하는 경우 :

HTTP : // localhost를/flightsservice.svc/878

<%@ ServiceHost Language="C#" Debug="true" Service="MyProject.FlightsService"%> 

그때 내가 PUT이 URL에 대해 DELETE 사용할 수 있습니다

위의 "깨끗한"URL에 대해 PUT 및 DELETE를 수행 할 수 있는지 누가 알 수 있습니까? 설정을 구성 할 파일 확장자가 없기 때문에이를 허용하도록 IIS를 구성 할 수있는 방법이 없으며 PUT 및 DELETE를 전역 적으로 허용하고 싶지 않습니다.

+0

비슷한 문제가 IIS 7.5 [여기] (http://stackoverflow.com/questions/3745015/webdav에 해결되었다 방법 :이 작업을 수행하려면 WebDAVModule 및 아래의 예에서와 같이 WebDAV를 핸들러를 제거 troubles-for-restfull-wcf-web-service). 해결책은 우아합니다. – lmsasu

답변

4

잠시 동안 IIS6을 사용하지 못했지만 설치되지 않았으므로 여기서는 메모리를 사용하지 않습니다.하지만 IIS6에서 무손실 URL 라우팅을 위해 IIS6과 비슷한 기능을 구현해야했습니다.

IIS 관리자를 해킹하여 폴더 단위로 와일드 카드 스크립트 매핑을 사용하도록 설정할 수 있습니다. 이 blog post은 내가 따라 왔으며 실제로 잘 작동합니다 (그리고이 link은 약간의 배경을 제공합니다). 이것은 실제로 IIS 자체가 아니라 Manager의 버그입니다 (적어도 자신이 말하는 것입니다).

사이트의 하위 폴더 (예 : http://localhost/services/flight/878)에서 서비스를 참조 할 수 있습니까? 그렇다면 위의 IIS 관리자 해킹을 구현하면 해당 디렉터리에 대해 모든 HTTP 동사를 사용할 수 있다고 생각합니다. 다시 말하지만, 나는 메모리에서 벗어날 것이다. (GET과 POST 만 구현 했으므로 PUT과 DELETE를 다루지 않았다.) 그래서 나는이 권한을 얻길 희망한다.

추가 정보가 필요하거나 내 기억이 미끄러지는지 알려주세요. :) 이게 도움이 되길 바란다!

+0

감사합니다. 내 IIS 응용 프로그램에는 서비스 만 포함되므로 게시 한 두 번째 링크에 설명 된대로 전체 응용 프로그램에 대해 와일드 카드 매핑을 설정합니다. 매우 감사합니다! Mike –

+0

"문서화되지 않은"기능을 좋아해야합니다. :) 다행 당신을 위해 일했다. –

2

웹 응용 프로그램이 여러 dev/production 환경에 배포되는 경우 가장 좋은 방법은 web.config 수준에서 WebDAV를 비활성화하는 것입니다.

<system.webserver> 
    <modules> 
    <remove name="WebDAVModule" /> 
    </modules> 
    <handlers> 
    <remove name="WebDAV" /> 
    </handlers> 
</system.webserver> 
+1

질문은 응용 프로그램 수준에서 IIS에서 PUT 및 DELETE를 활성화하는 방법이었습니다. –

+1

예, 이것은 원래 포스터가 물었을 때 IIS가 현재 응용 프로그램에만 허용하도록합니다. WebDAV 모듈 및 처리기를 제거하지 않으면 PUT 및 DELETE 요청이 해당 요청에 의해 도용되어 작동하지 않습니다. – DanilF