此問題涉及在同一服務器上使用託管在IIS 7中的PHP腳本在Windows 2008 Server上使用託管在Windows應用程序中的WCF服務,以及來自其他地方的其他應用程序使用Windows 2008服務器上的Windows應用程序託管的WCF服務的PHP SoapClient
該應用程序已在Windows 7計算機上使用Visual Studio 2010,.NET Framework 4,IIS 7和各種版本的PHP完全開發和測試。
在Windows 7機器上,netsh的使用方法如下。
netsh http add urlacl url=http://localhost:8000/WCFService/ user=machinename\user
各種其他端口也成功添加並在測試過程中使用。
將應用程序複製到Windows 2008 Server時,應用程序的主要部分已成功通過測試。
同樣的netsh命令是在Windows上使用2008服務器,但與服務器的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腳本:
try {
$client = new SoapClient("wsdl\wcf-wsdl.wsdl");
} catch (Exception $e) {
echo $e->getMessage(), "\n";
exit();
}
錯誤然後稍微更改爲以下:
SOAP-ERROR: Parsing Schema: can't import schema from 'http://serveripaddress:8000/WCFService/?xsd=xsd0'
我認爲眼下的問題涉及到服務的「知名度」,到客戶端,並可能的權限。
閱讀了數十篇文章後,我仍然無法找到解決此問題的方法。
任何援助將不勝感激。
非常感謝提前。
嗨Rajesh,謝謝你的回答。我當然會仔細看看你提供的鏈接上的帖子。 –
我的意思是補充說,我的解決方案在Windows 7下的開發系統中完美工作,使用基本相同的wsdl。我不確定這是否會對平坦的wsdl產生影響。 –
爲了您的服務能夠互操作,最好的事情是擁有扁平的wsdl。在您的開發環境中,您可能有權訪問服務器以在所述位置下載xsd? xsd = xsd1等,但想象一下試圖訪問服務器上的資源的外部客戶端.. .svc?xsd = xsd1。服務器上的防火牆可能不允許訪問該資源。 – Rajesh