Intereting Posts
Почему Windows должна поддерживать имена файлов `utf8_decode` для` file_get_contents`? Преобразовать недействительный json в действительный json Drupal hook_url_inbound_alter не меняет мой URL как экспортировать в phpmyadmin не включать столбец идентификатора (AUTO_INCREMENT coloumn) Использование файлов YAML в качестве поставщика данных в PHPUnit (CIUnit) Ошибка входа в систему с помощью tank_auth (библиотека аутентификации codeigniter) Выяснив, почему я получаю ошибку ID ресурса №5 Идентификатор увеличения заказа в Magento Magento – добавить пользовательский блок с помощью настраиваемого модуля на странице корзины покупок Как получить значки сайта с PHP? почему ini_set ('session.gc_maxlifetime', 60) не работает? Одинарные и двойные кавычки вместе как значение атрибута HTML? Ошибка HTTP-запроса! HTTP / 1.0 403 Запрещено Как использовать значения формы cURL для POST в форме с помощью JS PHP-сессии с отключенными кукисами, работает ли это?

Исключить исключение SoapFault: SOAP-ERROR: анализ WSDL

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

Версия PHP 5.4

WebServer: 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 для PHP ).

Я попытался использовать file_get_content() и curl и оба работали нормально, тогда это не проблемы с подключением, у меня есть

  • Мыльный клиент включен
  • allow_url_fopen включен

это линия, в которой вызов sdk вызывает мыло

 $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 SERVER

Обновить

Поскольку @ 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 

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

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

В C: \ Program Files \ Microsoft SQL Server \ MSRS11.1 \ Reporting Services \ ReportServer \ rsreportserver.config (различается для сервера и версии, но вы получаете эту идею).

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

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

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

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

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

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