通过HTTPS与WCF的WCF抛出“方法不允许”异常

问题描述:

我创建了一个.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需要一个可信的证书。

我在做什么错?

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

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

+0

我看过提琴手,但是因为它都是加密的,所以除非我缺少一些东西,否则它似乎没有多大帮助。 我对缺少的BehaviorConfiguration属性表示歉意。我把它放在那里,并在复制/粘贴之前将其移除,然后试图找出问题。 – Shane 2008-11-09 22:23:22