Zend_SOAP_CLIENT Ошибка вызова ASP.NET Веб -сервис: '… не установлен на экземпляр объекта'

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

Вопрос

Я пытаюсь использовать Zend_SOAP_CLIENT для связи с веб -службой ASP.NET. Вот мой клиент звонок:

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

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

Однако это всегда дает мне ошибку:

System.NullReferenceException: ссылка на объект не установлен на экземпляр объекта. at service.userdetails (userdetail userdetail)

Некоторые гугливы показали, что это довольно распространенная проблема. Казалось, наиболее распространенным решением было передавать параметры как массив, поэтому я попытался:

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

Но это дало ту же ошибку. Я также попытался пропустить параметры как объект stdclass, гнездя массив в другом с «параметром» в качестве ключа, и несколько других вещей, но ошибка всегда одинакова.

У меня есть код ASP для самого веб -службы, соответствующий метод:

public Result UserDetails(UserDetail UserDetail) {

    [some stuff]

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

Ошибка вызвана вызовом GeneratedATA ().

Я предполагаю, что метод userdetails становится нулевым вместо моего объекта в качестве параметра, но я не уверен, как я должен вызывать метод, или как я могу отлаживать это дальше. Большинство примеров Zend_SOAP_CLIENT, которые я обнаружил, кажется, используют WSDL, чего не является этой службой; Не уверен, что это актуально. Любая помощь оценена!

Это было полезно?

Решение

В конце концов я решил это:

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

$client->UserDetails($userDetails);

Кажется, ASP.NET ожидает (и возвращает) параметры будут вложены в объект/массив с тем же именем, что и вызываемый метод.

Другие советы

Если у вас есть возможность изменить код ASP.NET, я бы предложил вам попробовать реализацию метода userDetails без параметров, чтобы убедиться, что код не сломан.

Затем я бы создал потребительский метод в ASP.NET, отлаживал HTTP-Request и посмотрел, как userDetail-Object сериализован/разбит в форме массива. Тогда это «просто» вопрос создания аналогичного HTTP -запроса от PHP.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top