此问题涉及在Windows 2008 Server上使用Windows应用程序中托管的WCF服务的要求,来自同一服务器上的IIS 7中托管的PHP脚本以及其他位置托管的其他应用程序。
该应用程序已在使用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时,应用程序的基本部分已成功通过测试。
在Windows 2008 Server上使用了相同的netsh命令,但localhost已替换为服务器IP和带有域的machinename,如下所示:
netsh http add urlacl url=http://serveripaddress:8000/WCFService/ user=domain\user
在尝试使用PHP SoapClient时,尝试了各种user =“...”选项,包括“everyone”。
最初的PHP SoapClient脚本如下:
try {
$client = new SoapClient("http://serveripaddress:8000/WCFService/?wsdl");
} catch (Exception $e) {
echo $e->getMessage(), "\n";
exit();
}
在初始测试期间,遇到以下错误:
警告: SoapClient的:: SoapClient的(HTTP:// serveripaddress:8000 / WCFService / WSDL) [soapclient.soapclient]:无法打开流:HTTP请求失败! 在第7行的C:\ inetpub \ wwwroot \ Sites \ www.myurl.com \ WCF-Test.php
警告:SoapClient :: SoapClient()[soapclient.soapclient]:I / O 警告:无法加载外部实体 “http:// serveripaddress:8000 / WCFService /?wsdl”in 第7行的C:\ inetpub \ wwwroot \ Sites \ www.myurl.com \ WCF-Test.php
SOAP-ERROR:解析WSDL:无法加载 'http:// serveripaddress:8000 / WCFService /?wsdl':无法加载 外部实体“http:// serveripaddress:8000 / WCFService /?wsdl”
经过一番摆弄后,错误减少到以下几点:
SOAP-ERROR:解析WSDL:无法加载 'http:// serveripaddress:8000 / WCFService /?wsdl':无法加载 外部实体“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:解析架构:无法从中导入架构 的 'http:// serveripaddress:8000 / WCFService / XSD = xsd0'
我认为手头的问题与服务的“可见性”,客户端以及可能的权限有关。
在阅读了几十篇文章之后,我仍然无法找到解决这个问题的方法。
非常感谢任何帮助。
非常感谢提前。
答案 0 :(得分:0)
如果您正在托管WCF服务以供PHP客户端访问,您需要拥有一个平面的wsdl。关于如何生成Flat Wsdl,请点击以下链接:
作为.NET 4.5的一部分,在框架中可以使用相同的功能。希望能帮到你。
答案 1 :(得分:0)
如果您知道您正在使用.NET WCF服务,您只需将从.svc?wsdl下载wsdl的位置更改为.svc?singleWsdl,WCF服务器将为您处理递归/链接工作
答案 2 :(得分:0)
这可能是答案,.net有默认配置发生此错误。 https://bugs.php.net/bug.php?id=47761