2011-12-06 42 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

相关问题