You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C#中EWS报错:EwsLegacyId格式不被当前Exchange版本支持

解决EWS LegacyId不兼容的问题

这个错误我碰到过,核心原因就是你当前指定的EWS版本(Exchange2013_SP1)不再支持旧的EwsLegacyId格式,必须转换成EwsId才能正常使用。

关于Exchange版本的疑问

你提到的Exchange服务器版本15,对应的就是Exchange 2013/2013 SP1(Exchange 2013的版本号前缀就是15.x),所以你选ExchangeVersion.Exchange2013_SP1是完全正确的,版本选择不是问题根源,问题出在你使用的ID格式上——EwsLegacyId是Exchange 2010及更早版本的ID格式,2013及以后的EWS要求使用EwsId。

批量转换ID的简洁方法

没必要逐个转换,EWS支持批量ConvertId请求,一次处理大量ID,效率高很多。给你一个C#的示例代码:

// 初始化已配置好的ExchangeService实例
ExchangeService service = new ExchangeService(ExchangeVersion.Exchange2013_SP1);
service.Credentials = new WebCredentials("username", "password");
service.Url = new Uri("https://your-exchange-server/EWS/Exchange.asmx");

// 准备需要转换的LegacyId列表
List<string> legacyIds = new List<string> { "legacyId1", "legacyId2", "...", "legacyIdN" };

// 构造批量转换请求
ConvertIdRequest convertRequest = new ConvertIdRequest(service);
foreach (string legacyId in legacyIds)
{
    convertRequest.AddSourceId(legacyId, IdFormat.EwsLegacyId);
}
convertRequest.TargetFormat = IdFormat.EwsId;

// 执行请求并获取结果
ConvertIdResponse convertResponse = convertRequest.Execute();

// 处理转换后的ID
foreach (ConvertIdResponse.ResponseMessage responseMsg in convertResponse.ResponseMessages)
{
    if (responseMsg.Result == ServiceResult.Success)
    {
        string convertedEwsId = responseMsg.ConvertedId.UniqueId;
        // 存入列表或直接使用转换后的ID
    }
    else
    {
        // 处理转换失败的情况
        Console.WriteLine($"转换失败:{responseMsg.MessageText}");
    }
}

注意事项

  • EWS的批量ConvertId请求有数量限制,一般一次最多处理1000个ID,如果你的ID数量超过这个数,记得分批次处理。
  • 如果你的ID是从旧系统或旧EWS版本(比如Exchange2010)获取的,一定要确认是EwsLegacyId格式,避免转错格式。

内容的提问来源于stack exchange,提问作者Mika

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.04 09:42:41