Ich verwende PERL und SOAP :: Lite, um Soap-Anrufe an MS Exchange Web Services zu machen. Ich habe bereits herausgefunden, authentifizieren und verwende ein Oauth-Token, um die Anrufe zu tätigen. Ich versuche, GetInboxRules aufzurufen, die here dokumentiert ist.EWS SOAP-Anfragen fehlgeschlagen
Grundsätzlich muss der Anruf so aussehen.
<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:m="http://schemas.microsoft.com/exchange/services/2006/messages"
xmlns:t="http://schemas.microsoft.com/exchange/services/2006/types"
xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Header>
<t:RequestServerVersion Version="Exchange2010_SP1" />
</soap:Header>
<soap:Body>
<m:GetInboxRules>
<m:MailboxSmtpAddress>[email protected]</m:MailboxSmtpAddress>
</m:GetInboxRules>
</soap:Body>
</soap:Envelope>
Mein erster Versuch verwendet den folgenden Code:
my $client = SOAP::Lite->service('file://home/auth/work/src/ben/services.wsdl')->proxy('https://outlook.office365.com/EWS/Exchange.asmx');
$client->readable(1)->autotype(0)->outputxml('true');
$client->ns('http://schemas.microsoft.com/exchange/services/2006/messages', 'm');
my $ua = $client->schema->useragent;
$ua->default_header('Authorization' => $auth_header);
$ua->default_header('Content-Type' => 'application/xml');
$client->schema->useragent($ua);
$client->transport->http_request->headers->push_header('Authorization'=> $auth_header);
# WITH URI
my $som = $client->call('GetInboxRules', SOAP::Data->name('MailboxSmtpAddress')->value('[email protected]')->uri('http://schemas.microsoft.com/exchange/services/2006/messages'));
Dies das folgende XML erzeugt zusammen mit einem 500 internen Server-Fehler, der besagt:
„Die Anfrage Schema-Validierung fehlgeschlagen: Das Element" GetInboxRules 'im Namespace' http://schemas.microsoft.com/exchange/services/2006/messages 'hat das ungültige untergeordnete Element' MailboxSmtpAddress '. Liste der möglichen erwarteten Elemente:' MailboxSmtpAddress 'im Namespace' http://schemas.microsoft.com/exchange/services/2006/messages ''
<?xml version="1.0" encoding="UTF-8"?>
<soap:Envelope
soap:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"
xmlns:m="http://schemas.microsoft.com/exchange/services/2006/messages"
xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<soap:Body>
<m:GetInboxRules>
<MailboxSmtpAddress>[email protected]</MailboxSmtpAddress>
</m:GetInboxRules>
</soap:Body>
</soap:Envelope>
ich schon, aber den Namensraum setze dies zu versuchen und zu beheben I durch Zugabe einer uri Spezifikation es my $som = $client->call('GetInboxRules', SOAP::Data->name('MailboxSmtpAddress')->value('[email protected]')->uri('http://schemas.microsoft.com/exchange/services/2006/messages'));
die produzierte den Namen Raum für das MailboxSmtpAddress Element angegeben:
<?xml version="1.0" encoding="UTF-8"?>
<soap:Envelope
soap:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"
xmlns:namesp3="http://schemas.microsoft.com/exchange/services/2006/messages"
xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<soap:Body>
<m:GetInboxRules>
<namesp3:MailboxSmtpAddress xmlns:namesp3="http://schemas.microsoft.com/exchange/services/2006/messages">[email protected]</namesp3:MailboxSmtpAddress>
</m:GetInboxRules>
</soap:Body>
</soap:Envelope>
gefolgt durch eine 400 Bad Request Antwort. Ich vermute, dass die schlechte Anfrage Antwort wegen der URL in der MailboxSmtpAddress Tag enthalten ist, aber ich weiß nicht, wie sonst den Namespace anzugeben.
Dies ist mein erstes Mal mit SOAP arbeiten, so dass alle Vorschläge sehr geschätzt werden.