PHPで.netSOAPWebサービスを使用しようとしていますが、すべてを試しましたが、「オブジェクト参照がオブジェクトのインスタンスに設定されていません」というエラーが表示され続けます。これが私が今持っているコードです:
$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>
パラメータを取得できないのはなぜですか?私は何が間違っているのですか?私はここSOとGoogleの両方で多くのことを検索しましたが、他の人のために働いていた私が見たすべての解決策は私のために働いていません。このWebサービスはDotNetNukeシステムの一部であり、CURLを使用すればこれを機能させることができるので、Webサービスが壊れることはありませんが、コードがはるかに簡単で少ないため、代わりにSoapClient()呼び出しを使用したいと思います。
.netWebサービスの関連コードは次のとおりです。
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でこれを機能させるにはどうすればよいですか?