2011-10-04 4 views
3

IIS 6에 WCF 웹 서비스가 있고 SSL을 통해 작동하도록했습니다. 서비스를 호출 할 때 다음 오류가 발생합니다.SSL을 통한 WCF 문제

메시지를 처리 ​​할 수 ​​없습니다. 이는 'http://tempuri.org/IARPolicyComposer/GetTemplatesList'작업이 올바르지 않거나 메시지에 유효하지 않거나 만료 된 보안 컨텍스트 토큰이 있거나 바인딩간에 불일치가 있기 때문에 발생할 수 있습니다. 서비스가 비활성으로 인해 채널을 중단 한 경우 보안 컨텍스트 토큰이 유효하지 않습니다. 서비스가 유휴 세션을 중단하지 못하도록하려면 서비스 끝점의 바인딩에서 수신 제한 시간을 조기에 늘리십시오.

<system.serviceModel> 
<serviceHostingEnvironment multipleSiteBindingsEnabled="true" /> 
<bindings> 
    <wsHttpBinding> 
    <binding name="WSHttpBinding_IARPolicyComposer"> 
     <security mode="Transport"> 
     </security> 
    </binding> 
    </wsHttpBinding> 
</bindings> 
<services> 
<service behaviorConfiguration="PolicyComposer.ARPolicyComposerBehavior" name="PolicyComposer.ARPolicyComposer"> 
      <endpoint address="" binding="wsHttpBinding" contract="PolicyComposer.IARPolicyComposer"> 
      </endpoint> 
    <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange"/> 
</service> 
</services> 
<behaviors> 
<serviceBehaviors> 
<behavior name="PolicyComposer.ARPolicyComposerBehavior"> 
    <serviceMetadata httpGetEnabled="true" /> 
<serviceDebug includeExceptionDetailInFaults="true" /> 
</behavior> 
<behavior name=""> 
<serviceMetadata httpGetEnabled="true" /> 
<serviceDebug includeExceptionDetailInFaults="false" /> 
</behavior> 
</serviceBehaviors> 

클라이언트의 설정 :

<wsHttpBinding> 
    <binding name="WSHttpBinding_IARPolicyComposer" closeTimeout="00:01:00" openTimeout="00:01:00" receiveTimeout="00:10:00" sendTimeout="00:10:00" bypassProxyOnLocal="false" transactionFlow="false" hostNameComparisonMode="StrongWildcard" maxBufferPoolSize="524288" maxReceivedMessageSize="65536" messageEncoding="Text" textEncoding="utf-8" useDefaultWebProxy="true" allowCookies="false"> 
     <readerQuotas maxDepth="32" maxStringContentLength="8192" maxArrayLength="16384" maxBytesPerRead="4096" maxNameTableCharCount="16384" /> 
     <reliableSession ordered="true" inactivityTimeout="00:10:00" enabled="false" /> 
     <security mode="Transport"> 
     </security> 
    </binding> 
    </wsHttpBinding> 

모두 서비스와 클라이언트가 동일한 도메인에 여기

는 서비스 설정입니다.

+0

에 바인딩 MEX 변경에 대한 * 보안 설정을해야 할 그 가능성이 타임 아웃 *을받을 수 있습니다. –

+0

ssl이 없으면 작동합니까? 한번 시도한 적이 없다면 SSL을 사용하지 않고 작동하게하십시오 ... –

+0

다음 오류가 로그 파일에 기록되고 웹 사이트에 인증서가없고 'SSL 필요'도 선택되어 있지 않은 것으로 나타납니다 : ** 찾을 수 없습니다. 바인딩 WSHttpBinding을 사용하여 끝점에 대한 구성표 https와 일치하는 기본 주소입니다. 등록 된 기본 주소 체계는 [http] .. ** – Evan

답변

3

당신은 ...

<serviceMetadata httpGetEnabled="true" /> 

가되지는

<serviceMetadata httpsGetEnabled="true" /> 

마음 httpsGetEnabled에 있어야

을 그리고 당신이 저를 요구하는 경우에이 부분이 있기 때문에 제거 할 수 있습니다 끝점에서 사용하지 않습니다 ...

<behavior name=""> 
    <serviceMetadata httpGetEnabled="true" /> 
    <serviceDebug includeExceptionDetailInFaults="false" /> 
</behavior> 

어떻게 처음 난에 대한 의견을 무시하는 것에

binding="mexHttpsBinding" 
+0

+1을 잘 활용하지 않는 다른 환경에서 작업 중입니다. 참고로 구성에서 http와 https를 모두 가질 수 있지만 물론 SSL의 경우 https가 필수적입니다. –

+0

httpGetEnabled를 httpsGetEnabled로 변경했지만 여전히 동일한 오류가 발생합니다. – Evan