【问题标题】:Multiple calls to ServiceObject.Load without reloading data多次调用 ServiceObject.Load 而无需重新加载数据
【发布时间】:2013-11-28 10:53:39
【问题描述】:

我正在 EWS 之上构建一个对象模型层,并在内部公开一个作为 EmailMessage 的对象,该对象具有我在启动时加载的几个标准属性,并允许用户在其上拥有不同的“视图”该对象(ViewAsEntity1、ViewAsEntity2)按需加载其他自定义属性(一些是扩展属性,一些是 Internet 标头)。

问题是我用一个 PropertySet(标准属性)调用 Item.Bind(),但是当用户请求 ViewAsEntity1 时,我用新的 PropertySet 调用 ServiceObject.Load(),这要么意味着我失去了原来的一组属性,或者我重新检索它们。

所以我的问题是:

1) 如果我调用 ServiceObject.Load 两次,在 PropertySet 中具有相同的属性,Exchange 是否真的发送相同的数据,或者它是否假设我已经缓存了它(如果它没有改变),并且没有再发一次?如果是这样,EWS 是否知道不会破坏 PropertyBag 中的现有数据?

2) 如果 #1 的答案是否定的,那么避免一次又一次昂贵的 EWS 调用的最佳方法是什么?我希望保持我的对象模型层薄,并简单地将属性调用引用到内部 EWS 项目对象中,但如果 #1 错误,我想我将不得不手动将所有数据复制到我的对象中。有没有更好的办法?

我正在使用 .NET 4.5、托管 EWS 2.0 和 Exchange 2010 SP1

【问题讨论】:

    标签: exchange-server exchangewebservices ews-managed-api


    【解决方案1】:

    我查看了 EWS 托管 API 的代码。似乎每次调用“ServiceObject.Load()”时,托管 EWS API 都会向您的 Exchange 服务器发送一个 HTTP 请求。使用“ServiceObject.Load()”时,托管 API 中没有内置缓存,我认为这很好。 API 如何知道服务器上的项目何时更改并且您需要刷新?

    Exchange 服务器上可能有一些缓存 - 谁知道 - 但您仍然必须进行 HTTP 调用。

    如果您想节省一些 HTTP 调用,您必须在自己的客户端中构建缓存。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-01-16
      • 1970-01-01
      • 2019-03-27
      • 2015-10-26
      • 2023-03-15
      • 2017-12-05
      相关资源
      最近更新 更多