PHPからWCFサービス(.NET)を呼び出そうとしています。サービスでWS2007FederationHttpBinding
を使用して認証するため、SoapClient
を使用するよりも少し複雑です。PHP(連合セキュリティ付き)でWCFサービスを呼び出す
ここに私が使用しているコードがあります。私は信じられないほどの資格情報を追加していませんが、関係なく、私はアクセスが拒否された時点でさえもありません。 WSDLは、私が指している必要があり
$wsdl = "https://slc.centershift.com/sandbox40/StoreService.svc?wsdl";
$client = new SoapClient($wsdl,array(
//'soap_version'=>SOAP_1_2 // default 1.1, but this gives 'Uncaught SoapFault exception: [HTTP] Error Fetching http headers'
));
$params = array();
$params['SiteID'] = 123;
$params['GetPromoData'] = false;
$ret = $client->GetSiteUnitData(array('GetSiteUnitData_Request'=>$params));
print_r($ret);
?
https://slc.centershift.com/Sandbox40/StoreService.svc?wsdl
非常に短くしているようだが、https://slc.centershift.com/Sandbox40/StoreService.svc?wsdl=wsdl0
https://slc.centershift.com/Sandbox40/StoreService.svc?singleWsdl
(wsdl0
に注意してください)への参照は、その中にすべてのものを持っているようだ含まれています。
SOAP 1.2を指定する必要がありますか?私がすると、私は接続タイムアウト(
[HTTP] Error Fetching http headers
)を取得します。私がそうしないと、SOAP 1.1のデフォルトが使用され、[HTTP] Cannot process the message because the content type 'text/xml; charset=utf-8' was not the expected type 'application/soap+xml; charset=utf-8'
が得られます。私はまだ認証されていないか、間違ったSOAPバージョンを使用しているためですか?PHPでの認証方法は?対応する.NET/C#コードは次のとおりです。どういうわけかこれらをSOAPヘッダーとして入れる必要がありますか?私はそれをすべて間違って考えています。私はメソッドを呼び出す前に何らかの認証をする必要があります(私が読んだものから、トークンを取り戻し、それを将来のすべてのメソッド呼び出しに使用するはずです。
$client->__getFunctions()
を呼び出す場合、私はすべての機能の有効なリストを取得していますので、私はこれらのいずれかであると仮定実際の問題は認証です。
私が話したことがある他のプログラマは、これを動作させるのに時間を費やしていましたが、あきらめて代わりに.Nのプロキシを実装しましたET。彼らはPHPから独自のセキュリティで保護されていない.NETサービスにパラメータを渡します。それは動作しますが、WCFの目的はすべてのタイプのクライアント(非HTTPでも可能です)をサポートすることですので、私にとってはうんざりして非効率的で、逆効果です。
私はHow to: Create a WSFederationHttpBindingをMSDNで読んだことがありますが、それは役に立ちませんでした。
?wsdlまたは?singleWsdlのいずれかが問題ありません。前者は複数の文書を目的別に分割して参照していますが、後者はすべて1か所にまとめられています。 wsdlは使用されている石鹸のバージョンを指定していますので、wsdlをダウンロードした後に、使用する石鹸のバージョンを知らせる必要があります。この基本的な情報がwsdlに加えて提供される必要があるならば、私は図書館が未成熟/低品質であることを示唆しています。私は異なる/より良い石鹸ライブラリを見つけることをお勧めします。 – MattC
@MattCコメントをいただきありがとうございます。 WSDLについて知っておきたいことですが、soapライブラリは問題ではありません(これはPHP固有のものです)。私はnuSoapをチェックアウトしましたが、何の利点もないように見えませんでした。 –
私は本当にsnarky、@ ShaneNを鳴らしたくありませんが、PHPに組み込まれているのは品質の保証ではありません。例えば、厄介な 'mail()' PHPからSOAPで作業していないので、私は助けることはできません。 – Palec