Warning : This page has been marked as an archive because the author consider that its content is no longer relevant.

Lors de mes premiers articles sur les webservices Exchange, je vous avais signalé que j’utiliserai les services ASMX afin de me connecter car je n’avais jamais testé avec WCF. Visiblement celà a piqué la curiosité de Roch Baduel qui a essayé et réussi à se connecter avec WCF.

Je vais donc vous exposer aujourd’hui la solution qu’il m’a donné.

Tout d’abord il vous faut ajouter une référence au service Exchange en utilisant la méthode habituelle pour ajouter des références de service WCF et en utilisant une url de la forme suivante : https://mu.lan/ews/Services.wsdl

Ensuite ajoutez ou modifiez le fichier app.config pour qu’il contienne les informations suivantes :

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
    <system.serviceModel>
        <client>
            <endpoint address="<a href="https://mu.lan/ews/exchange.asmx"">https://mu.lan/ews/exchange.asmx</a>"
                      binding="basicHttpBinding"
                      bindingConfiguration="ExchangeServiceBinding"
                      contract="ews.ExchangeServicePortType"
                      name="Exc" />
        </client>
        <bindings>
            <basicHttpBinding>
                <binding name="ExchangeServiceBinding" textEncoding="utf-8">
                    <security mode="Transport">
                        <transport clientCredentialType="Windows" />
                        <message clientCredentialType="UserName" />
                    </security>
                </binding>
            </basicHttpBinding>
        </bindings>
    </system.serviceModel>
</configuration>

Dans votre code pensez à ajouter la ligne suivante :

ServicePointManager.ServerCertificateValidationCallback =
    (sender, certificate, chain, sslPolicyErrors) => true;

Ensuite il faut créer une instance de ExchangeServicePortTypeClient en lui passant en paramètre le nom que vous avez donnés au “endpoint” dans le fichier app.config (ici Exc) :

var ws = new ExchangeServicePortTypeClient("Exc");

// Paramètres de connexion
ws.ClientCredentials.Windows.ClientCredential.Domain = domain;
ws.ClientCredentials.Windows.ClientCredential.UserName = username;
ws.ClientCredentials.Windows.ClientCredential.Password = password;

// Ouverture du canal de communication
ws.Open();

Et maintenant voici un exemple de création d’un nouveau contact :

var item = new ContactItemType()
{
    DisplayName = "toto",
    GivenName = "titi",
    FileAs = "tutu",
    Surname = "tata",
};

CreateItemRequest request = new CreateItemRequest();
CreateItemType createitem = new CreateItemType();
createitem.Items = new NonEmptyArrayOfAllItemsType();
createitem.Items.Items = new ContactItemType[] { item };

createitem.SavedItemFolderId = new TargetFolderIdType()
{
    Item = new DistinguishedFolderIdType() { Id = DistinguishedFolderIdNameType.contacts }
};

request.CreateItem = createitem;

// On "cast" en ExchangeServicePortType pour avoir accès
// à la méthode CreateItem simple.
ExchangeServicePortType espt = ws;
espt.CreateItem(request);

Vous avez donc maintenant un nouveau contact en étant passé par WCF.

Comments