Неперехваченное исключение SoapFault: [WSDL] ОШИБКА SOAP: Синтаксический анализ WSDL


Я использую SSRS SDK для PHP

Версия PHP 5.4

Веб-сервер: Centos 6.4

MSSQL Сервер 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

Я ищу, как это исправить и получить отчет с помощью soap(SSRS SDK для 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,
)

В соответствии с xmlerror из libxml2

Уровень 3 = XML_ERR_FATAL = 3: Фатальная ошибка

Код 77 = XML_ERR_TAG_NOT_FINISHED = 77: 77

Я уже установил Базовую аутентификацию в SSRS СЕРВЕР

Обновление

Как сказал @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
Author: Emilio Gort, 2014-03-07

1 answers

Некоторые ошибки, которые я обнаружил только методом проб и ошибок, - это некоторые проблемы с конфигурацией. На сервере, на котором запущена служба сервера отчетов, убедитесь, что в вашем файле rsreportserver.config были изменены, чтобы разрешить базовую аутентификацию. По умолчанию, если я правильно понимаю, ему требуется более надежный тип подключения, но sdk требует, чтобы вы разрешали передавать простые имена и пароли. Это означает, что необходимо добавить к вашим методам аутентификации в конфигурация.

Так, например,

В C:\Program Файлы\Microsoft SQL Server\MSRS11.1\Службы отчетов\ReportServer\rsreportserver.config (Отличается для сервера и версии, но вы поняли идею.)

<Authentication>
    <AuthenticationTypes>
        <RSWindowsNTLM/>
        <RSWindowsBasic/> ##you need to add this one##
    </AuthenticationTypes>
    <RSWindowsExtendedProtectionLevel>Off</RSWindowsExtendedProtectionLevel>
</Authentication>

IIRC вам придется перезапустить службу, чтобы это вступило в силу.

Кроме того, если вы пытаетесь выполнить визуализацию, в некоторых файлах шаблонов, используемых для отображения заголовков, есть место внизу, что не позволит вам отображать их в формате Excel, PDF и т. Д. если только это не было исправлено с тех пор, как я работал над этим.

Я просматриваю предоставленный вами код, возможно, я читаю его неправильно, но похоже, что вы пытаетесь явно определить отчет, который вам нужен, в URL-адресе выполнения. Если это на самом деле то, что вы делаете, я полагаю, что исправлением будет только определение базы отчетов, к которой вы подключаетесь, поэтому для вашего примера URL-адрес должен быть http://172.16.4.63/ReportServer/. После того, как это соединение будет установлено, вы будете использовать функцию LoadReport2, чтобы указать, какой отчет вы необходимость.

Наконец, там, где у вас есть название отчета, похоже, у вас есть подкаталог под названием testfolder? если это все еще так, вам потребуется, чтобы имя вашего отчета было "/TestFolder/testclaimhdr" при вызове LoadReport2.

Надеюсь, что все это поможет.

 1
Author: jwhaley58, 2014-03-13 19:08:11