我正在尝试编写一种方法来查找Exchange Server版本和我正在使用EWS连接的Exchange Server。
很明显,将响应XML的内容读取到EWS请求中包含此信息,如described here。
我很好奇我是否必须测试和错误处理,或者是否有另一种“侵入性较小”的方法来查找Exchange版本。
如何找到我尝试使用EWS访问的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.");
}
}
答案 0 :(得分:5)
我采取的策略是选择我喜欢的EWS版本并首先提出要求。由于后来的Exchange与其早期版本向后兼容,因此可以要求E2013在EWS上以E2010 SP2“方言”发言。
EWS版本的巨大差异介于E2007 SP1和E2010 RTM之间,尤其是在时区管理方面。如果你可以完全避免支持E2007,你可以要求最低的共同标准,E2010 SP1,并且可以更高级别地谈论。如果您需要与E2007交谈,那么您必须首先尝试E2010 SP1,然后像上面那样处理异常。当然是YMMV,因为E2010 + API中有一些差异如here所示,所以你可能更喜欢更高级别。
自动发现完成后,您可以在另一端获取Exchange的实际版本并进行相应调整,例如:如果您要求E2010 SP1但最终与E2013交谈,由于E2010和E2013之间的架构变化,需要以不同方式管理的通知存在一些亲和性问题,但这可以通过E2010 SP1方言完成。
我还在我的代码中提供了一个配置值,以提供一个“提示”,指出首先尝试的版本,假设在特定的商店中Exchange服务器可能都处于同一级别。