Php 带有.NET客户端的Zend Soap服务器&x27;未知错误';

Php 带有.NET客户端的Zend Soap服务器&x27;未知错误';,php,soap,zend-framework2,Php,Soap,Zend Framework2,我已经使用Zend Soap服务器实现了一个web服务 使用PHP客户端(Zend客户端)连接到它,它可以正常工作。然而,对于.NET客户端,它返回了一个毫无帮助的错误“未知错误” 错误日志显示: PHP Notice: Array to string conversion in /path/to/app/vendor/zendframework/zend-soap/Zend/Soap/Server.php on line 881 有人遇到过这个问题吗?这是我的服务器代码: public f

我已经使用Zend Soap服务器实现了一个web服务

使用PHP客户端(Zend客户端)连接到它,它可以正常工作。然而,对于.NET客户端,它返回了一个毫无帮助的错误“未知错误”

错误日志显示:

PHP Notice:  Array to string conversion in /path/to/app/vendor/zendframework/zend-soap/Zend/Soap/Server.php on line 881
有人遇到过这个问题吗?这是我的服务器代码:

public function server()
{
    // Soap Server options
    $options = array(
        'classmap' => array(
            'TransactionType' => 'Acme\TransactionType',
        ),
    );

    // Create Soap Server
    $server = new Server(public_path('file.wsdl'), $options);

    // Bind Class to Soap Server
    $server->setClass('Acme\Transaction');

    // Handle request
    $server->handle();

}

public function wsdl()
{
    // Output WSDL
    $autodiscover = new AutoDiscover(new ArrayOfTypeSequence());
    $autodiscover->setClass('Acme\Transaction')
                 ->setUri(\URL::route('server'))
                 ->setServiceName('AcmeTransactions');
    $wsdl = $autodiscover->generate();

    $wsdl->dump(public_path('file.wsdl'));
}
Acme/事务如下所示:

class Transaction extends \Eloquent
{

 /**
 * The database table used by the model.
 *
 * @var string
 */
protected $table = 'transactions';

/**
 * The attributes that aren't mass assignable.
 *
 * @var array
 */
protected $guarded = array();

/**
 * Saves a TransactionType to the database.
 *
 * @param TransactionType $transaction
 *
 * @return bool
 */
public static function saveTransaction(TransactionType $transaction)
{
    /**
     * @var Transaction $model
     */
    $model = new self();
    $model->fill(
        array(
            'transaction_id'       => $transaction->transaction_id,
            'transaction_number'   => $transaction->transaction_number,
            // ...
        )
    );

    return $model->save();
}

}
class TransactionType {

/**
 * @var string
 */
public $transaction_id = '';

/**
 * @var string
 */
public $transaction_number = '';

// ...

}
Acme/TransactionType如下所示:

class Transaction extends \Eloquent
{

 /**
 * The database table used by the model.
 *
 * @var string
 */
protected $table = 'transactions';

/**
 * The attributes that aren't mass assignable.
 *
 * @var array
 */
protected $guarded = array();

/**
 * Saves a TransactionType to the database.
 *
 * @param TransactionType $transaction
 *
 * @return bool
 */
public static function saveTransaction(TransactionType $transaction)
{
    /**
     * @var Transaction $model
     */
    $model = new self();
    $model->fill(
        array(
            'transaction_id'       => $transaction->transaction_id,
            'transaction_number'   => $transaction->transaction_number,
            // ...
        )
    );

    return $model->save();
}

}
class TransactionType {

/**
 * @var string
 */
public $transaction_id = '';

/**
 * @var string
 */
public $transaction_number = '';

// ...

}

通过使用Zend\Soap\Server\DocumentLiteralWrapper解决了此问题


这个故事的寓意是——如果您正在构建一个需要C#客户机使用的Zend Soap服务器,请检查文档文字wsdl处理,以解决此类跨平台问题。

没有任何代码片段,没有人可以帮助您。但根据我自己的经验,这是php和.net之间的数据类型不匹配。谢谢你的回复。我检查了日志,在尝试处理soap请求时,它在第881行的/path/to/app/vendor/zendframework/zend soap/zend/soap/Server.PHP中显示了
PHP注意:数组到字符串的转换。似乎您的服务器想要s字符串,但.net客户端正在发送一个数组:D,“Acme\Transaction”的结构是什么?您如何处理.net客户端中的服务?我更新了显示基本结构的问题。