Преобразование синтаксиса .NET в PHP с помощью вызова SoapHeader () - PullRequest
0 голосов
/ 17 июля 2009

Мне нужно преобразовать этот синтаксис .NET в PHP с помощью вызова SoapHeader ().

esb.RequestServerVersionValue = new RequestServerVersion (); esb.RequestServerVersionValue.Version = ExchangeVersionType.Exchange2007_SP1;

Большое спасибо! :)

Ответы [ 2 ]

1 голос
/ 20 июля 2009
$soapHeader = new SoapHeader(
                     'http://schemas.microsoft.com/exchange/services/2006/types',
                     'RequestServerVersion Version="Exchange2007_SP1"'
                     );

$ клиент -> __ setSoapHeaders ($ SoapHeader);

Это в основном все, что действительно нужно было установить. Я запутался с настройками пространства имен. Любопытно, что заголовок RequestServerVersion необходим при работе с общими папками, но, по-видимому, не требуется при работе с элементами почтовых ящиков в Exchange 2007.

Эта ссылка была особенно полезна: http://www.zimbra.com/forums/developers/5532-php-soap-vs-zimbra.html, поскольку она показала мне, как включить отладку, и очень четко дала понять, что делает каждый атрибут.

Этот результат поиска Google показывает действительный XML, необходимый для генерации, чтобы он работал "t: RequestServerVersion"

0 голосов
/ 18 июля 2009

Лично мне никогда не удавалось получить заголовки так, как я хотел, при использовании класса SoapHeader. Чтобы быть более гибким, вы, возможно, должны принять во внимание пользовательский класс SoapClient. Как я ответил в на другой вопрос о SO, вы можете структурировать SOAP-сообщение в соответствии с вашими потребностями при переопределении SoapClient::__doRequest(). Таким образом, вы можете вставлять фрагменты XML по своему желанию.

class My_SoapClient extends SoapClient
{
    protected function __doRequest($request, $location, $action, $version) 
    {
        /*
         * $request is a XML string representation of the SOAP request
         * that can e.g. be loaded into a DomDocument to make it modifiable.
         */
        $domRequest = new DOMDocument();
        $domRequest->loadXML($request);

        // modify XML using the DOM API, e.g. get the <s:Header>-tag 
        // and add your custom headers
        $xp = new DOMXPath($domRequest);
        $xp->registerNamespace('s', 'http://www.w3.org/2003/05/soap-envelope');
        $headers = $xp->query('/s:Envelope/s:Header');
        if ($headers->length == 0) {
            $envelope = $xp->query('/s:Envelope')->item(0);
            $header = $domRequest->createElementNS('http://www.w3.org/2003/05/soap-envelope', 's:Header');
            $envelope->appendChild($header);
        } else {
            $header = $headers->item(0);
        }

        // now add your custom header
        $requestServerVersion = $domRequest->createElementNS('T_NAMSPACE', 't:RequestServerVersion');
        $requestServerVersion->setAttribute('Version', 'Exchange2007_SP1');

        $header->appendChild($requestServerVersion);

        $request = $domRequest->saveXML();
        return parent::__doRequest($request, $location, $action, $version);
    }
}

T_NAMSPACE необходимо изменить на правильное пространство имен префикса t.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...