2013-01-30 3 views
3

WebHttp + HTTPS 바인딩과 함께 실행되는 자체 호스팅 WCF 서비스에 연결할 수 없습니다. 여러 가지 이유로, 나는 코드가 아니라 설정 파일을 사용하여 전체 서비스를 구성, 그리고 서비스이 방법의 인스턴스 : HTTPS를 통해 자체 호스팅 WCF 서비스에 연결할 수 없습니다.

private ServiceHost CreateService() 
{ 
    Type myServiceType = typeof(MyService); 
    ServiceHost myService = new ServiceHost(myServiceType, new Uri(Constants.ServiceAddress)); 
    ContractDescription contract = ContractDescription.GetContract(myServiceType); 

    WebHttpBinding httpsBinding = new WebHttpBinding(WebHttpSecurityMode.Transport); 
    httpsBinding.Security.Transport.ClientCredentialType = HttpClientCredentialType.None; 

    ServiceEndpoint endpoint = myService.AddServiceEndpoint(myServiceType, httpsBinding, "MyService.svc"); 
    endpoint.Behaviors.Add(new WebHttpBehavior()); 

    ServiceMetadataBehavior metadataBehavior = new ServiceMetadataBehavior(); 
    metadataBehavior.HttpGetEnabled = true; 
    metadataBehavior.HttpsGetEnabled = true; 
    myService.Description.Behaviors.Add(metadataBehavior); 

    myService.Credentials.ServiceCertificate.SetCertificate(
     StoreLocation.LocalMachine, 
     StoreName.My, 
     X509FindType.FindByThumbprint, 
     Constants.CertThumbprint); 

    return myService; 
} 

나는이 코드를 실행

이 서비스가 인스턴스화 오류없이 시작됩니다. 코드에서 쿼리 할 때 서비스가 열려 있다고 주장하고 netstat은 누군가가 적절한 포트에서 수신 대기 중임을 보여줍니다. 이 포트에서 들어오는 연결을 허용하는 방화벽 예외가 있습니다.

그러나 브라우저 또는 클라이언트에서 서비스 끝점 주소를 열려고하면 연결이 즉시 실패합니다. 어떤 단서? 잊어 버린 서비스 호스트 또는 환경의 구성이 있습니까?

편집 :

보고 할 오류 메시지가 없습니다 --- 없음 (404), (500), 또는 기타 오류가 발생했습니다. 브라우저는 대상 포트에 대한 연결을 열 수없는 것처럼 작동합니다. 서버가 들어오는 연결을 보지 못하는 것 같습니다.

+0

어떤 오류 메시지가 나타 납니까? – GrokSrc

+0

서비스 호스트가 실행중인 사용자 컨텍스트는 무엇입니까? X509 인증서에 액세스하는 데 사용 권한 문제 일 수 있습니다. – john

+0

클라이언트에서 피들러를 시도 했습니까? –

답변

2

문제는 내가하지 내 포트에 대한 SSL의 인증서를 등록 있다고 할 않는 밝혀졌다. 다음 코드 줄은 작동하지 않습니다.

myService.Credentials.ServiceCertificate.SetCertificate(
    StoreLocation.LocalMachine, 
    StoreName.My, 
    X509FindType.FindByThumbprint, 
    Constants.CertThumbprint); 

클라이언트의 인증서 인증을 사용하려는 경우에만 서비스 자격 증명을 설정해야합니다. HTTPS를 사용하는 경우 수신 대기중인 포트에 대해 SSL 인증서를 등록해야합니다. 다음 명령을 실행하면 문제가 해결 :이 또한이 작업을 수행하는 관리되지 않는 인터페이스이지만,이 netsh 프로그램을 사용하여이 작업을 수행하는 것이 가장 간단 그래서 더 관리되는 래퍼가 존재하지

netsh http add sslcert ipport=0.0.0.0:443 certhash=0b740a29f29f2cc795bf4f8730b83f303f26a6d5 appid={00112233-4455-6677-8899-AABBCCDDEEFF} 

.