NuSOAP: İçerik-tipi talebi değiştirmek nasıl?

5 Cevap php

. NET WCF webcoder tüketen zaman şu yanıtı (hata) olsun:

Unsupported HTTP response status 415 Cannot process the message because the content type 'text/xml; charset=UTF-8' was not the expected type 'application/soap+xml; charset=utf-8'.

Nasıl içerik türünü nasıl değiştirebilirim? Ben NuSOAP forumları / docs bulamıyorum, ya da ben bir şey bakan olabilir ....

5 Cevap

ben bu eski bir yazı olduğunu biliyorum, ama bir cevap arıyorsanız bu sayfa için koştu.

application/soap+xml is the content-type passed when using SOAP 1.2, text/xml is used with SOAP 1.1,

böyle bir şey hile yapmak gerekir,

$client = new SoapClient("some.wsdl", array('soap_version' => SOAP_1_1));

NuSOAP kütüphanede hafif bir ihmal var gibi görünüyor ... Bu içerik başlıkları "text / xml" ZORUNLU varsayar, böylece istemcisi, uygulama / soap + xml başlıklarını çıktılar bir servise bağlanmak için çalışıyor eğer ' ll gibi hataları ile sonuna kadar:

Tepki değil türü text / xml of: application / sabun + xml; charset = utf-8

Bunu test etmek için, ben bir SOAP hizmetine giriş yapmak için kullanılan aşağıdaki küçük işlevi desen, yararlanabilir. Istemci nesnesi yazdırmak, unutmayın! Aslında bakmak için bir sonuç alamayabilirsiniz!

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
}

Ben $ sonucu basılmış, ben hiçbir şey yok, ama ben $ istemci nesnesi basılmış zaman, ben hata olduğunu görebiliyordu.

Ben uygulanan küçük kesmek hattı 7500 civarında, nusoap.php dosyasında oldu bu arayın eğer deyimi.:

if (!strstr($headers['content-type'], 'text/xml')) {
    $this->setError('Response not of type text/xml: ' . $headers['content-type']);
    return false;
}

Ve bu şekilde değiştirin:

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;
}

Tüm bu (geçerli bir xml başlığı olan) bir "uygulama / sabun + xml" başlığı sorunu yanıtları işlemek NuSOAP sağlar olduğunu gelmez.

Böyle webservices ile NuSOAP akışları kodlama belirtebilirsiniz:

$client = new nusoap_client($params);
$client->soap_defencoding = 'UTF-8';

Ben de bu sıkışmış oldu.

The secret is in the web.config Change wsHttpBinding to basicHttpBinding

Şöyle:

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

Hope that helps! /Erik

Bu benim için çalıştı:

$ Client = new nusoap_client ($ params);

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

Doğru olarak işaretli olduğu cevabı nedenle NuSOAP değil uygun cevabı için değildir.