【发布时间】:2011-12-06 05:22:40
【问题描述】:
此问题涉及使用托管在 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 和带有域的机器名,如下所示:
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" 在 C:\inetpub\wwwroot\Sites\www.myurl.com\WCF-Test.php 在第 7 行
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: Parsing Schema: can't import schema from 'http://serveripaddress:8000/WCFService/?xsd=xsd0'
我认为当前的问题与服务的“可见性”、客户端以及可能的权限有关。
看了几十篇帖子,还是没找到解决这个问题的办法。
我们将不胜感激。
非常感谢。
【问题讨论】: