1

常にHTTPS経由で使用することを目的とした.NETWCFサービスを作成しました。最初にサービススケルトンを作成してHTTPで実行したときは、正常に機能していました。PHP5を使用して、組み込みのSOAP関数との相互運用性をテストしました。ただし、HTTPSに切り替えた後、PHPから関数を呼び出そうとすると、「MethodNotAllowed」というメッセージと「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に信頼できる証明書が必要だとは思いません。

私は何が間違っているのですか?

4

1 に答える 1

1

ネットワークスニファを試して、実際にどこから何が要求されたかを確認しましたか?FiddlerやWiresharkのようなもの(シナリオによって異なります)。

behaviorConfiguration="apiBehavior"また-私はあなたが要素に欠けていることに注意します<service...

于 2008-11-09T20:16:36.007 に答える