2011-12-06 13 views
0

この質問は、Windows Server 2008上のWindowsアプリケーションでホストされているWCFサービスを、同じサーバー上のIIS 7でホストされているPHPスクリプト、および他の場所でホストされている他のアプリケーションからのものです。Windows 2008サーバー上のWindowsアプリケーションでホストされているWCFサービスを使用するPHP SoapClient

このアプリケーションは、Visual Studio 2010、.NET Framework 4、IIS 7、およびさまざまなバージョンのPHPを使用して、Windows 7マシンで完全に開発およびテストされています。

Windows 7マシンでは、netshを次のように使用しました。

netsh http add urlacl url=http://localhost:8000/WCFService/ user=machinename\user 

その他のさまざまなポートもテスト中に追加して使用できました。

アプリケーションをWindows 2008 Serverにコピーすると、アプリケーションの重要な部分が正常にテストされました。

同じnetshコマンドは、Windows 2008 Serverで使用された、まだlocalhostを次のようにドメインとサーバーのIPとマシン名と置き換えた。

netsh http add urlacl url=http://serveripaddress:8000/WCFService/ user=domain\user 

PHPのSoapClient作業、様々なユーザーを取得しようとする試みの間に=」 ... "というオプションが試行されました。次のように

初期PHPのSoapClientスクリプトは次のとおりです。

try { 
    $client = new SoapClient("http://serveripaddress:8000/WCFService/?wsdl"); 
} catch (Exception $e) { 
    echo $e->getMessage(), "\n"; 
    exit(); 
} 

初期テスト中に、次のエラーが発生しました:

Warning: SoapClient::SoapClient(http://serveripaddress:8000/WCFService/?wsdl) [soapclient.soapclient]: failed to open stream: HTTP request failed! in C:\inetpub\wwwroot\Sites\www.myurl.com\WCF-Test.php on line 7

Warning: SoapClient::SoapClient() [soapclient.soapclient]: I/O warning : failed to load external entity "http://serveripaddress:8000/WCFService/?wsdl" in C:\inetpub\wwwroot\Sites\www.myurl.com\WCF-Test.php on line 7

SOAP-ERROR: Parsing WSDL: Couldn't load from 'http://serveripaddress:8000/WCFService/?wsdl' : failed to load external entity "http://serveripaddress:8000/WCFService/?wsdl"

を以下に縮小エラー周りいじっていくつかの後:

SOAP-ERROR: Parsing WSDL: Couldn't load from 'http://serveripaddress:8000/WCFService/?wsdl' : failed to load external entity "http://serveripaddress:8000/WCFService/?wsdl"

次にwsdlをファイルに展開し、次のPHPを使用しましたスクリプト:私は手元の問題は、クライアントに、サービスの「可視性」に関連すると考えています

SOAP-ERROR: Parsing Schema: can't import schema from 'http://serveripaddress:8000/WCFService/?xsd=xsd0'

、および:

try { 
    $client = new SoapClient("wsdl\wcf-wsdl.wsdl"); 
} catch (Exception $e) { 
    echo $e->getMessage(), "\n"; 
    exit(); 
} 

誤差は、次のように少し変更しましたおそらく許可。

投稿数を読んだ後、私はまだこの問題の解決策を見つけることができませんでした。

ご協力いただければ幸いです。

事前に感謝します。

答えて

0

WCFサービスがPHPクライアントによってアクセスされるようにホストしている場合は、フラットwsdlが必要です。フラットWSDLを生成する方法については、下のリンクは、次のとおりです。

How to flatten your wsdl

を同一の特徴は、.NET 4.5の一部として、枠組みの中で下盛になります。それがあなたを助けることを願っています。

+0

こんにちはRajesh、あなたの答えをありがとう。あなたが提供したリンクの投稿をよく見ていきます。 –

+0

私は、Windows 7の下で、同じwsdlを使って、開発システムに完全に対応したソリューションを持っていると付け加えました。私はこれが平らなwsdlとの違いをもたらすかどうかはわかりません。 –

+0

サービスが相互運用できるようにするには、フラットwsdlを使用することをお勧めします。あなたの開発環境では、上記の場所にxsdをダウンロードするためにサーバーにアクセスできますか? xsd = xsd1などですが、サーバー上のリソースにアクセスしようとしている外部クライアントの想像してください.svc?xsd = xsd1。サーバー上のファイアウォールがそのリソースへのアクセスを許可していない可能性があります。 – Rajesh

0

NET WCFサービスでは、.svc?wsdlから.svc?singleWsdlにwsdlをダウンロードする場所を変更するだけで、WCFサーバーがあなたのために再帰/リンク作業を処理します。

0

これは答えかもしれません.netはデフォルトの設定でこのエラーを作ります。 https://bugs.php.net/bug.php?id=47761

+0

潜在的な解決策へのリンクは常に歓迎しますが、リンクの周りにコンテキストを追加して、仲間のユーザーには何か、なぜそれがあるのか​​が分かります。ターゲットサイトに到達できない場合や、永続的にオフラインになる場合は、常に重要なリンクの最も関連性の高い部分を引用してください。 – Exaqt

関連する問題