2

Zend_Soap_Client を使用して ASP.net Web サービスと通信しようとしています。これが私のクライアントコールです:

$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: オブジェクト参照がオブジェクトのインスタンスに設定されていません。Service.UserDetails (UserDetail UserDetail) で

いくつかのグーグルは、これが非常に一般的な問題であることを明らかにしました. 最も一般的な解決策は、パラメーターを配列として渡すことであるように思われたので、試しました:

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

しかし、これは同じエラーを出しました。また、paramsをstdClassオブジェクトとして渡し、「params」をキーとして配列を別の配列にネストし、その他いくつかのことを試みましたが、エラーは常に同じです。

Web サービス自体の ASP コードがあります。関連するメソッドは次のとおりです。

public Result UserDetails(UserDetail UserDetail) {

    [some stuff]

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

このエラーは、GenerateData() 呼び出しが原因で発生します。

UserDetails メソッドは、オブジェクトではなくパラメーターとして null を取得していると思いますが、メソッドを呼び出す方法や、これをさらにデバッグする方法がわかりません。私が見つけた Zend_Soap_Client の例の大部分は WSDL を使用しているようですが、このサービスはそうではありません。それが関連しているかどうかはわかりません。どんな助けでも大歓迎です!

4

2 に答える 2

2

私は最終的にこれを解決しました:

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

$client->UserDetails($userDetails);

ASP.net は、呼び出されるメソッドと同じ名前のオブジェクト/配列にパラメーターがネストされることを期待 (および返す) ようです。

于 2010-11-17T20:27:52.710 に答える
0

asp.net コードを変更する可能性がある場合は、コードが壊れていないことを確認するためだけに、パラメーターなしで UserDetails メソッドの実装を試すことをお勧めします。

次に、asp.net でコンシューマ メソッドを作成し、http リクエストをデバッグして、userdetail オブジェクトがどのように配列形式でシリアル化/分解されるかを確認します。次に、php から同様の http リクエストを作成するだけです。

于 2010-11-15T13:07:24.690 に答える