2011-12-06 37 views
0

此問題涉及在同一服務器上使用託管在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'

我認爲眼下的問題涉及到服務的「知名度」,到客戶端,並可能的權限。

閱讀了數十篇文章後,我仍然無法找到解決此問題的方法。

任何援助將不勝感激。

非常感謝提前。

回答

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

如果你知道你正在使用a。NET WCF服務,您可以將.svc?wsdl下載wsdl的位置更改爲.svc?singleWsdl,WCF服務器將負責您的遞歸/鏈接工作。

0

這可能是答案.net具有默認配置使此錯誤。 https://bugs.php.net/bug.php?id=47761

+0

一個潛在解決方案的鏈接總是受歡迎的,但請在鏈接中添加上下文,以便您的同行用戶瞭解它是什麼以及它爲什麼在那裏。如果目標網站無法訪問或永久離線,請始終引用重要鏈接中最相關的部分。 – Exaqt

相關問題