Zend_Soap_Client Fehler ASP.net Web-Service Aufruf: ‚... nicht auf eine Instanz eines Objekts festgelegt‘

StackOverflow https://stackoverflow.com/questions/4184470

Frage

Ich versuche Zend_Soap_Client zu verwenden, um mit einem ASP.net Web-Service zu kommunizieren. Hier ist mein Client Aufruf:

$client = new Zend_Soap_Client(null, array(
    'location' => 'http://example.com/service.asmx',
    'uri' => 'http://example.com/'
));

$user = new UserDetail();
$result = $client->UserDetails($user);

Doch das gibt mir immer den Fehler:

System.NullReferenceException: Objektverweis nicht auf eine Instanz eines Objekts festgelegt. bei Service.UserDetails (UserDetail UserDetail)

enthüllen einige googeln, dass dies ein recht häufiges Problem. Die häufigste Lösung schien die Parameter zu sein als ein Array zu übergeben, so dass ich versucht:

$result = $client->UserDetails(array('UserDetail' => $user));

, aber das gab den gleichen Fehler. Ich habe auch versucht die params als stdClass Objekt übergeben, das Array in einem anderen Verschachtelung mit ‚params‘ als Schlüssel, und ein paar andere Dinge, aber der Fehler ist immer das gleiche.

ich den ASP-Code für den Web-Service haben sich die entsprechende Methode ist:

public Result UserDetails(UserDetail UserDetail) {

    [some stuff]

    Hashtable ht = new Hashtable();
    ht = UserDetail.GenerateData();
}

wird der Fehler durch die GenerateData () Aufruf verursacht.

Ich gehe davon aus dem Userdetail Methode null wird immer statt meinem Objekts als Parameter, aber ich bin nicht sicher, wie ich soll die Methode anrufen, oder, wie ich diese weiter debuggen kann. Die Mehrheit der Zend_Soap_Client Beispiele, die ich gefunden habe, scheint WSDL zu verwenden, die in diesem Dienst ist nicht; nicht sicher, ob das relevant ist. Jede Hilfe zu schätzen!

War es hilfreich?

Lösung

Ich löste schließlich dieses mit:

$userDetails = new UserDetails();
$userDetails->UserDetail = $user;

$client->UserDetails($userDetails);

es scheint ASP.net erwartet (und kehrt zurück) params in einem Objekt / Array mit dem gleichen Namen verschachtelt werden, wie die Methode aufgerufen wird.

Andere Tipps

Wenn Sie eine Möglichkeit haben, die asp.net Code zu ändern Ich würde Sie eine Implementierung der Methode Userdetails ohne Parameter vorschlagen versuchen nur, um sicherzustellen, dass der Code nicht gebrochen ist.

Ich würde dann eine Verbraucher-Methode in asp.net erstellen, debuggen die http-Anfrage und sehe, wie das userdetail-Objekt serialisiert / aufgeschlüsselt in Array-Form. Dann ist es „nur“ eine Frage der eine ähnliche HTTP-Anforderung von PHP zu erstellen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top