Quantcast
Channel: Exchange Server Development forum
Viewing all articles
Browse latest Browse all 7132

Exchange Streaming Notifications and Synchronization

$
0
0

Hi,

I am building what will be a Windows service application using the EWS Streaming Notifications capability available in Exchange 2010 SP1.  I started with the example application discussed in the MSDN article entitled 'Using Streaming Notifications with Exchange 2010'.

I am only interested in new mail events in a single inbox. I have the OnNotificationEvent trigger successfully processing new mail events. I also have a background thread running that does a SyncFolderItems every 10 minutes. I am not exactly clear how the synchronization plays in all this, but the desire is guaranteed one-time processing of all new mail events. Therefore I am hoping the synchronization will provide “recovery” of events in case the service or other dependent resources are temporarily down.

My sync code is as follows:

  PublicSub SynchronizeChanges(folderIdAsFolderId)

       Dim moreChangesAvailableAsBoolean

       Do

           LogWriter.WriteLine("Synchronizing changes...")

           ' Get all changes since the last call. The synchronization cookie is stored in the _SynchronizationState field.

           ' Only the the ids are requested. Additional properties should be fetched via GetItem calls.

           Dim changes = _ExchangeService.SyncFolderItems(folderId,PropertySet.IdOnly,Nothing, 512,SyncFolderItemsScope.NormalItems, _SynchronizationState)

           ' Update the synchronization cookie

           _SynchronizationState = changes.SyncState

           WriteServiceSynchronizationState(_SynchronizationState)

           ' Process all changes

           'For Each itemChange In changes

           ' This example just prints the ChangeType and ItemId to the console

           ' LOB application would apply business rules to each item.

           'LogWriter.WriteLine("ChangeType = " & itemChange.ChangeType)

           'LogWriter.WriteLine("ChangeType = " & itemChange.ItemId.ToString)

           'Next

           ' If more changes are available, issue additional SyncFolderItems requests.

           moreChangesAvailable = changes.MoreChangesAvailable

       LoopWhile moreChangesAvailable

   EndSub

My question is about the commented out code at the bottom of the above sub. If the service or Exchange were unavailable for a period of time, is the For Each loop required to process new mail because the OnNotificationEvent would not have fired? If yes, then I will obviously need to adjust the For Each loop to suit my needs.

Also interested in feedback about whether or not this is a design that should provide guaranteed one-time processing of incoming mail. I do not expect this inbox to get much traffic but processing and responding is important.


Viewing all articles
Browse latest Browse all 7132

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>