항상 HTTPS를 초과하는 .NET WCF 서비스를 만들었습니다. 처음 서비스 골격을 만들고 HTTP를 통해 실행했을 때 제대로 작동했습니다. PHP5를 사용하여 SOAP 기능에 내장 된 상호 운용성을 테스트했습니다. 그러나 일단 HTTPS로 전환하면 PHP에서 함수를 호출하려고 할 때 "Method Not Allowed"라는 메시지와 "http"오류 코드로 오류가 발생합니다. 그것은 나를 통해 메서드 목록을 검색 할 수 있습니다. "테스트"메서드를 호출 할 때 오류가 발생합니다. 여기 HTTPS를 통한 WCF와 PHP의 "Method Not Allowed"예외 발생
는 WCF 구성입니다 :<system.serviceModel>
<bindings>
<basicHttpBinding>
<binding name="secureBasic">
<security mode="Transport">
<transport clientCredentialType="None" />
</security>
</binding>
</basicHttpBinding>
</bindings>
<services>
<service behaviorConfiguration="apiBehavior" name="TestAPI.API">
<endpoint address="https://192.168.0.3/API"
binding="basicHttpBinding"
bindingConfiguration="secureBasic"
contract="TestAPI.IAPI"/>
<endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange"/>
</service>
</services>
<behaviors>
<serviceBehaviors>
<behavior name="apiBehavior">
<serviceMetadata httpGetEnabled="true" httpsGetEnabled="true"/>
</behavior>
</serviceBehaviors>
</behaviors>
</system.serviceModel>
그리고 여기에 PHP가 그것을 호출하는 방법입니다
$client = new SoapClient("https://192.168.0.3/API.svc?wsdl");
echo "<pre>" . print_r($client->__getFunctions(), 1) . "</pre>";
$param = new stdClass();
$param->A = "123";
$param->B = "456";
try {
$client->Test($param);
} catch (Exception $e) {
die("<pre>" . print_r($e,1) . "</pre>");
}
내가 테스트를위한 자체 서명 된 SSL 인증서를 사용하고 있는데 난 몰라 PHP는 신뢰할 수있는 인증서가 필요합니다.
내가 뭘 잘못하고 있니?
내가 피들러을 검토 한 결과,하지만 모두 암호화되어있는, 내가 뭔가를 놓친 거지 많이하지 않는 데 도움이하지 않는 것 같습니다. 그리고 behaviorConfiguration 속성이 누락되어 사과드립니다. 문제를 파악하기 위해 복사/붙여 넣기를하기 전에 그것을 거기에 넣었습니다. – Shane
음, 피들러는 SSL을 디코딩 할 수있다. 하지만 경우에만 세션은 IE에서 시작됩니다. 그것은 http를 통해 실패합니까? 하는 경우 검사가 쉽고, (내가 어떤 TransportWithMessageCredential이 표시되지 않았으므로)이 문제가 HTTPS없이 재현이라고 할 수 있습니다. –