При использовании веб-службы .NET WCF я получаю следующий ответ (ошибка):
Неподдерживаемый статус ответа HTTP 415 Не удается обработать сообщение, поскольку тип содержимого «text / xml; charset = UTF-8 'не был ожидаемым типом' application / soap + xml; кодировка = UTF-8' .
Как изменить тип контента? Я не могу найти его на форумах / документах NuSOAP, или я мог бы что-то игнорировать …
Я знаю, что это старый пост, но я зашел на эту страницу, ища ответ.
application/soap+xml
– это тип содержимого, переданный при использовании SOAP 1.2, text/xml
используется с SOAP 1.1,
что-то вроде этого должно сделать трюк,
$client = new SoapClient("some.wsdl", array('soap_version' => SOAP_1_1));
Вы можете указать кодировку потоков NuSOAP с помощью таких веб-сервисов:
$client = new nusoap_client($params); $client->soap_defencoding = 'UTF-8';
Похоже, есть небольшое упущение в библиотеке NuSOAP … предполагается, что заголовки содержимого ДОЛЖНЫ быть «text / xml», поэтому, если ваш клиент пытается подключиться к службе, которая выводит заголовки приложений / мыла + xml, ll заканчиваются такими ошибками, как:
Ответ не типа text / xml: application / soap + xml; кодировка = UTF-8
Чтобы проверить это, вы можете воспользоваться следующим небольшим шаблоном функций, который я использовал для входа в службу SOAP. Помните, распечатайте клиентский объект! На самом деле вы не можете получить результат!
require_once('path/to/downloaded/libraries/nusoap.php'); var $endpoint = 'https://somedomain.com/path/to/soap/server/Login'; var $client; // the soapclient object function SOAP_Login() { $this->client = new soapclient($this->endpoint); $err = $this->client->getError(); if ($err) { // Display the error echo '<p><b>SOAP Constructor error: ' . $err . '</b></p>'; exit; // At this point, you know the call that follows will fail } $params = array( 'some' => 'thing.. depends on what the WSDL expects' ); $result = $this->client->call('someFunction', $params); print_r($result); // Without the fix, this prints nothing (ie false) !!! print_r($this->client); // Instead, look at the state of the client object, specifically error_str and debug_str }
Когда я напечатал свой $ result, я ничего не получил, но когда я распечатал объект $ client, я мог видеть, что были ошибки.
Небольшой взлом, который я реализовал, был в файле nusoap.php, вокруг строки 7500. Ищите этот if-statement:
if (!strstr($headers['content-type'], 'text/xml')) { $this->setError('Response not of type text/xml: ' . $headers['content-type']); return false; }
И измените это на это:
if (!strstr($headers['content-type'], 'text/xml') && !strstr($headers['content-type'], 'application/soap+xml') ) { $this->setError('Response not of type text/xml: ' . $headers['content-type']); return false; }
Все это позволяет NuSOAP обрабатывать ответы, которые вызывают заголовок «application / soap + xml» (который является допустимым заголовком xml).
Я тоже застрял на этом.
Секрет в web.config. Замените wsHttpBinding на basicHttpBinding.
Вот так:
<endpoint address="" binding="basicHttpBinding" contract="YourProject.View.Whatever.IYourService">
Надеюсь, это поможет! / Erik
Это сработало для меня:
$ client = new nusoap_client ($ params);
$ client-> soap_defencoding = 'UTF-8';
Ответ, который отмечен как правильный, не для NUSOAP, поэтому не соответствующий ответ.