2011-08-17 7 views
8

우리는 익명 사용자로부터 임의의 텍스트 묶음을받은 후 백엔드에서 일부 처리를 수행하는 WCF REST 웹 서비스를 개발 중입니다. 우리는 단지 우리가 (401) Unauthorized을 얻을 기본 IIS 설정을 사용하는 경우WCF REST Service - 401 Unauthorized

[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Required)] 
public class MyRESTService : IMyRESTService 
{ 
    [WebInvoke(Method = "PUT", UriTemplate = "/MyRESTMethod?paramA={paramA}&paramB={paramB}")] 
    public Stream MyRESTMethod(string paramA, string paramB, Stream rawData) 
    { 
     //do some stuff... 
    } 
} 

:

예를 들어, 여기에 우리의 웹 서비스에서 하나의 방법입니다. 그러나 많은 시행 착오 끝에 우리는 우리의 서비스를 위해 실제 파일 인 .svc에 'Everyone'에게 쓰기 액세스 권한을 부여함으로써 작동하도록 할 수 있다고 생각했습니다.

내 질문은 : 왜 IIS가 작동하려면 .svc 파일에 대한 쓰기 액세스 권한이 필요합니까? 더 나은 방법이 있습니까 아니면 내가 hackish (그리고 아마도 불안전 한) 해결 방법으로 붙어 있습니까?

WTF Microsoft?

아마 관련 :

+0

액세스 권한에 <system.web>의 내부

<authentication mode="None" />를 넣어 고정 할 수 있습니다. 대신 인증 된 사용자는 이러한 권한을 가져야합니다. 익명 액세스의 경우 이는 IUSR입니다. – chiccodoro

답변

7

M $에서 기술 담당자에게 이야기 후 나는이 실제로 예상되는 동작임을 통보했다. 누군가가 요청을 보내기 위해 서비스에 쓰기 권한이 있어야하며, 이렇게하면 실제로 .SVC 파일에 대한 쓰기 권한이 자동으로 설정됩니다.

+0

당신은 나의 하루를 구했습니다! BTW : 이것에 대해 생각하면 두 번째로 생각하면됩니다. 리소스에서 PUT을 요청하면 해당 리소스가 쓰기 액세스를 허용해야합니다. 이제 WCF와 함께 REST는 IIS가 /foobar.svc에 대한 PUT 요청으로 /foobar.svc/some/path를 해석하고 추가 해석을 위해 WCF로 "/ some/path"부분을 전달하도록 구현 된 것 같습니다. 그래서, IIS의 경우 이것은 /foobar.svc에 대한 PUT 요청입니다 - HTTP 말하기 : foobar.svc – chiccodoro

9

나는 또한이 발견은 반드시 "모든 사람"에 부여 할 필요가 없습니다 귀하의 web.config

+0

을 수정하고 싶습니다. 그래도 도움이되었지만 안전합니까? –

+0

환경에 따라 다릅니다. 제 경우에는 네트워크가 안전하다고 믿었습니다. 아마도 충분할 수도 있습니다. 서비스간에 직접 인증이 필요한 경우 분명히 문제가됩니다. – captncraig