NuSOAP: как изменить тип содержимого запроса?

При использовании веб-службы .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, поэтому не соответствующий ответ.