使用Exchange Web Services (EWS) API查找Exchange Server版本的方法

3
我正在尝试编写一种找到使用EWS连接的Exchange Server版本的方法。
显然,在EWS请求的响应XML中读取内容包含了此信息,如此处所述
我想知道是否必须进行测试和错误处理,或者是否有另一种“非侵入式”的方法来查找Exchange版本。
我该如何找到我正在尝试访问的Exchange Server的版本,以便为EWS管理的API活动设置它?
我目前正在使用以下内容,但我无法想象这是最有效的方式?
foreach (ExchangeVersion exchver in Enum.GetValues(typeof(ExchangeVersion)))
{
    //Console.WriteLine(exchver.ToString());
    try
    {
        ExchangeService service = new ExchangeService(exchver);
        //Do stuff here
    }
    catch (Exception e)
    {
        Console.WriteLine("Server is not " + exchver +". Trying next ExchangeVersion.");
    }
}
1个回答

5
我采取的策略是先选择我“喜欢”的EWS版本并请求使用该版本。由于较新的Exchange与之前版本兼容,因此您可以要求E2013在EWS上使用E2010 SP2“方言”与您交谈。
EWS版本的主要分界线是E2007 SP1和E2010 RTM及更高版本之间,特别是在时区管理方面。如果您可以避免完全支持E2007,则可以要求最低公共分母E2010 SP1,并与更高级别进行友好交流。如果您需要与E2007交流,则必须首先尝试使用E2010 SP1,然后像上面一样处理异常情况。当然,因为E2010+ API存在一些不同之处(如此处所示),您可能更喜欢更高级别的API。
自动发现完成后,您可以获得对端Exchange的实际版本并相应地进行调整。例如,如果您要求E2010 SP1但实际上正在与E2013通信,则由于E2010和E2013之间的架构更改,有一些关于通知的亲和性问题需要以不同的方式进行管理,但仍然可以使用E2010 SP1的“方言”。
我的代码还提供了一个配置值,用于“提示”首选尝试哪个版本,这是基于在特定的环境中Exchange服务器很可能都处于同一级别的假设。

谢谢Paul!我敢说,欢迎加入!您提供的建议非常有价值,我很感激,因为它看起来很不错。您能详细说明自动发现完成后您如何进行测试吗? - brandeded
1
如果您在GetUserSettings调用中请求UserSettingName.CasVersion,则会返回版本字符串。 - pjneary

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接