2011-05-10 4 views
1

부하 분산 장치 뒤에서 IIS에서 호스팅되는 WCF 서비스가 있습니다. SSL은 LB에서 오프로드 된 다음 일반 HTTP로 서비스가 호출됩니다.HTTP 끝점을 통한 SOAP 끝점에서 400 잘못된 요청을 반환합니다.

서비스의 REST 끝점을 얻었지만 SOAP 끝점을 사용하여 wsdl 페이지를 표시 할 수 없습니다. https://domain/Service.svc/soap?wsdl을 호출하면 브라우저는 400 Bar Request 응답을받습니다. 나는 svclog도 검사했는데 오류는 입니다. 이는 GET 대신 POST을 수행하고 XML을 보낼 것을 기대한다는 것을 의미합니다. CONFIGS에서

조각 :

<bindings> 
    <basicHttpBinding> 
     <binding name="basicBinding" maxBufferSize="2147483647" maxReceivedMessageSize="2147483647"> 
      <security mode="Transport"></security> 
      <readerQuotas maxStringContentLength="2147483647" /> 
     </binding> 
    </basicHttpBinding> 
    <webHttpBinding> 
     <binding name="webBinding" maxBufferSize="2147483647" maxReceivedMessageSize="2147483647"> 
      <security mode="Transport"></security> 
     </binding> 
    </webHttpBinding> 
</bindings> 

<services> 
    <service behaviorConfiguration="MyServiceBehavior" name="Namespace.Service"> 
     <endpoint address="" behaviorConfiguration="MyRESTBehavior" binding="webHttpBinding" bindingConfiguration="webBinding" name="REST" contract="Namespace.IService" /> 
     <endpoint address="https://domain/Service.svc/soap" binding="basicHttpBinding" bindingConfiguration="basicBinding" name="SOAP" contract="Namespace.IService" /> 
    </service> 
</services> 

<behaviors> 
    <serviceBehaviors> 
     <behavior name="MyServiceBehavior"> 
      <serviceMetadata httpGetEnabled="false" httpsGetEnabled="true"/> 
      <serviceDebug includeExceptionDetailInFaults="true"/> 
      <dataContractSerializer maxItemsInObjectGraph="6553600" /> 
     </behavior> 
    </serviceBehaviors> 
    <endpointBehaviors> 
     <behavior name="MyRESTBehavior"> 
      <webHttp/> 
     </behavior> 
    </endpointBehaviors> 
</behaviors> 

내가 너무있는 wsHttpBinding을 사용하여 시도하지만 유일하게 다른 결과 대신 401의를 얻고 있었다. 어떤 방향으로 감사합니다.

답변

0

발견했습니다. 이전에 서비스를 두 번 게시하는 것에 대한 오류가 발생하여 serviceMetadata에서 httpsGetUrl 속성을 제거했습니다. 이제는 오류가 오타로 인한 것이므로 httpsGetUrl을 제거해서는 안됩니다. behaviors 섹션을 아래의 것으로 변경하면 내 문제가 해결되었습니다.

<behaviors> 
    <serviceBehaviors> 
     <behavior name="MyServiceBehavior"> 
      <serviceMetadata httpGetEnabled="false" httpsGetEnabled="true" httpsGetUrl="https://domain/Service.svc/soap" /> 
      <serviceDebug includeExceptionDetailInFaults="true"/> 
      <dataContractSerializer maxItemsInObjectGraph="6553600" /> 
     </behavior> 
    </serviceBehaviors> 
    <endpointBehaviors> 
     <behavior name="MyRESTBehavior"> 
      <webHttp/> 
     </behavior> 
    </endpointBehaviors> 
</behaviors> 
+0

나를 위해 작동하지 않습니다 ... –

0

basicHttpBinding 끝점에 절대 주소를 사용할 수 있다고 생각하지 않습니다. 대신보십시오 : "은 https :? //domain/soap/Service.svc WSDL"

<endpoint address="soap" binding="basicHttpBinding" bindingConfiguration=... 

귀하의 URL이 뭔가를 보여야 WSDL에 액세스 할 수 있습니다. IIS & WCF를 사용하면 가상 디렉터리의 URL을 재정의 할 수 없습니다. 엔드 포인트 주소 값은 웹 사이트 URL에 상대적이어야합니다.