0

我需要使用 SoapHeader() 调用将此 .NET 语法转换为 PHP。

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

非常感谢!:)

4

2 回答 2

1
$soapHeader = new SoapHeader(
                     'http://schemas.microsoft.com/exchange/services/2006/types',
                     'RequestServerVersion Version="Exchange2007_SP1"'
                     );

$client->__setSoapHeaders($soapHeader);

这基本上就是真正需要设置的所有内容。我对命名空间设置感到困惑。奇怪的是,使用公用文件夹时需要 RequestServerVersion 标头,但在 Exchange 2007 中使用邮箱项目时似乎不需要。

这个链接特别有用:http ://www.zimbra.com/forums/developers/5532-php-soap-vs-zimbra.html因为它向我展示了如何启用调试并非常清楚每个属性的作用。

此 Google 搜索结果显示了为此工作所需生成的有效 XML “t:RequestServerVersion”

于 2009-07-20T01:23:08.093 回答
0

SoapHeader在使用课程时,我个人从未设法按照我想要的方式获取标题。为了更加灵活,您也许应该考虑自定义SoapClient类。正如我在另一个关于 SO 的问题中回答的那样,您可以在覆盖 SOAP 消息时根据您的需要构建 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必须更改为 prefix 的正确命名空间t

于 2009-07-18T10:10:16.183 回答