此问题涉及在同一服务器上使用托管在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