【问题标题】:WCF over HTTPS with PHP throws "Method Not Allowed" exceptionWCF over HTTPS 与 PHP 引发“方法不允许”异常
【发布时间】:2010-09-21 12:59:52
【问题描述】:

我创建了一个旨在始终通过 HTTPS 的 .NET WCF 服务。当我第一次创建服务框架并通过 HTTP 运行它时,它运行良好。我使用 PHP5 来测试与内置 SOAP 函数的互操作性。但是,一旦我切换到 HTTPS,当我尝试从 PHP 调用该函数时,我会收到错误消息“方法不允许”和错误代码“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 不需要受信任的证书。

我做错了什么?

【问题讨论】:

    标签: .net php wcf soap https


    【解决方案1】:

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

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

    【讨论】:

    • 我看过 Fiddler,但由于它都是加密的,除非我遗漏了什么,否则它似乎没有多大帮助。对于缺少 behaviorConfiguration 属性,我深表歉意。我把它放在那里,然后在复制/粘贴之前将其删除,以试图找出问题所在。
    • 嗯,Fiddler 可以解码 ssl。但前提是会话在 IE 中开始。它会故障转移http吗?可能是在没有 https 的情况下问题是可重现的(因为我没有看到任何 TransportWithMessageCredential),在这种情况下检查很容易。
    猜你喜欢
    • 2011-01-13
    • 1970-01-01
    • 1970-01-01
    • 2014-07-16
    • 2018-02-02
    • 1970-01-01
    • 2018-05-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多