C# EWS API从方法EmailMessage.Bind()引发异常

C# EWS API从方法EmailMessage.Bind()引发异常,c#,exchangewebservices,microsoft-teams,C#,Exchangewebservices,Microsoft Teams,我们一直在使用EWS API来访问MS团队的消息,它在生产中工作得非常好,直到我们为一个客户机解决了这个问题 System.ArgumentNullException: Array cannot be null. Parameter name: bytes at System.Text.ASCIIEncoding.GetBytes(String chars, Int32 charIndex, Int32 charCount, Byte[] bytes, Int32 byteIndex) at

我们一直在使用EWS API来访问MS团队的消息,它在生产中工作得非常好,直到我们为一个客户机解决了这个问题

System.ArgumentNullException: Array cannot be null. Parameter name: bytes
at System.Text.ASCIIEncoding.GetBytes(String chars, Int32 charIndex, Int32 
charCount, Byte[] bytes, Int32 byteIndex)
at System.Net.HttpWebRequest.GenerateRequestLine(Int32 headersSize)
at System.Net.HttpWebRequest.SerializeHeaders() 
at System.Net.HttpWebRequest.EndSubmitRequest()
at System.Net.HttpWebRequest.GetResponse() 
at     
Microsoft.Exchange.WebServices.Data.EwsHttpWebRequest.Microsoft.Exchange.
WebServices.Data.IEwsHttpWebRequest.GetResponse() 
at 
Microsoft.Exchange.WebServices.Data.ServiceRequestBase.GetEwsHttpWebResponse(
IEwsHttpWebRequest request) 
at Microsoft.Exchange.WebServices.Data.ServiceRequestBase.ValidateAndEmitRequest(
IEwsHttpWebRequest& request) 
at         Microsoft.Exchange.WebServices.Data.SimpleServiceRequestBase.InternalExecute() 
at Microsoft.Exchange.WebServices.Data.MultiResponseServiceRequest`1.Execute()
at Microsoft.Exchange.WebServices.Data.ExchangeService.InternalBindToItems(
IEnumerable`1 itemIds, PropertySet propertySet, String anchorMailbox, ServiceErrorHandling errorHandling) 

at Microsoft.Exchange.WebServices.Data.ExchangeService.BindToItem(ItemId itemId, PropertySet propertySet) 
at Microsoft.Exchange.WebServices.Data.ExchangeService.BindToItem[TItem](ItemId itemId, PropertySet propertySet) 
at Microsoft.Exchange.WebServices.Data.EmailMessage.Bind(ExchangeService service, ItemId id, PropertySet propertySet) 
代码片段:

 ChangeCollection<ItemChange> changeCollection=null;
 List<Item> syncedItems = null;

 changeCollection = _exchangeService.SyncFolderItems(exchangeFolder.Id,
                new PropertySet(BasePropertySet.IdOnly, ItemSchema.ItemClass), null,
                _syncBatchSize,
                SyncFolderItemsScope.NormalItems,
                currentSyncState);

 syncedItems = changeCollection.Where(d => d.ChangeType == ChangeType.Create || d.ChangeType == ChangeType.Update)
                        .Select(c => c.Item).ToList();

foreach (var item in syncedItems)
{
  if (!item.ItemClass.Equals("IPM.SkypeTeams.Message"))
      continue;

  EmailMessage message = EmailMessage.Bind(_exchangeService, item.Id.UniqueId,
                    new PropertySet(BasePropertySet.FirstClassProperties, ItemSchema.Attachments,
         ItemSchema.TextBody));
   //...code to store message
 }
问题1 对于某些消息id,EmailMessage.Bind方法引发上述异常。 我们试图在我们的开发机器上复制这个问题,但在我们的开发MS团队上没有复制

问题2 对于其他一些消息,我们看到这个方法只为消息返回null

我们正试图找出这两个问题的实际原因。对于这些,我们试图在MS团队中创建不同类型的可能消息,但仍然无法复制这些消息

这些MS团队消息的项目类为IPM.SkypeTeams.message


有人能解释一下吗?

1该用户是来宾用户吗?用户的Exchange邮箱在哪里?感谢@BillBliss MSFT的回复。我们正在为来宾用户跳过。对于邮件/对话访问,我们要求客户端输入应该可以访问所有用户邮箱的管理员用户名和密码。输入的用户应该在Exchange中具有ApplicationImpersonation角色,该角色允许读取所有用户的邮箱。在stacktrace中,EWS响应似乎有问题,例如,它无法解析得到的响应。看起来你在请求文本正文,所以可能你在那里得到了意想不到的内容。您可能需要使用Fiddler查看一些针对邮箱的网络捕获,您知道存在问题。在开发环境中很难复制,除非您可以从您知道出现问题的邮箱中导出/导入该文件夹的内容。如果其内容相关,您应该可以在文件夹内容上使用普通FindItem进行复制。感谢@GlenScales的回复。这是在生产中发生的,我们无法访问它来运行fiddler或任何东西。团队正在尝试获取该exchange邮箱的凭据,但不确定是否可以获取该凭据。从日志中,我们知道对于这个客户机,同样的异常会一次又一次地发生在这个消息上,并且在这之后无法向前读取下一条消息。因此,我们计划捕获此异常,记录失败的消息id并移动到下一个消息id。