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

При использовании веб-службы .NET WCF я получаю следующий ответ (ошибку):

Неподдерживаемый статус ответа HTTP 415 Невозможно обработать сообщение, поскольку тип содержимого 'text / xml; charset = UTF-8 'не был ожидаемым типом' application / soap + xml; charset = utf-8 '.

Как мне изменить тип контента? Я не могу найти его на форумах / в документации NuSOAP, или я могу что-то упустить ...


person jao    schedule 03.06.2009    source источник


Ответы (5)


Я знаю, что это старый пост, но я зашел на эту страницу в поисках ответа.

application/soap+xml - это тип содержимого, передаваемый при использовании SOAP 1.2, text/xml используется с SOAP 1.1,

что-то вроде этого должно помочь,

$client = new SoapClient("some.wsdl", array('soap_version' => SOAP_1_1));
person mark moore    schedule 06.11.2009

Вы можете указать кодировку потоков NuSOAP с помощью таких веб-сервисов:

$client = new nusoap_client($params);
$client->soap_defencoding = 'UTF-8';
person Franck    schedule 23.11.2011
comment
Вау, это было легко. Спасибо! - person Adam F; 18.03.2013

Похоже, что в библиотеке NuSOAP есть небольшое упущение ... предполагается, что заголовки содержимого ДОЛЖНЫ быть «text / xml», поэтому, если ваш клиент пытается подключиться к службе, которая выводит заголовки application / soap + xml, вы: закончится ошибками, например:

Ответ не типа text / xml: application / soap + xml; charset = 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 (i.e. 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:

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).

person Everett    schedule 16.02.2010

Я тоже зациклился на этом.

Секрет в web.config. Измените wsHttpBinding на basicHttpBinding.

Вот так:

<endpoint address="" binding="basicHttpBinding" contract="YourProject.View.Whatever.IYourService">

Надеюсь, это поможет! / Эрик

person Community    schedule 04.06.2009
comment
Я не могу изменить его на basicHttpBinding, так как нам нужен wsHttpBinding для наших сертификатов. - person jao; 05.06.2009

Это сработало для меня:

$ client = новый nusoap_client ($ params);

$ client-> soap_defencoding = 'UTF-8';

Ответ, отмеченный как правильный, не для NUSOAP, поэтому не является подходящим ответом.

person Lau_gu    schedule 23.01.2014