0

会社名、ユーザー名、パスワードを3つのパラメーターとして使用するログイン操作を使用するWCFWebサービスがあります。このサービスと通信するためのPHPクライアントアプリを作成しようとしています。ログイン操作に何を渡しても、次のエラーが発生します。

OperationFormatter encountered an invalid Message body. Expected to find node type 'Element' with name 'Login' and namespace ''. Found node type 'Element' with name 'parameters' and namespace ''

私のクライアントアプリ:

<?php
        try
        {
            $client = new SoapClient("https://somewhere.com/DataServiceRxPublic.svc?wsdl");

            //$params = array(
            //        'parameters' => array(
            //                'Param' => array(
            //                        array('Name' => 'loginCompany', 'Value' => 'XXX'),
            //                        array('Name' => 'loginId', 'Value' => 'XXX'),
            //                        array('Name' => 'loginPwd', 'Value' => 'XXX')
            //)));

            //$params = array(
            //        'Login' => array(
            //                array('Name' => 'loginCompany', 'Value' => 'XXX'),
            //                array('Name' => 'loginId', 'Value' => 'XXX'),
            //                array('Name' => 'loginPwd', 'Value' => 'XXX')
            //));

            //$params = array(
            //        'Login' => array(
            //                'parameters' => array(
            //                       array('Name' => 'loginCompany', 'Value' => 'XXX'),
            //                        array('Name' => 'loginId', 'Value' => 'XXX'),
            //                        array('Name' => 'loginPwd', 'Value' => 'XXX')
            //)));

            //$params = array(
            //        array('Name' => 'loginCompany', 'Value' => 'XXX'),
            //        array('Name' => 'loginId', 'Value' => 'XXX'),
            //        array('Name' => 'loginPwd', 'Value' => 'XXX')
            //);

            $params = array(
                    'loginCompany' => 'XXX',
                    'loginId' => 'XXX',
                    'loginPwd' => 'XXX'
            );

            $obj->loginCompany = 'XXX';
            $obj->loginId = 'XXX';
            $obj->loginPwd = 'XXX';

            //$result = $client->Login($obj);
            //$result = $client->Login($params);
        }
        catch (Exception $e)
        {
                print_r($e);
        }
    }
?>

$ paramsは、オンラインでいくつかの異なる例に基づいたさまざまな配列順列です。

どんな助けでも大歓迎です。

4

3 に答える 3

0

エラーメッセージは、「ログイン」という名前の何かがあったはずなのに、「パラメータ」という名前が付けられたことを示しています。

SoapUIを入手し、WSDLを使用して、ここで説明した手順に従って、実際に送信しているものをデバッグします。サービスが期待するものと送信しているものを比較できない場合、これは非常に多くの試行錯誤になります。

さらに外部のヘルプが必要な場合は、WSDLリソースが必要になります。それがないと、どのリクエスト構造が予期されているかは誰にもわかりません。

于 2012-12-17T23:34:08.640 に答える
0

不一致のsoapヘッダーを置き換えるために、SOAPClientを拡張し、__ doRequest()メソッドをオーバーライドする必要があることがわかりました。

于 2012-12-18T23:16:06.990 に答える
0

サーバー側のサービス名前空間を変更することで、このエラーを修正することができました。

[ServiceContract(Name="Service", Namespace = "https://sample.eu")]

以前は名前空間が空でした。

于 2016-08-23T12:13:12.707 に答える