0

認証資格情報を含む SOAP ヘッダーを PHP から ASP.NET Web サービスに送信しようとしています。

/// <summary>
/// Soap Header for the Secured Web Service.
/// </summary>
public class TestWebServiceHeader : System.Web.Services.Protocols.SoapHeader
{
    public string Username;
    public string Password;
    public string AuthenticatedToken;
}


/// <summary>
/// Summary description for TestService
/// </summary>
[WebService(Namespace = "http://tempuri.org/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
[System.ComponentModel.ToolboxItem(false)]
public class TestService : System.Web.Services.WebService
{
    public TestWebServiceHeader AuthHeader;
    public SoapUnknownHeader[] UnknownHeaders;

    [WebMethod]
    [System.Web.Services.Protocols.SoapHeader("AuthHeader")]
    [SoapHeader("UnknownHeaders")]
    public string HelloWorld()
    {
        foreach (SoapUnknownHeader header in UnknownHeaders)
        {
            if (header.Element.LocalName == "AuthHeader")
            {
                // FOUND HEADER
            }
        }

        if (AuthHeader == null)
        {
            // NULL AuthHeader
        }

        return "Hello World";
    }
}

そして、ここにPHPがあります

<?php
$service = new SoapClient("http://localhost/Orientation/TestService.asmx?wsdl");
$HeaderSecurity = array("Username"=>"user", "Password"=>"pass123");
$header = new SoapHeader('http://tempuri.org/', 'AuthHeader', $HeaderSecurity, false);
$service->__setSoapHeaders(array($header));   
$service->HelloWorld(); // Example

//$service = new SoapClient("http://localhost/Orientation/TestService.asmx?wsdl");
//$auth = array('user'=>'user', 'password'=>'pass123'); 
//$authvar = new SoapVar($auth, SOAP_ENC_OBJECT); 
//$header = new SoapHeader('http://tempuri.org/', 'AuthHeader xmlns="http://tempuri.org/"',      $authvar, false); 
//$service->__setSoapHeaders(array($header)); 
//$service->HelloWorld();
?>

Web サービスでは、PHP の AuthHeader は常に null です。SoapUnknownHeaders をキャッチするとヘッダーを見つけることができ、ヘッダー名は ns1:AuthHeader です。SoapUnknownHeaders を使用せずにヘッダーを取得するにはどうすればよいですか。ヘッダー オブジェクトを取得したら、ヘッダーから情報を引き出すにはどうすればよいですか? また、コメントアウトされた部分を PHP で動作させることができませんでした。SOAP_ENC_OBJECT は呼び出しをより安全にしますか?

4

0 に答える 0