I am new to SOAP and getting this error

" RESULTS: Array ( [faultcode] => Client [faultactor] => [faultstring] => Could not authenticate SOAP request: Could not retrieve authentication credentials from SOAP header [detail] => )"

The cURL PHP extension is required for NuSOAP to make a connection over SSL

require_once "nusoap/nusoap.php";
* @file
* Example code to access the Omniture Web Services for Administration Console
* and retrieve the current token count.
* @author Omniture <clientcare@omniture.com>
* @copyright 2006 Omniture, Inc. All Rights Reserved
// reference the downloaded WSDL
define('WSDL_DOCUMENT', "./Omniture_wsdl.xml");

// seed random
list($usec, $sec) = explode(' ', microtime());
srand((float) $sec + ((float) $usec * 100000));

// SOAP login credentials
$username = "provided";

$secret = '*provided;

function get_header($username, $secret)
// Create a unique identifier, a.k.a. nonce.
// This example is used for simplicity in demonstration. A method
// that guarantees uniqueness should be used in a production environment.

$nonce = md5(rand());
$created = date("Y-m-d H:i:s");
$combo_string = $nonce . $created . $secret;

$sha1_string = sha1($combo_string);

$password = base64_encode($sha1_string);

$headers = '<wsse:Security SOAP-ENV:mustUnderstand="1">

<wsse:UsernameToken wsu:Id="User">
<wsse:Password Type="http://docs.oasis-open.org/wss/2004/01/oasis-

return $headers;


// Create nuSOAP client
$client = new soapclient(WSDL_DOCUMENT, TRUE);

// handle client setup error
if($err = $client->getError()) {
echo "ERROR:".$err."\n";
// call Omniture Web services function
$result = $client->call('Company.GetTokenCount', // function name
array('auth_key' => $username), // parameters
'http://omniture.com', // namespace
'', // SOAP Action

get_header($username, $secret)); // security header
// Display results
echo "RESULTS:\n";
echo "\n";


Hi everybody

I have found a way to do a personal authentication on a web service. In the soap header message, you can set nodes with that information. So, each time the client consume a web service, he/she must athuenticate him/her self. Now, the problem is that don't work forme. T-T

Check the exaple at the bottom, http://msdn.microsoft.com/es-es/library/8728chd5.aspx

Now, I did a web service that brings the user name seted inside the header, the problem is that is not founded.

This. is my web service:


Imports System.Web.Services
Imports System.Web.Services.Protocols
Imports System.ComponentModel

' Define a SOAP header by deriving from the SoapHeader base class.
Public Class Header : Inherits SoapHeader
    Public Username As String
    Public Password As String
End Class

' To allow this Web Service to be called from script, using ASP.NET AJAX, uncomment the following line.

<System.Web.Script.Services.ScriptService()> _
<System.Web.Services.WebService(Namespace:="http://tempuri.org/")> _
<System.Web.Services.WebServiceBinding(ConformsTo:=WsiProfiles.BasicProfile1_1)> _
<ToolboxItem(False)> _
Public Class MyWebService
    ' Add a member variable of the type deriving from SoapHeader.
    Public myHeaderMemberVariable As Header

    ' Apply a SoapHeader attribute.
    <WebMethod(), SoapHeader("myHeaderMemberVariable")> _
    Public Function MyWebMethod() As String
        ' Process the SoapHeader.
        Return myHeaderMemberVariable.Username
    End Function
End Class

My test file:


<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
        <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
        <title>Probando los Web Services desde PHP</title>
    $wsdl = 'http://localhost/ws/MyWebService.asmx?WSDL';
    $method = 'MyWebMethod';
    $params = array();
    $client = new nusoap_client($wsdl, 'wsdl');
    //$client->response_timeout = 600;

    $client->soap_defencoding = 'UTF-8';
    $client -> setHeaders('   
    $err = $client->getError();
    //echo "<br/> proxyport =".htmlspecialchars($client->$proxyhost)."<br/>";

    if ($err) {
        echo '<h2>Error del contructor</h2><pre>' . $err . '</pre>';
        echo '<h2>Debug:</h2><pre>' . htmlspecialchars($client->getDebug(), ENT_QUOTES) . '</pre>';
    $result = $client->call($method, $params);

    if ($client->fault) {
        echo '<h2>Fault</h2><pre>'; print_r($result); echo '</pre>';
    } else {
        $err = $client->getError();
        if ($err) {
            echo '<h2>Error</h2><pre>' . $err . '</pre>';
        } else {
            echo '<h2>Result</h2><pre>'; print_r($result); echo '</pre>';
    echo '<h2>Request</h2><pre>' . htmlspecialchars($client->request, ENT_QUOTES) . '</pre>';

My Issue 0_o


[faultcode] => soap:Server
[faultstring] => System.Web.Services.Protocols.SoapException: Server was unable to process request. ---> System.NullReferenceException: Object reference not set to an instance of an object.

at meals_ws_application.MyWebService.MyWebMethod() in C:\Documents and Settings\ingenieria\Mis documentos\Visual Studio 10\Projects\ws\meals-ws-application\MyWebService.asmx.vb:line 25
--- End of inner exception stack trace ---

[detail] =>


POST /ws/MyWebService.asmx HTTP/1.0

Host: localhost
User-Agent: NuSOAP/0.7.3 (1.114)
Content-Type: text/xml; charset=UTF-8
SOAPAction: "http://tempuri.org/MyWebMethod"

Content-Length: 554

<?xml version="1.0" encoding="UTF-8"?><SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/" xmlns:ns8315="http://tempuri.org"><SOAP-ENV:Header>

</SOAP-ENV:Header><SOAP-ENV:Body><MyWebMethod xmlns="http://tempuri.org/"></MyWebMethod></SOAP-ENV:Body></SOAP-ENV:Envelope>

I just want that the web service return myUserName, that's it T-T
If it works I could set some encripted information. All your posts are wellcome.


Jorge Andrés Cañón Sierra
Ingenierio de Sistemas

This article has been dead for over six months. Start a new discussion instead.