2008-11-09 103 views
1

我創建了一個.NET WCF服務,其目的是始終通過HTTPS。當我第一次創建服務框架並通過HTTP運行它時,它運行良好。我使用PHP5來測試與內置SOAP函數的互操作性。但是,一旦我切換到HTTPS,當我嘗試從PHP調用該函數時,我收到錯誤消息「方法不允許」和錯誤代碼「http」。它確實允許我檢索方法列表。當它調用方法「Test」時發生錯誤。通過HTTPS與WCF的WCF拋出「方法不允許」異常

這裏是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

您是否嘗試過使用網絡嗅探器來查看實際從哪裏請求的內容?像Fiddler或Wireshark(取決於場景)。

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

+0

我看過提琴手,但是因爲它都是加密的,所以除非我缺少一些東西,否則它似乎沒有多大幫助。 我對缺少的BehaviorConfiguration屬性表示歉意。我把它放在那裏,並在複製/粘貼之前將其移除,然後試圖找出問題。 – Shane 2008-11-09 22:23:22