我正在尝试在php中使用.net soap webservice,我已经尝试了所有内容,但我不断收到错误“对象引用未设置为对象的实例”。这是我现在的代码:
$client = New SoapClient('http://url.com/DesktopModules/IWebCSharp/webservice.asmx?WSDL', array('trace' => true));
$head = array();
$head['PortalID'] = 0;
$head['UserID'] = 1;
$head['Username'] = 'foo';
$head['Password'] = 'bar';
$head['Encrypted'] = 'false';
$head['WebPageCall'] = 'false';
$head['ModuleId'] = 523;
$header = new SoapHeader('http://schemas.xmlsoap.org/soap/envelope/', 'IWebAuthendication', $head);
$client->__setSoapHeaders($header);
$client->GetUser(array('GetUser' => array('someuser', 'Username')));
当我运行此并检查发送的请求($ client-> __ getLastRequest())时,我得到以下内容:
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="http://webservices.DotNetNuke.com/"><SOAP-ENV:Header><SOAP-ENV:IWebAuthendication><!-- ALL THE AUTHENTICATION STUFF //--></SOAP-ENV:IWebAuthendication></SOAP-ENV:Header><SOAP-ENV:Body><ns1:GetUser/></SOAP-ENV:Body></SOAP-ENV:Envelope>
相关部分当然有:
<SOAP-ENV:Body><ns1:GetUser/></SOAP-ENV:Body>
为什么我没有通过参数?我究竟做错了什么?我在搜索引擎优化和谷歌搜索了很多,但我见过的每一个解决方案都是为我工作的。这个web服务是DotNetNuke系统的一部分,如果我使用CURL,我可以使这个工作,所以我知道web服务不能被破坏,但我真的想使用SoapClient()调用,因为它更容易和更少的代码。
以下是.net webservice的相关代码:
public UserInfo GetUser(string Username) {
UserInfo objResponse = new UserInfo();
try {
IWebAuthendication objIWebAuthendication = new IWebAuthendication(IWebCredentials);
if (!(objIWebAuthendication.ValidAndAuthorized())) {
objResponse.UserID = -1;
objResponse.Username = "Not Authorized";
return objResponse;
}
objResponse = IWebUser.GetUserInfo(IWebCredentials.PortalID, Username);
// Do not return the password for a administrator
if ((objResponse.IsSuperUser == false & objResponse.IsInRole("Administrators") == false)) {
objResponse.Membership.Password = UserController.GetPassword(ref objResponse, "").ToString();
}
else {
objResponse.Membership.Password = "Administrator password is supressed";
}
}
catch (Exception ex) {
objResponse.UserID = -1;
objResponse.Username = ex.Message;
}
return objResponse;
}
这是WSDL的相关部分:
<wsdl:operation name="GetUser">
<soap:operation soapAction="http://webservices.DotNetNuke.com/GetUser" style="document"/>
<wsdl:input>
<soap:body use="literal"/>
<soap:header message="tns:GetUserIWebAuthendicationHeader" part="IWebAuthendicationHeader" use="literal"/>
</wsdl:input>
<wsdl:output>
<soap:body use="literal"/>
</wsdl:output>
</wsdl:operation>
如何使用SoapClient()在PHP中完成这项工作?