使用PHP的HTTPS上的WCF会抛出“Method Not Allowed”异常

时间:2008-11-09 19:59:38

标签: .net php wcf soap https

我已经创建了一个旨在始终通过HTTPS的.NET WCF服务。当我第一次创建服务框架并通过HTTP运行它时,它工作正常。我使用PHP5来测试与内置SOAP函数的互操作性。但是,一旦我切换到HTTPS,当我尝试从PHP调用该函数时,我收到一条错误消息“Method Not Allowed”和故障代码“http”。它确实允许我检索方法列表。调用方法“Test。”时会发生错误。

以下是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不需要可靠的证书。

我做错了什么?

1 个答案:

答案 0 :(得分:1)

您是否尝试过网络嗅探器以查看实际从哪里获取请求?像Fiddler或Wireshark(取决于场景)。

此外 - 我注意到您在behaviorConfiguration="apiBehavior"元素上缺少<service...