Zend_Soap_Client错误调用ASP.net Web服务:“......不设置到对象的实例”
我试图使用Zend_Soap_Client与ASP.net web服务进行通信。这里是我的客户打电话: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: Object reference not set to an instance of an object. at 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方法空让我的对象作为参数,而不是,但我不知道我应该如何调用该方法,否则我这怎么能进一步调试。我发现的大部分Zend_Soap_Client示例似乎都使用WSDL,而这个服务并不是这样;不确定这是否相关。任何帮助感谢!
我最终解决了这个与:
$userDetails = new UserDetails();
$userDetails->UserDetail = $user;
$client->UserDetails($userDetails);
似乎ASP.net预计(和返回)到PARAMS嵌套中的对象/阵列具有相同的名称为被调用的方法。
如果您有任何可能改变asp.net代码我建议你尝试该方法的UserDetails的实现不带参数只是为了确保代码不破。
然后我将创建在asp.net一个消费方法,调试http请求,看到了userdetail对象如何序列/以阵列形式进行细分。然后,它只是一个从php创建类似http请求的问题。
我知道ASP代码工作作为Web服务和使用过程中。我希望避免创建自己的.net客户端来调试它,因为我没有ASP开发环境,所以我会考虑我最后的选择! – 2010-11-15 14:46:17