2009-06-10 3 views
0

내장 된 WCF 서비스 호스트로 작업하는 작은 WCF 웹 서비스와 Visual Studio 2008 기본 제공 개발 웹 서버를 호스팅하고 있습니다.IIS에서 호스팅하는 WCF 서비스를 Windows 인증 및 익명 모두에 대해 구성 할 수 있습니까?

I 이러한 호스팅 환경 나는 서비스 메소드를 호출하기 위해 WCF Test Client에 의존했다.

는 지금은 시험의 나의 다음 단계 문제로 실행하고 있습니다 :

나는 내 WINXP dev에 컴퓨터에 IIS 5.1에서 호스팅 나는 어쩌면 문제는 내가 더 이상 WCF 테스트 클라이언트를 계속 사용할 수 없습니다 생각합니다. "익명 액세스"CHECKED (활성화)

WCF 테스트 클라이언트 UI

는 웹 메쏘드와 INVOKE 버튼을 노출 제대로 제공된다

사례 1 : 여기에 무슨 일이 일어나고 있는지입니다. 그러나 INVOKE를 클릭하면 Windows 인증이 필요한 백엔드 데이터 저장소 (타사 제품)에 연결하지 못합니다. 내가 제품에서 돌아 오는 오류를 게시 할 수 있습니다. DLL이 있지만 관련성이 있다고 생각하지 않습니다.

사례 2 : "익명 액세스"유엔 - 체크 (DISABLED)

WCF 테스트 클라이언트 UI도 제대로 초기화되지 않습니다. 내 연구 결과에 따르면 MEX (WS-Metadata Exchange)에는 "익명 액세스"가 필요하며 (분명히) WCF 테스트 클라이언트에는 MEX가 필요합니다.

Error: Cannot obtain Metadata from http://localhost/wcfiishost 
The remote server returned an error: (401) Unauthorized.HTTP GET Error 
URI: http://localhost/wcfiishost  
There was an error downloading 'http://localhost/wcfiishost'.  
The request failed with the error message: 
Security settings for this service require 'Anonymous' Authentication but it is not enabled for the IIS application that hosts this service 

는 솔직히 이해가 안 바인딩 등 옵션, 메시지 보안 및 물건에 대한 설명이 많이 있습니다 여기에 반환되는 오류의 중요한 조각이다. 여기 내 취할 걸릴 수 있지만 귀하의 의견을 사랑합니다 :

(a) Windows 인증을 사용하도록 내 WCF 웹 서비스를 구성해야한다는 것을 알고 있기 때문에 WCF 테스트 클라이언트를 계속 사용할 수 없다는 결론을 내 IIS에서 서비스. 그것은 그것이 나에게 유용하다는 것이 효과적으로 오래 지속되었다는 것입니다. WCFTestClient가 Anonymous 없이는 작동하지 않기 때문에 웹 클라이언트를 작성하는 데 시간을 할애해야합니다. IT 및 호스팅 서비스가 propertly 구성된 경우 (난 그냥 특별한 구성 기술이를 위해 무엇인지 모른다) WCF 테스트 클라이언트를 사용할 수

(또는)

(B).

올바른 내용은 무엇입니까? WCFTestClient 사용을 중지 할 시간 또는 두 가지 방법이 모두 있습니까? 조언 해 주셔서 미리 감사드립니다.

편집 : 11 년 6 월 나는 다른 사람이 질문에 나를 도울 수 있도록 제공 할 수있는 뭔가가 09

있습니까?

+0

PS : 어떤 당신이 당신의 서비스에 사용하는 바인딩? "basicHttpBinding"으로 시도해 볼 수도 있습니까 (아직 사용하지 않는 경우)? –

답변

0

이 질문의 제목/제목을 여기에 설정하여 막 다른 골목에 도달했을 때 MSDN 포럼에서 제목과 다른 강조점 (본질적으로 동일한 내용)을 사용하여 같은 문제를 열었습니다.

