多次调用ServiceObject.Load而不重新加载数据

时间:2013-11-28 10:53:39

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

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

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

所以我的问题是:

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

2)如果#1的答案为否,那么一次又一次避免昂贵的EWS呼叫的最佳方法是什么?我希望保持我的对象模型层变薄,只需将对属性的调用引用到内部EWS Item对象中,但如果#1错误,我想我必须手动将所有数据复制到我的对象。还有更好的方法吗?

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

1 个答案:

答案 0 :(得分:0)

我已经看了EWS托管API的代码。似乎每次调用'ServiceObject.Load()'时,托管EWS API都会向您的Exchange服务器发送HTTP请求。使用'ServiceObject.Load()'时,托管API中没有内置缓存,这在我看来很好。如果服务器上的项目发生了变化并且您需要刷新,API将如何知道?

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

如果你想省去一些HTTP调用,你必须在你自己的客户端建立缓存。