【发布时间】:2014-03-07 19:38:38
【问题描述】:
我正在使用SSRS SDK for PHP
PHP 5.4 版
网络服务器:Centos 6.4
MSSQL Server 2008 R2
当我制作时
$ssrs_report = new SSRSReport(new Credentials(UID, PASWD), SERVICE_URL);
我收到以下错误
Fatal error: Uncaught SoapFault exception: [WSDL] SOAP-ERROR: Parsing WSDL:
Couldn't load from 'http://172.16.4.63/ReportServerURL/Pages/ReportViewer.aspx?%2fTestFolder%2ftestClaimHdr&rs:Command=Render/ReportExecution2005.asmx?wsdl' :
Premature end of data in tag html line 1 in /var/www/emilio/app/Libraries/SSRSReport/bin/SSRSReport.php:196
Stack trace: #0 /var/www/emilio/app/Libraries/SSRSReport/bin/SSRSReport.php(196):
SoapClient->SoapClient('http://172.16.4...', Array) #1 /var/www/emilio/SSRS/index.php(12):
SSRSReport->SSRSReport(Object(Credentials), 'http://172.16.4...') #2 {main} thrown in
/var/www/emilio/app/Libraries/SSRSReport/bin/SSRSReport.php on line 196
我正在寻找如何解决它并通过肥皂获取报告(SSRS SDK for PHP)。
我尝试使用file_get_content() 和curl 都运行良好,然后不是连接问题,我有
- 已启用 Soap 客户端
- allow_url_fopen 开启
这是sdk调用soap服务的那一行
$executionServiceUrl="http://172.16.4.63/ReportServerURL?%2fTestFolder%2ftestClaimHdr&rs:Command=Render/ReportExecution2005.asmx?wsdl";
$options = array ( 'login' => 'xxxx\\xxxx', 'password' => 'xxxx', )
$this->_soapHandle_Exe = new SoapClient($executionServiceUrl, $options);
添加
try {
$this->_soapHandle_Exe = new SoapClient($executionServiceUrl, $options);
} catch (Exception $e) {
var_export(libxml_get_last_error());
}
我得到以下数组:
LibXMLError::__set_state(array(
'level' => 3,
'code' => 77,
'column' => 43325,
'message' => 'Premature end of data in tag html line 1',
'file' => 'http://172.16.4.63/ReportServerURL?%2fTestFolder%2ftestClaimHdr&rs:Command=Render/ReportExecution2005.asmx?WSDL',
'line' => 1,
)
级别 3 = XML_ERR_FATAL = 3:致命错误
代码 77 = XML_ERR_TAG_NOT_FINISHED = 77 : 77
我已经在 SSRS SERVER 中设置了Basic authentication
更新
正如@jwhaley58 所说,我改为:
define("SERVICE_URL", "http://172.16.4.63/ReportServerURL");
$ssrs_report = new SSRSReport(new Credentials(UID, PASWD), SERVICE_URL);
$ssrs_report->LoadReport2('testClaimHdr',NULL);
我得到:
Fatal error: Uncaught exception 'SSRSReportException' in
/var/www/emilio/app/Libraries/SSRSReport/bin/SSRSReport.php:590 Stack trace: #0
/var/www/emilio/app/Libraries/SSRSReport/bin/SSRSReport.php(326):
SSRSReport->ThrowReportException(Object(SoapFault)) #1 /var/www/emilio/SSRS/index.php(15):
SSRSReport->LoadReport2('testClaimHdr', NULL) #2 {main} thrown in
/var/www/emilio/app/Libraries/SSRSReport/bin/SSRSReport.php on line 590
【问题讨论】:
-
您可以尝试将其指向 ReportService2010 端点而不是 2005 端点?
-
@kyzen 我在 2010 上尝试过,结果相同,在浏览器中使用 url
http://172.16.4.63/ReportServerURL?%2fTestFolder%2ftestClaimHdr&rs:Command=Render/ReportExecution2005.asmx?wsdl,file_get_content和curl在 2005 上工作正常 -
今晚晚些时候我会再次检查这个问题 - 大约一年前我遇到了同样的问题,并设法让它以某种方式工作。如果我仍然有代码,我会回来发布我必须做的事情才能让它与 SSRS 2012 一起工作。
-
我正在查看您提供的代码,我可能读错了,但看起来您正试图在执行 url 中明确定义您所追求的报告。如果这实际上是您正在做的事情,我相信解决方法是只定义您要连接的报告库,因此对于您的示例,url 应该是
http://172.16.4.63/ReportServer/。建立连接后,您将使用 LoadReport2 函数指定您需要的报告。我有点理解只是因为我看不到你的实现。 -
@jwhaley58 我按你说的改了,出现新的错误,我把报告名称放在方法LoadReport2中,把历史id的NULL作为第二个参数
标签: php soap reporting-services ssrs-2008 ssrs-2008-r2