나를 위해, 진짜 문제는 익명 인증을 설정하지 않고 IIS에서 WCFTestClient를 사용하는 방법이었습니다 (서비스에 Windows 통합 인증이 필요했기 때문에).

Mex은 분명히 익명을 요구하며 기본적으로 WCFTestClient에는 Mex이 필요합니다. 열쇠는 web.config 파일을 신중하게 작성하는 것 모두를 수용하는 것 같습니다.

<?xml version="1.0"?> 
<configuration> 

  <endpoint address="" 
         binding="wsHttpBinding" 
         bindingConfiguration="wsBindingConfig" 
         contract="sdkTrimFileServiceWCF.IFileService"> 

           <identity> 
            <dns value="localhost" /> 
           </identity> 
      </endpoint> 

      <endpoint address="basic" 
         binding="basicHttpBinding" 
         bindingConfiguration="bindingConfig" 
         contract="sdkTrimFileServiceWCF.IFileService" /> 
     </service> 
    </services> 

    <bindings> 
     <basicHttpBinding> 
      <binding name="bindingConfig"> 
       <security mode="TransportCredentialOnly"> 
        <transport clientCredentialType="Windows"/> 
       </security> 
      </binding> 
     </basicHttpBinding> 

     <wsHttpBinding> 
      <binding name="wsBindingConfig"> 
       <security mode="Transport"> 
        <transport clientCredentialType="Windows"/> 
       </security> 
      </binding> 
     </wsHttpBinding> 
    </bindings> 

,532 :

어쨌든, 나는 (the MSDN link is here 이하이 Web.config의 작업 있어요 10

0

방금 ​​같은 설정을 시도했지만, 제 경우에는 모든 것이 잘 작동하는 것 같습니다.

  • ASP.NET 웹 사이트
  • WCF 서비스는 = 익명 활성화 및 Windows 인증을 모두
  • IIS 응용 프로그램에서 특별한 설정없이은 BasicHttpBinding을 사용 = 사용 가능 (모두 켜져)
나는 쉽게로 연결할 수 있습니다

WcfTestClient를 사용하여 메타 데이터를 검색 한 다음 아무 문제없이 호출 할 수 있습니다. 내 서비스 기능 내부

, 나는 윈도우 사용자 인증으로 정확하게 식별, 현재 사용자가 알려진 사용자인지 여부를 확인 : 정말 모르는

ServiceSecurityContext ssc = ServiceSecurityContext.Current; 

    if (ssc.IsAnonymous) 
    { 
     return "anonymous user"; 
    } 
    else 
    { 
     if(ssc.WindowsIdentity != null) 
     { 
      return ssc.WindowsIdentity.Name; 
     } 

     if (ssc.PrimaryIdentity != null) 
     { 
      return ssc.PrimaryIdentity.Name; 
     } 
    } 

    return "(no known user)"; 

를, 무엇을 더 (나는 IIS7과 비스타에있어 제외) 확인하십시오. 서비스 코드에있는 사용자를 확인하기 위해이 코드를 포함시킬 수 있습니까? 그냥 ....

마크

0

마크를보고, 당신의 설정은 존스 근처에도 없습니다.

John은 메시지 모드 전송에 Windows 자격 증명을 사용하는 WSHttpBinding을 사용합니다. Windows 인증은 BasicHttpBinding과 함께 사용되지 않습니다. 또한 John은 AnonymousAuthentication을 사용하지 않도록 설정했기 때문에 mex (메타 데이터 교환)가 실패한 것입니다.

전화를 걸 때 Error 401 (Unauthorized) 오류가 발생하므로 서비스 측 기능 안에서도 통화가 연결되지 않습니다.

존을 아는 것만 큼 똑같은 문제가 있으며 끝점마다 별도의 바인딩을 설정하려고합니다. 잘하면 그게 효과가 있습니다.

+0

우리는 이미 mex에 다른 바인딩을 사용하므로 그 아이디어는 결코 생각할 필요가 없습니다. 나는 현재 손실에 처해있다. –

관련 문제