<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://blogs.msdn.com/utility/FeedStylesheets/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/"><channel><title>Microsoft Sync Framework : Microsoft Sync Framework</title><link>http://blogs.msdn.com/sync/archive/tags/Microsoft+Sync+Framework/default.aspx</link><description>Tags: Microsoft Sync Framework</description><dc:language>en-US</dc:language><generator>CommunityServer 2.1 SP1 (Build: 61025.2)</generator><item><title>Looking Forward - Offline Capable Applications Using SilverLight and Sync Framework</title><link>http://blogs.msdn.com/sync/archive/2009/12/14/offline-capable-applications-using-silverlight-and-sync-framework.aspx</link><pubDate>Mon, 14 Dec 2009 17:47:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9936644</guid><dc:creator>liamca</dc:creator><slash:comments>2</slash:comments><comments>http://blogs.msdn.com/sync/comments/9936644.aspx</comments><wfw:commentRss>http://blogs.msdn.com/sync/commentrss.aspx?PostID=9936644</wfw:commentRss><description>&lt;P&gt;Right from the first release of Microsoft Sync Framework, one of the most common requests we have received is for the ability to take SilverLight applications offline, meaning that users can continue to access their applications and data regardless of connectivity to the backend web application. Using this architecture, developers can build much richer applications and also take advantage of the local machine resources to provide fast data access. In addition, the ability to easily deploy SilverLight applications either within a browser of within an out-of-browser application makes this platform a very popular choice when building rich internet applications. 
&lt;P&gt;
&lt;TABLE&gt;
&lt;TBODY&gt;
&lt;TR&gt;
&lt;TD vAlign=top&gt;&lt;IMG style="WIDTH: 311px; HEIGHT: 185px" src="http://blogs.msdn.com/photos/sync/images/9936658/500x342.aspx" width=345 height=206&gt; &lt;/TD&gt;
&lt;TD vAlign=top&gt;
&lt;P&gt;In the past there were a few issues that we had when trying to enable this functionality, but now with the latest release of SilverLight, much of what we require to provide offline capabilities is available. At this year’s Professional Developer Conference (PDC), Mark Scurrell introduced everyone to this set of capabilities in his session: "&lt;A title="SilverLight Offline" href="http://microsoftpdc.com/Sessions/SVC23" target=_blank mce_href="http://microsoftpdc.com/Sessions/SVC23"&gt;Using the Microsoft Sync Framework to Connect Apps to the Cloud&lt;/A&gt;" (overview starts at 44:40 minutes into session). Using the PDC conference session web site he showed how we built a rich SilverLight application that allows a user to take the sessions data offline into isolated storage, and while the user is offline they can continue to view sessions, add sessions to their calendar, rate attended sessions and then, once back online, the application automatically takes the changes and uploads them to the main agenda web site (demo starts at 48:00 minutes into session). The screenshot to the left shows an example of what this application looks like.&lt;/P&gt;
&lt;P&gt;In order to truly take advantage of SilverLight's cross platform capability we had to come up with a solution where we could still support clients that do not have a Sync Framework runtime. To do this what we did was build the architecture such that all of the core Sync Framework logic resides on the service (in this case a Windows Azure Webrole), and that is where all of the heavy lifting of the synchronization process is executed. From the service we exposed a simple HTTP-based synchronization protocol that the client consumed, allowing any client to participate in synchronization. Currently the best offline store within SilverLight is isolated storage, and as you can see in Mark's demonstration of filtering data, this is sufficient to build a rich and very quick data-access application. &lt;/P&gt;
&lt;P&gt;Over the next year you will see more of how we plan to enable this scenario and we will provide additional details on what you can do to get started to build these offline-capable applications using SilverLight. &lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;
&lt;P&gt;Liam&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9936644" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/sync/archive/tags/Microsoft+Sync+Framework/default.aspx">Microsoft Sync Framework</category><category domain="http://blogs.msdn.com/sync/archive/tags/Video/default.aspx">Video</category><category domain="http://blogs.msdn.com/sync/archive/tags/Database+Sync/default.aspx">Database Sync</category><category domain="http://blogs.msdn.com/sync/archive/tags/SQL+Azure+Data+sync/default.aspx">SQL Azure Data sync</category><category domain="http://blogs.msdn.com/sync/archive/tags/SilverLight/default.aspx">SilverLight</category></item><item><title>Synchronizing Files to Windows Azure Storage Using Microsoft Sync Framework</title><link>http://blogs.msdn.com/sync/archive/2009/12/03/synchronizing-files-to-windows-azure-storage-using-microsoft-sync-framework.aspx</link><pubDate>Thu, 03 Dec 2009 21:48:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9932218</guid><dc:creator>liamca</dc:creator><slash:comments>1</slash:comments><comments>http://blogs.msdn.com/sync/comments/9932218.aspx</comments><wfw:commentRss>http://blogs.msdn.com/sync/commentrss.aspx?PostID=9932218</wfw:commentRss><description>&lt;P style="MARGIN: 0in 0in 10pt" class=MsoNormal&gt;&lt;I style="mso-bidi-font-style: normal"&gt;&lt;SPAN style="COLOR: black; mso-style-textfill-fill-color: black; mso-style-textfill-fill-alpha: 75.0%"&gt;&lt;FONT size=3&gt;&lt;FONT face=Calibri&gt;I wanted to kick off this post by introducing myself.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;I’m Michael Clark.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;I lead the Sync Framework team.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;I don’t normally post to this blog (Liam Cavanagh does a fantastic job of that) but wanted a forum to get the information below out for now and decided that blog would be a good venue.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;One of the things that we’d like to know is if the community would like to see more posts of this nature.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;If so let us know by giving us some feedback and we’ll figure out some appropriate venue to get this kind of info out on a more regular basis.&lt;?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/I&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0in 0in 10pt" class=MsoNormal&gt;&lt;I style="mso-bidi-font-style: normal"&gt;&lt;SPAN style="COLOR: black; mso-style-textfill-fill-color: black; mso-style-textfill-fill-alpha: 75.0%"&gt;&lt;o:p&gt;&lt;FONT size=3 face=Calibri&gt;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/I&gt;&lt;/P&gt;
&lt;TABLE&gt;
&lt;TBODY&gt;
&lt;TR&gt;
&lt;TD&gt;&lt;IMG src="http://blogs.msdn.com/photos/sync/images/9932220/original.aspx"&gt; &lt;/TD&gt;
&lt;TD&gt;
&lt;P style="MARGIN: 0in 0in 10pt" class=MsoNormal&gt;&lt;A href="http://microsoftpdc.com/" mce_href="http://microsoftpdc.com/"&gt;&lt;/A&gt;&lt;?xml:namespace prefix = v ns = "urn:schemas-microsoft-com:vml" /&gt;&lt;v:shapetype id=_x0000_t75 stroked="f" filled="f" path="m@4@5l@4@11@9@11@9@5xe" o:preferrelative="t" o:spt="75" coordsize="21600,21600"&gt;&lt;v:stroke joinstyle="miter"&gt;&lt;/v:stroke&gt;&lt;v:formulas&gt;&lt;v:f eqn="if lineDrawn pixelLineWidth 0"&gt;&lt;/v:f&gt;&lt;v:f eqn="sum @0 1 0"&gt;&lt;/v:f&gt;&lt;v:f eqn="sum 0 0 @1"&gt;&lt;/v:f&gt;&lt;v:f eqn="prod @2 1 2"&gt;&lt;/v:f&gt;&lt;v:f eqn="prod @3 21600 pixelWidth"&gt;&lt;/v:f&gt;&lt;v:f eqn="prod @3 21600 pixelHeight"&gt;&lt;/v:f&gt;&lt;v:f eqn="sum @0 0 1"&gt;&lt;/v:f&gt;&lt;v:f eqn="prod @6 1 2"&gt;&lt;/v:f&gt;&lt;v:f eqn="prod @7 21600 pixelWidth"&gt;&lt;/v:f&gt;&lt;v:f eqn="sum @8 21600 0"&gt;&lt;/v:f&gt;&lt;v:f eqn="prod @7 21600 pixelHeight"&gt;&lt;/v:f&gt;&lt;v:f eqn="sum @10 21600 0"&gt;&lt;/v:f&gt;&lt;/v:formulas&gt;&lt;v:path o:connecttype="rect" gradientshapeok="t" o:extrusionok="f"&gt;&lt;/v:path&gt;&lt;o:lock aspectratio="t" v:ext="edit"&gt;&lt;/o:lock&gt;&lt;/v:shapetype&gt;&lt;v:shape style="Z-INDEX: 251658240; POSITION: absolute; MARGIN-TOP: 0px; WIDTH: 243.75pt; HEIGHT: 66pt; VISIBILITY: visible; MARGIN-LEFT: 0px; mso-wrap-style: square; mso-width-percent: 0; mso-height-percent: 0; mso-wrap-distance-left: 0; mso-wrap-distance-top: 0; mso-wrap-distance-right: 0; mso-wrap-distance-bottom: 0; mso-position-horizontal: left; mso-position-horizontal-relative: text; mso-position-vertical: absolute; mso-position-vertical-relative: line; mso-width-relative: page; mso-height-relative: page" id=Picture_x0020_1 mce_href="http://microsoftpdc.com/" o:button="t" o:allowoverlap="f" href="http://microsoftpdc.com/" alt="image" o:spid="_x0000_s1026" type="#_x0000_t75"&gt;&lt;FONT size=3&gt;&lt;FONT face=Calibri&gt;&lt;v:fill o:detectmouseclick="t"&gt;&lt;/v:fill&gt;&lt;v:imagedata o:title="image" src="file:///C:\Users\LIAMCA~1.RED\AppData\Local\Temp\msohtmlclip1\01\clip_image001.png" mce_src="file:///C:\Users\LIAMCA~1.RED\AppData\Local\Temp\msohtmlclip1\01\clip_image001.png"&gt;&lt;/v:imagedata&gt;&lt;?xml:namespace prefix = w ns = "urn:schemas-microsoft-com:office:word" /&gt;&lt;w:wrap type="square" anchory="line"&gt;&lt;/w:wrap&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/v:shape&gt;&lt;SPAN style="mso-no-proof: yes"&gt;&lt;A href="http://microsoftpdc.com/" mce_href="http://microsoftpdc.com/"&gt;&lt;/A&gt;&lt;/SPAN&gt;&lt;FONT size=3 face=Calibri&gt;At PDC09 we talked quite a bit about how to synchronize data to the cloud.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;Most of this revolved around synchronizing structured data to and from SQL Azure.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;If you are interested in that, check out our &lt;/FONT&gt;&lt;A href="http://www.microsoft.com/windowsazure/developers/sqlazure/datasync/" mce_href="http://www.microsoft.com/windowsazure/developers/sqlazure/datasync/"&gt;&lt;FONT size=3 face=Calibri&gt;Developer Quick Start&lt;/FONT&gt;&lt;/A&gt;&lt;FONT size=3 face=Calibri&gt;, which includes a link to download &lt;/FONT&gt;&lt;A href="http://www.microsoft.com/downloads/details.aspx?FamilyID=bce4ad61-5b76-4101-8311-e928e7250b9a&amp;amp;displaylang=en" mce_href="http://www.microsoft.com/downloads/details.aspx?FamilyID=bce4ad61-5b76-4101-8311-e928e7250b9a&amp;amp;displaylang=en"&gt;&lt;FONT size=3 face=Calibri&gt;Microsoft Sync Framework Power Pack for SQL Azure November CTP&lt;/FONT&gt;&lt;/A&gt;&lt;FONT size=3&gt;&lt;FONT face=Calibri&gt;.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0in 0in 10pt" class=MsoNormal&gt;&lt;FONT size=3&gt;&lt;FONT face=Calibri&gt;For this post, however, I want to augment that information to answer another question that we are frequently asked and were asked a number of times at PDC, “How can I synchronize things like files with Azure Blob Storage?”&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;The answer at this point is that you’ll have to build a provider.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;The good news is that it’s not too hard.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;I built one that I’ll describe as part of this post. The full &lt;A title="File Sync Sample to Windows Azure Blob" href="https://code.msdn.microsoft.com/Release/ProjectReleases.aspx?ProjectName=sync&amp;amp;ReleaseId=3638" target=_blank mce_href="https://code.msdn.microsoft.com/Release/ProjectReleases.aspx?ProjectName=sync&amp;amp;ReleaseId=3638"&gt;sample code is available here&lt;/A&gt;.&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;
&lt;P style="MARGIN: 0in 0in 10pt" class=MsoNormal&gt;&lt;FONT size=3&gt;&lt;FONT face=Calibri&gt;So how does it work?&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;The sample itself consists of three major portions: the actual provider, some wrapper code on Azure Blob Storage, and a simple console application to run it.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;I’ll talk in a bit more depth about both the provider and the Azure Blob Storage integration.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;On the client side the sample uses Sync Framework’s file synchronization provider.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;The file synchronization provider solves a lot of the hard problems for synchronizing files, including moves, renames, etc., so it is a great way to get this up and going quickly.&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;&lt;FONT face=Calibri&gt;
&lt;P style="MARGIN: 0in 0in 10pt" class=MsoNormal&gt;&lt;FONT size=3&gt;The azure provider is implemented as a FullEnumerationSimpleSyncProvider, using the &lt;/FONT&gt;&lt;A href="http://msdn.microsoft.com/en-us/library/dd937763(SQL.105).aspx" mce_href="http://msdn.microsoft.com/en-us/library/dd937763(SQL.105).aspx"&gt;&lt;FONT color=#0000ff size=3 face="Times New Roman"&gt;simple provider&lt;/FONT&gt;&lt;/A&gt;&lt;FONT size=3&gt; components of Sync Framework.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;Simple providers are a way to create Sync Framework providers for data stores that do not have built-in synchronization support.&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0in 0in 10pt" class=MsoNormal&gt;&lt;FONT size=3&gt;The provider itself derives from the &lt;/FONT&gt;&lt;A href="http://msdn.microsoft.com/en-us/library/microsoft.synchronization.simpleproviders.fullenumerationsimplesyncprovider(SQL.105).aspx" mce_href="http://msdn.microsoft.com/en-us/library/microsoft.synchronization.simpleproviders.fullenumerationsimplesyncprovider(SQL.105).aspx"&gt;&lt;FONT color=#0000ff size=3 face="Times New Roman"&gt;FullEnumerationSimpleSyncProvider&lt;/FONT&gt;&lt;/A&gt;&lt;FONT size=3&gt; class, which is used for stores that don’t support any form of change detection whatsoever.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;It’s extremely useful because this is actually the category that most off-the-shelf stores fall into (another great example of this type of store is the FAT file system).&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;Sync Framework also contains the notion of an &lt;/FONT&gt;&lt;A href="http://msdn.microsoft.com/en-us/library/microsoft.synchronization.simpleproviders.anchorenumerationsimplesyncprovider(SQL.105).aspx" mce_href="http://msdn.microsoft.com/en-us/library/microsoft.synchronization.simpleproviders.anchorenumerationsimplesyncprovider(SQL.105).aspx"&gt;&lt;FONT color=#0000ff size=3 face="Times New Roman"&gt;AnchorEnumerationSimpleSyncProvider&lt;/FONT&gt;&lt;/A&gt;&lt;FONT size=3&gt; for stores that have the ability to enumerate changes based on some type of anchor (timestamp, tick count, opaque blob of goo, whatever).&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;But for now I’m going to focus on full enumeration as that is what is required for Azure Blob Storage at this point.&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0in 0in 10pt" class=MsoNormal&gt;&lt;FONT size=3&gt;The basic idea behind a full enumeration synchronization provider is that you need to tell Sync Framework some basic information about the items you'll be synchronizing, how to identify them and how to detect a version change, and then give Sync Framework the ability to enumerate through the items looking for changes.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;To tell Sync Framework about the items, override the MetadataSchema property of the FullEnumerationSimpleSyncProvider class.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;When you build the metadata schema you’ll specify a set of custom fields to track, and an IdentityRule.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;Together these things make up the set of data required to track and identify changes for objects in the store.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;For the Azure Blob synchronization provider this property looks like this:&lt;/FONT&gt;&lt;o:p&gt;&amp;nbsp;&lt;/P&gt;
&lt;P style="LINE-HEIGHT: normal; MARGIN: 0in 0in 0pt; mso-layout-grid-align: none" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY: Consolas; COLOR: blue; FONT-SIZE: 8pt; mso-bidi-font-size: 9.5pt"&gt;public&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: Consolas; FONT-SIZE: 8pt; mso-bidi-font-size: 9.5pt"&gt; &lt;SPAN style="COLOR: blue"&gt;override&lt;/SPAN&gt; ItemMetadataSchema MetadataSchema&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT: normal; MARGIN: 0in 0in 0pt; mso-layout-grid-align: none" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY: Consolas; FONT-SIZE: 8pt; mso-bidi-font-size: 9.5pt"&gt;{&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT: normal; MARGIN: 0in 0in 0pt; mso-layout-grid-align: none" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY: Consolas; FONT-SIZE: 8pt; mso-bidi-font-size: 9.5pt"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;get&lt;/SPAN&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT: normal; MARGIN: 0in 0in 0pt; mso-layout-grid-align: none" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY: Consolas; FONT-SIZE: 8pt; mso-bidi-font-size: 9.5pt"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;{&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT: normal; MARGIN: 0in 0in 0pt; mso-layout-grid-align: none" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY: Consolas; FONT-SIZE: 8pt; mso-bidi-font-size: 9.5pt"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;CustomFieldDefinition[] customFields = &lt;SPAN style="COLOR: blue"&gt;new&lt;/SPAN&gt; CustomFieldDefinition[2];&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT: normal; MARGIN: 0in 0in 0pt; mso-layout-grid-align: none" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY: Consolas; FONT-SIZE: 8pt; mso-bidi-font-size: 9.5pt"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;customFields[0] = &lt;SPAN style="COLOR: blue"&gt;new&lt;/SPAN&gt; CustomFieldDefinition(&lt;SPAN style="COLOR: #2b91af"&gt;ItemFields&lt;/SPAN&gt;.CUSTOM_FIELD_NAME, &lt;SPAN style="COLOR: blue"&gt;typeof&lt;/SPAN&gt;(&lt;SPAN style="COLOR: blue"&gt;string&lt;/SPAN&gt;), &lt;SPAN style="COLOR: #2b91af"&gt;AzureBlobStore&lt;/SPAN&gt;.MaxFileNameLength);&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT: normal; MARGIN: 0in 0in 0pt; mso-layout-grid-align: none" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY: Consolas; FONT-SIZE: 8pt; mso-bidi-font-size: 9.5pt"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;customFields[1] = &lt;SPAN style="COLOR: blue"&gt;new&lt;/SPAN&gt; CustomFieldDefinition(&lt;SPAN style="COLOR: #2b91af"&gt;ItemFields&lt;/SPAN&gt;.CUSTOM_FIELD_TIMESTAMP, &lt;SPAN style="COLOR: blue"&gt;typeof&lt;/SPAN&gt;(&lt;SPAN style="COLOR: blue"&gt;ulong&lt;/SPAN&gt;));&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT: normal; MARGIN: 0in 0in 0pt; mso-layout-grid-align: none" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY: Consolas; FONT-SIZE: 8pt; mso-bidi-font-size: 9.5pt"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT: normal; MARGIN: 0in 0in 0pt; mso-layout-grid-align: none" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY: Consolas; FONT-SIZE: 8pt; mso-bidi-font-size: 9.5pt"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;IdentityRule[] identityRule = &lt;SPAN style="COLOR: blue"&gt;new&lt;/SPAN&gt; IdentityRule[1];&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT: normal; MARGIN: 0in 0in 0pt; mso-layout-grid-align: none" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY: Consolas; FONT-SIZE: 8pt; mso-bidi-font-size: 9.5pt"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;identityRule[0] = &lt;SPAN style="COLOR: blue"&gt;new&lt;/SPAN&gt; IdentityRule(&lt;SPAN style="COLOR: blue"&gt;new&lt;/SPAN&gt; &lt;SPAN style="COLOR: blue"&gt;uint&lt;/SPAN&gt;[] { &lt;SPAN style="COLOR: #2b91af"&gt;ItemFields&lt;/SPAN&gt;.CUSTOM_FIELD_NAME });&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT: normal; MARGIN: 0in 0in 0pt; mso-layout-grid-align: none" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY: Consolas; FONT-SIZE: 8pt; mso-bidi-font-size: 9.5pt"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT: normal; MARGIN: 0in 0in 0pt; mso-layout-grid-align: none" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY: Consolas; FONT-SIZE: 8pt; mso-bidi-font-size: 9.5pt"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;return&lt;/SPAN&gt; &lt;SPAN style="COLOR: blue"&gt;new&lt;/SPAN&gt; ItemMetadataSchema(customFields, identityRule);&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT: normal; MARGIN: 0in 0in 0pt; mso-layout-grid-align: none" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY: Consolas; FONT-SIZE: 8pt; mso-bidi-font-size: 9.5pt"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;}&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT: normal; MARGIN: 0in 0in 0pt; mso-layout-grid-align: none" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY: Consolas; FONT-SIZE: 8pt; mso-bidi-font-size: 9.5pt"&gt;}&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT: normal; MARGIN: 0in 0in 0pt; mso-layout-grid-align: none" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY: Consolas; FONT-SIZE: 8pt; mso-bidi-font-size: 9.5pt"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0in 0in 10pt" class=MsoNormal&gt;&lt;FONT size=3&gt;Next, in order to let Sync Framework detect changes you need to override the EnumerateItems method.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;In your EnumerateItems implementation you’ll create a List of ItemFieldDictionary objects to tell Sync Framework about all of the metadata properties you have specified in your MetadataSchema.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;Sync Framework uses this information to track the state of objects in the store, looking for adds, updates, and deletes and then produces the proper synchronization metadata for those changes so that they can be synchronized with any Sync Framework provider.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;The implementation for EnumerateItems in this sample looks like this:&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT: normal; MARGIN: 0in 0in 0pt; mso-layout-grid-align: none" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY: Consolas; COLOR: green; FONT-SIZE: 8pt; mso-bidi-font-size: 9.5pt"&gt;// Enumerate all items in the store&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: Consolas; FONT-SIZE: 8pt; mso-bidi-font-size: 9.5pt"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT: normal; MARGIN: 0in 0in 0pt; mso-layout-grid-align: none" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY: Consolas; COLOR: blue; FONT-SIZE: 8pt; mso-bidi-font-size: 9.5pt"&gt;public&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: Consolas; FONT-SIZE: 8pt; mso-bidi-font-size: 9.5pt"&gt; &lt;SPAN style="COLOR: blue"&gt;override&lt;/SPAN&gt; &lt;SPAN style="COLOR: blue"&gt;void&lt;/SPAN&gt; EnumerateItems(FullEnumerationContext context)&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT: normal; MARGIN: 0in 0in 0pt; mso-layout-grid-align: none" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY: Consolas; FONT-SIZE: 8pt; mso-bidi-font-size: 9.5pt"&gt;{&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT: normal; MARGIN: 0in 0in 0pt; mso-layout-grid-align: none" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY: Consolas; FONT-SIZE: 8pt; mso-bidi-font-size: 9.5pt"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR: #2b91af"&gt;List&lt;/SPAN&gt;&amp;lt;ItemFieldDictionary&amp;gt; items = DataStore.ListBlobs();&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT: normal; MARGIN: 0in 0in 0pt; mso-layout-grid-align: none" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY: Consolas; FONT-SIZE: 8pt; mso-bidi-font-size: 9.5pt"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;context.ReportItems(items);&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT: normal; MARGIN: 0in 0in 0pt; mso-layout-grid-align: none" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY: Consolas; FONT-SIZE: 8pt; mso-bidi-font-size: 9.5pt"&gt;}&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT: normal; MARGIN: 0in 0in 0pt; mso-layout-grid-align: none" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY: Consolas; FONT-SIZE: 8pt; mso-bidi-font-size: 9.5pt"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0in 0in 10pt" class=MsoNormal&gt;&lt;FONT size=3&gt;There is obviously some hidden detail here because I’ve put some of the work in the store wrapper that I mentioned previously.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;I’ll talk more about the store wrapper in a moment but I’ll include its ListBlobs method here since it is relevant.&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT: normal; MARGIN: 0in 0in 0pt; mso-layout-grid-align: none" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY: Consolas; COLOR: blue; FONT-SIZE: 8pt; mso-bidi-font-size: 9.5pt"&gt;internal&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: Consolas; FONT-SIZE: 8pt; mso-bidi-font-size: 9.5pt"&gt; &lt;SPAN style="COLOR: #2b91af"&gt;List&lt;/SPAN&gt;&amp;lt;ItemFieldDictionary&amp;gt; ListBlobs()&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT: normal; MARGIN: 0in 0in 0pt; mso-layout-grid-align: none" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY: Consolas; FONT-SIZE: 8pt; mso-bidi-font-size: 9.5pt"&gt;{&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT: normal; MARGIN: 0in 0in 0pt; mso-layout-grid-align: none" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY: Consolas; FONT-SIZE: 8pt; mso-bidi-font-size: 9.5pt"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR: #2b91af"&gt;List&lt;/SPAN&gt;&amp;lt;ItemFieldDictionary&amp;gt; items = &lt;SPAN style="COLOR: blue"&gt;new&lt;/SPAN&gt; &lt;SPAN style="COLOR: #2b91af"&gt;List&lt;/SPAN&gt;&amp;lt;ItemFieldDictionary&amp;gt;();&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT: normal; MARGIN: 0in 0in 0pt; mso-layout-grid-align: none" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY: Consolas; FONT-SIZE: 8pt; mso-bidi-font-size: 9.5pt"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT: normal; MARGIN: 0in 0in 0pt; mso-layout-grid-align: none" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY: Consolas; FONT-SIZE: 8pt; mso-bidi-font-size: 9.5pt"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;BlobRequestOptions opts = &lt;SPAN style="COLOR: blue"&gt;new&lt;/SPAN&gt; BlobRequestOptions();&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT: normal; MARGIN: 0in 0in 0pt; mso-layout-grid-align: none" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY: Consolas; FONT-SIZE: 8pt; mso-bidi-font-size: 9.5pt"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;opts.UseFlatBlobListing = &lt;SPAN style="COLOR: blue"&gt;true&lt;/SPAN&gt;;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT: normal; MARGIN: 0in 0in 0pt; mso-layout-grid-align: none" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY: Consolas; FONT-SIZE: 8pt"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;opts.BlobListingDetails = BlobListingDetails.Metadata;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT: normal; MARGIN: 0in 0in 0pt; mso-layout-grid-align: none" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY: Consolas; FONT-SIZE: 8pt; mso-bidi-font-size: 9.5pt"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT: normal; MARGIN: 0in 0in 0pt; mso-layout-grid-align: none" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY: Consolas; FONT-SIZE: 8pt; mso-bidi-font-size: 9.5pt"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;foreach&lt;/SPAN&gt; (IListBlobItem o &lt;SPAN style="COLOR: blue"&gt;in&lt;/SPAN&gt; Container.ListBlobs(opts))&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT: normal; MARGIN: 0in 0in 0pt; mso-layout-grid-align: none" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY: Consolas; FONT-SIZE: 8pt; mso-bidi-font-size: 9.5pt"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;{&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT: normal; MARGIN: 0in 0in 0pt; mso-layout-grid-align: none" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY: Consolas; FONT-SIZE: 8pt; mso-bidi-font-size: 9.5pt"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;CloudBlob blob = Container.GetBlobReference(o.Uri.ToString());&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT: normal; MARGIN: 0in 0in 0pt; mso-layout-grid-align: none" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY: Consolas; FONT-SIZE: 8pt; mso-bidi-font-size: 9.5pt"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;ItemFieldDictionary dict = &lt;SPAN style="COLOR: blue"&gt;new&lt;/SPAN&gt; ItemFieldDictionary();&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT: normal; MARGIN: 0in 0in 0pt; mso-layout-grid-align: none" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY: Consolas; FONT-SIZE: 8pt; mso-bidi-font-size: 9.5pt"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;dict.Add(&lt;SPAN style="COLOR: blue"&gt;new&lt;/SPAN&gt; ItemField(&lt;SPAN style="COLOR: #2b91af"&gt;ItemFields&lt;/SPAN&gt;.CUSTOM_FIELD_NAME, &lt;SPAN style="COLOR: blue"&gt;typeof&lt;/SPAN&gt;(&lt;SPAN style="COLOR: blue"&gt;string&lt;/SPAN&gt;), o.Uri.ToString()));&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT: normal; MARGIN: 0in 0in 0pt; mso-layout-grid-align: none" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY: Consolas; FONT-SIZE: 8pt; mso-bidi-font-size: 9.5pt"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;dict.Add(&lt;SPAN style="COLOR: blue"&gt;new&lt;/SPAN&gt; ItemField(&lt;SPAN style="COLOR: #2b91af"&gt;ItemFields&lt;/SPAN&gt;.CUSTOM_FIELD_TIMESTAMP, &lt;SPAN style="COLOR: blue"&gt;typeof&lt;/SPAN&gt;(&lt;SPAN style="COLOR: blue"&gt;ulong&lt;/SPAN&gt;), (&lt;SPAN style="COLOR: blue"&gt;ulong&lt;/SPAN&gt;)blob.Properties.LastModifiedUtc.ToBinary()));&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT: normal; MARGIN: 0in 0in 0pt; mso-layout-grid-align: none" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY: Consolas; FONT-SIZE: 8pt; mso-bidi-font-size: 9.5pt"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;items.Add(dict);&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT: normal; MARGIN: 0in 0in 0pt; mso-layout-grid-align: none" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY: Consolas; FONT-SIZE: 8pt; mso-bidi-font-size: 9.5pt"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;}&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT: normal; MARGIN: 0in 0in 0pt; mso-layout-grid-align: none" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY: Consolas; FONT-SIZE: 8pt; mso-bidi-font-size: 9.5pt"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT: normal; MARGIN: 0in 0in 0pt; mso-layout-grid-align: none" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY: Consolas; FONT-SIZE: 8pt; mso-bidi-font-size: 9.5pt"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;return&lt;/SPAN&gt; items;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT: normal; MARGIN: 0in 0in 0pt; mso-layout-grid-align: none" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY: Consolas; FONT-SIZE: 8pt; mso-bidi-font-size: 9.5pt"&gt;}&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT: normal; MARGIN: 0in 0in 0pt; mso-layout-grid-align: none" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY: Consolas; FONT-SIZE: 8pt; mso-bidi-font-size: 9.5pt"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0in 0in 10pt" class=MsoNormal&gt;&lt;FONT size=3&gt;What this ListBlobs implementation does is simply walk through all of the blobs in the container (container is an Azure Blob Storage concept; in this sample I treat it like a root directory).&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;Then, for each blob get out the information that was specified for the MetadataSchema and build a list of that information to give back to Sync Framework.&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0in 0in 10pt" class=MsoNormal&gt;&lt;FONT size=3&gt;The last crucial bit for the providers is to give Sync Framework a way to add, update, or delete items from the store.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;To do this, override &lt;/FONT&gt;&lt;A href="http://msdn.microsoft.com/en-us/library/microsoft.synchronization.simpleproviders.simplesyncprovider.insertitem(SQL.105).aspx" mce_href="http://msdn.microsoft.com/en-us/library/microsoft.synchronization.simpleproviders.simplesyncprovider.insertitem(SQL.105).aspx"&gt;&lt;FONT color=#0000ff size=3 face="Times New Roman"&gt;InsertItem&lt;/FONT&gt;&lt;/A&gt;&lt;FONT size=3&gt;, &lt;/FONT&gt;&lt;A href="http://msdn.microsoft.com/en-us/library/microsoft.synchronization.simpleproviders.simplesyncprovider.updateitem(SQL.105).aspx" mce_href="http://msdn.microsoft.com/en-us/library/microsoft.synchronization.simpleproviders.simplesyncprovider.updateitem(SQL.105).aspx"&gt;&lt;FONT color=#0000ff size=3 face="Times New Roman"&gt;UpdateItem&lt;/FONT&gt;&lt;/A&gt;&lt;FONT size=3&gt;, and &lt;/FONT&gt;&lt;A href="http://msdn.microsoft.com/en-us/library/microsoft.synchronization.simpleproviders.simplesyncprovider.deleteitem(SQL.105).aspx" mce_href="http://msdn.microsoft.com/en-us/library/microsoft.synchronization.simpleproviders.simplesyncprovider.deleteitem(SQL.105).aspx"&gt;&lt;FONT color=#0000ff size=3 face="Times New Roman"&gt;DeleteItem&lt;/FONT&gt;&lt;/A&gt;&lt;FONT size=3&gt; respectively.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;I won’t include the source for those methods here for brevity but you can check them out in the sample.&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0in 0in 10pt" class=MsoNormal&gt;&lt;FONT size=3&gt;There are a couple of other things that are needed for the synchronization provider but those are mostly bookkeeping and I’ll let you look at the sample to get the details.&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0in 0in 10pt" class=MsoNormal&gt;&lt;FONT size=3&gt;At this point, I want to talk briefly about the store wrapper class.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;The store wrapper class utilizes objects in the Microsoft.WindowsAzure.StorageClient namespace.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;To get that you’ll need to download &lt;/FONT&gt;&lt;A href="http://www.microsoft.com/downloads/details.aspx?FamilyID=6967ff37-813e-47c7-b987-889124b43abd&amp;amp;displaylang=en" mce_href="http://www.microsoft.com/downloads/details.aspx?FamilyID=6967ff37-813e-47c7-b987-889124b43abd&amp;amp;displaylang=en"&gt;&lt;FONT size=3&gt;Windows Azure Tools for Microsoft Visual Studio&lt;/FONT&gt;&lt;/A&gt;&lt;FONT size=3&gt;.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;I’m not going to go into too much detail about the store wrapper itself.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;It has most of the methods you’d expect, such as the ListBlobs method seen above, and the corresponding methods for adds, updates, and deletes.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;I do want to talk a little bit about one important detail with the store and that is &lt;I style="mso-bidi-font-style: normal"&gt;optimistic concurrency&lt;/I&gt;.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;Optimistic concurrency is the thing that will allow multiple synchronization clients to work with the store at the same time without overwriting each other unwittingly and corrupting data.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;The Sync Framework simple providers are designed to work well with stores that support optimistic concurrency so that they can provide correct synchronization.&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0in 0in 10pt" class=MsoNormal&gt;&lt;FONT size=3&gt;The great news is that Windows Azure Blob Storage supports optimistic concurrency well.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;If you are using the StorageClient API, it does this by using a BlobRequestOptions object.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;You can see an example of how this works in the DeleteFile method of the store wrapper:&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT: normal; MARGIN: 0in 0in 0pt; mso-layout-grid-align: none" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY: Consolas; COLOR: blue; FONT-SIZE: 8pt; mso-bidi-font-size: 9.5pt"&gt;internal&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: Consolas; FONT-SIZE: 8pt; mso-bidi-font-size: 9.5pt"&gt; &lt;SPAN style="COLOR: blue"&gt;void&lt;/SPAN&gt; DeleteFile(&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT: normal; MARGIN: 0in 0in 0pt; mso-layout-grid-align: none" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY: Consolas; FONT-SIZE: 8pt; mso-bidi-font-size: 9.5pt"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;string&lt;/SPAN&gt; name,&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT: normal; MARGIN: 0in 0in 0pt; mso-layout-grid-align: none" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY: Consolas; FONT-SIZE: 8pt; mso-bidi-font-size: 9.5pt"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR: #2b91af"&gt;DateTime&lt;/SPAN&gt; expectedLastModified&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT: normal; MARGIN: 0in 0in 0pt; mso-layout-grid-align: none" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY: Consolas; FONT-SIZE: 8pt; mso-bidi-font-size: 9.5pt"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;)&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT: normal; MARGIN: 0in 0in 0pt; mso-layout-grid-align: none" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY: Consolas; FONT-SIZE: 8pt; mso-bidi-font-size: 9.5pt"&gt;{&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT: normal; MARGIN: 0in 0in 0pt; mso-layout-grid-align: none" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY: Consolas; FONT-SIZE: 8pt; mso-bidi-font-size: 9.5pt"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;CloudBlob blob = Container.GetBlobReference(name);&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT: normal; MARGIN: 0in 0in 0pt; mso-layout-grid-align: none" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY: Consolas; FONT-SIZE: 8pt; mso-bidi-font-size: 9.5pt"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;try&lt;/SPAN&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT: normal; MARGIN: 0in 0in 0pt; mso-layout-grid-align: none" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY: Consolas; FONT-SIZE: 8pt; mso-bidi-font-size: 9.5pt"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;{&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT: normal; MARGIN: 0in 0in 0pt; mso-layout-grid-align: none" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY: Consolas; FONT-SIZE: 8pt; mso-bidi-font-size: 9.5pt"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;blob.FetchAttributes();&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT: normal; MARGIN: 0in 0in 0pt; mso-layout-grid-align: none" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY: Consolas; FONT-SIZE: 8pt; mso-bidi-font-size: 9.5pt"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;}&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT: normal; MARGIN: 0in 0in 0pt; mso-layout-grid-align: none" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY: Consolas; FONT-SIZE: 8pt; mso-bidi-font-size: 9.5pt"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;catch&lt;/SPAN&gt; (StorageClientException e)&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT: normal; MARGIN: 0in 0in 0pt; mso-layout-grid-align: none" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY: Consolas; FONT-SIZE: 8pt; mso-bidi-font-size: 9.5pt"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;{&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT: normal; MARGIN: 0in 0in 0pt; mso-layout-grid-align: none" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY: Consolas; FONT-SIZE: 8pt; mso-bidi-font-size: 9.5pt"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR: green"&gt;// Someone may have deleted the blob in the meantime&lt;/SPAN&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT: normal; MARGIN: 0in 0in 0pt; mso-layout-grid-align: none" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY: Consolas; FONT-SIZE: 8pt; mso-bidi-font-size: 9.5pt"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;if&lt;/SPAN&gt; (e.ErrorCode == StorageErrorCode.BlobNotFound)&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT: normal; MARGIN: 0in 0in 0pt; mso-layout-grid-align: none" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY: Consolas; FONT-SIZE: 8pt; mso-bidi-font-size: 9.5pt"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;{&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT: normal; MARGIN: 0in 0in 0pt; mso-layout-grid-align: none" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY: Consolas; FONT-SIZE: 8pt; mso-bidi-font-size: 9.5pt"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;throw&lt;/SPAN&gt; &lt;SPAN style="COLOR: blue"&gt;new&lt;/SPAN&gt; &lt;SPAN style="COLOR: #2b91af"&gt;ApplicationException&lt;/SPAN&gt;(&lt;SPAN style="COLOR: #a31515"&gt;"Concurrency Violation"&lt;/SPAN&gt;, e);&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT: normal; MARGIN: 0in 0in 0pt; mso-layout-grid-align: none" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY: Consolas; FONT-SIZE: 8pt; mso-bidi-font-size: 9.5pt"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;}&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT: normal; MARGIN: 0in 0in 0pt; mso-layout-grid-align: none" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY: Consolas; FONT-SIZE: 8pt; mso-bidi-font-size: 9.5pt"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;throw&lt;/SPAN&gt;;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT: normal; MARGIN: 0in 0in 0pt; mso-layout-grid-align: none" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY: Consolas; FONT-SIZE: 8pt; mso-bidi-font-size: 9.5pt"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;}&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT: normal; MARGIN: 0in 0in 0pt; mso-layout-grid-align: none" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY: Consolas; FONT-SIZE: 8pt; mso-bidi-font-size: 9.5pt"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;BlobProperties blobProperties = blob.Properties;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT: normal; MARGIN: 0in 0in 0pt; mso-layout-grid-align: none" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY: Consolas; FONT-SIZE: 8pt; mso-bidi-font-size: 9.5pt"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT: normal; MARGIN: 0in 0in 0pt; mso-layout-grid-align: none" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY: Consolas; FONT-SIZE: 8pt; mso-bidi-font-size: 9.5pt"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;...&lt;/SPAN&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT: normal; MARGIN: 0in 0in 0pt; mso-layout-grid-align: none" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY: Consolas; FONT-SIZE: 8pt; mso-bidi-font-size: 9.5pt"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT: normal; MARGIN: 0in 0in 0pt; mso-layout-grid-align: none" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY: Consolas; FONT-SIZE: 8pt; mso-bidi-font-size: 9.5pt"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;BlobRequestOptions opts = &lt;SPAN style="COLOR: blue"&gt;new&lt;/SPAN&gt; BlobRequestOptions();&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT: normal; MARGIN: 0in 0in 0pt; mso-layout-grid-align: none" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY: Consolas; FONT-SIZE: 8pt; mso-bidi-font-size: 9.5pt"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;opts.AccessCondition = AccessCondition.IfNotModifiedSince(expectedLastModified);&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT: normal; MARGIN: 0in 0in 0pt; mso-layout-grid-align: none" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY: Consolas; FONT-SIZE: 8pt; mso-bidi-font-size: 9.5pt"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;try&lt;/SPAN&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT: normal; MARGIN: 0in 0in 0pt; mso-layout-grid-align: none" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY: Consolas; FONT-SIZE: 8pt; mso-bidi-font-size: 9.5pt"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;{&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT: normal; MARGIN: 0in 0in 0pt; mso-layout-grid-align: none" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY: Consolas; FONT-SIZE: 8pt; mso-bidi-font-size: 9.5pt"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;blob.Delete(opts);&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT: normal; MARGIN: 0in 0in 0pt; mso-layout-grid-align: none" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY: Consolas; FONT-SIZE: 8pt; mso-bidi-font-size: 9.5pt"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;}&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT: normal; MARGIN: 0in 0in 0pt; mso-layout-grid-align: none" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY: Consolas; FONT-SIZE: 8pt; mso-bidi-font-size: 9.5pt"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;catch&lt;/SPAN&gt;( StorageClientException e )&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT: normal; MARGIN: 0in 0in 0pt; mso-layout-grid-align: none" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY: Consolas; FONT-SIZE: 8pt; mso-bidi-font-size: 9.5pt"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;{&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT: normal; MARGIN: 0in 0in 0pt; mso-layout-grid-align: none" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY: Consolas; FONT-SIZE: 8pt; mso-bidi-font-size: 9.5pt"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR: green"&gt;// Someone must have modified the file in the meantime&lt;/SPAN&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT: normal; MARGIN: 0in 0in 0pt; mso-layout-grid-align: none" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY: Consolas; FONT-SIZE: 8pt; mso-bidi-font-size: 9.5pt"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;if&lt;/SPAN&gt; (e.ErrorCode == StorageErrorCode.BlobNotFound || e.ErrorCode == StorageErrorCode.ConditionFailed)&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT: normal; MARGIN: 0in 0in 0pt; mso-layout-grid-align: none" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY: Consolas; FONT-SIZE: 8pt; mso-bidi-font-size: 9.5pt"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;{&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT: normal; MARGIN: 0in 0in 0pt; mso-layout-grid-align: none" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY: Consolas; FONT-SIZE: 8pt; mso-bidi-font-size: 9.5pt"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;throw&lt;/SPAN&gt; &lt;SPAN style="COLOR: blue"&gt;new&lt;/SPAN&gt; &lt;SPAN style="COLOR: #2b91af"&gt;ApplicationException&lt;/SPAN&gt;(&lt;SPAN style="COLOR: #a31515"&gt;"Concurrency Violation"&lt;/SPAN&gt;, e);&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT: normal; MARGIN: 0in 0in 0pt; mso-layout-grid-align: none" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY: Consolas; FONT-SIZE: 8pt; mso-bidi-font-size: 9.5pt"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;}&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT: normal; MARGIN: 0in 0in 0pt; mso-layout-grid-align: none" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY: Consolas; FONT-SIZE: 8pt; mso-bidi-font-size: 9.5pt"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;throw&lt;/SPAN&gt;;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT: normal; MARGIN: 0in 0in 0pt; mso-layout-grid-align: none" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY: Consolas; FONT-SIZE: 8pt; mso-bidi-font-size: 9.5pt"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;}&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT: normal; MARGIN: 0in 0in 0pt; mso-layout-grid-align: none" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY: Consolas; FONT-SIZE: 8pt; mso-bidi-font-size: 9.5pt"&gt;}&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT: normal; MARGIN: 0in 0in 0pt; mso-layout-grid-align: none" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY: Consolas; FONT-SIZE: 8pt; mso-bidi-font-size: 9.5pt"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0in 0in 10pt" class=MsoNormal&gt;&lt;FONT size=3&gt;Note that by specifying the AccessCondition property of the BlobRequestOptions object, the code tells Azure Blob Storage not to touch the file if the file has been modified since the last time we looked at it.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;If the file has been touched, the CloudBlog object from the StorageClient library throws StorageClientException.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;For a couple of specific errors, the store wrapper converts that into ApplicationException to let other parts of the code know that they should treat this as a temporary error and temporarily skip it from the perspective of synchronization.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;That code is in the DeteleItem method of the provider and looks like this:&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT: normal; MARGIN: 0in 0in 0pt; mso-layout-grid-align: none" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY: Consolas; COLOR: blue; FONT-SIZE: 8pt; mso-bidi-font-size: 9.5pt"&gt;try&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: Consolas; FONT-SIZE: 8pt; mso-bidi-font-size: 9.5pt"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT: normal; MARGIN: 0in 0in 0pt; mso-layout-grid-align: none" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY: Consolas; FONT-SIZE: 8pt; mso-bidi-font-size: 9.5pt"&gt;{&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT: normal; MARGIN: 0in 0in 0pt; mso-layout-grid-align: none" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY: Consolas; FONT-SIZE: 8pt; mso-bidi-font-size: 9.5pt"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;DataStore.DeleteFile(name, expectedLastUpdate);&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT: normal; MARGIN: 0in 0in 0pt; mso-layout-grid-align: none" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY: Consolas; FONT-SIZE: 8pt; mso-bidi-font-size: 9.5pt"&gt;}&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT: normal; MARGIN: 0in 0in 0pt; mso-layout-grid-align: none" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY: Consolas; COLOR: blue; FONT-SIZE: 8pt; mso-bidi-font-size: 9.5pt"&gt;catch&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: Consolas; FONT-SIZE: 8pt; mso-bidi-font-size: 9.5pt"&gt; (&lt;SPAN style="COLOR: #2b91af"&gt;ApplicationException&lt;/SPAN&gt; e)&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT: normal; MARGIN: 0in 0in 0pt; mso-layout-grid-align: none" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY: Consolas; FONT-SIZE: 8pt; mso-bidi-font-size: 9.5pt"&gt;{&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT: normal; MARGIN: 0in 0in 0pt; mso-layout-grid-align: none" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY: Consolas; FONT-SIZE: 8pt; mso-bidi-font-size: 9.5pt"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;recoverableErrorReportingContext.RecordRecoverableErrorForChange(&lt;SPAN style="COLOR: blue"&gt;new&lt;/SPAN&gt; RecoverableErrorData(e));&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT: normal; MARGIN: 0in 0in 0pt; mso-layout-grid-align: none" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY: Consolas; FONT-SIZE: 8pt; mso-bidi-font-size: 9.5pt"&gt;}&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT: normal; MARGIN: 0in 0in 0pt; mso-layout-grid-align: none" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY: Consolas; FONT-SIZE: 8pt; mso-bidi-font-size: 9.5pt"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0in 0in 10pt" class=MsoNormal&gt;&lt;FONT size=3&gt;What this does is cause Sync Framework to temporarily exclude that particular item from synchronization. The item will be picked up again later.&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0in 0in 10pt" class=MsoNormal&gt;&lt;FONT size=3&gt;Now, to run this sample you’ll need to download the &lt;/FONT&gt;&lt;A href="http://www.microsoft.com/downloads/details.aspx?FamilyID=89adbb1e-53ff-41b5-ba17-8e43a2e66254&amp;amp;displaylang=en" mce_href="http://www.microsoft.com/downloads/details.aspx?FamilyID=89adbb1e-53ff-41b5-ba17-8e43a2e66254&amp;amp;displaylang=en"&gt;&lt;FONT size=3&gt;Microsoft Sync Framework v2 SDK&lt;/FONT&gt;&lt;/A&gt;&lt;FONT size=3&gt; as well as the &lt;/FONT&gt;&lt;A href="http://www.microsoft.com/downloads/details.aspx?FamilyID=6967ff37-813e-47c7-b987-889124b43abd&amp;amp;displaylang=en" mce_href="http://www.microsoft.com/downloads/details.aspx?FamilyID=6967ff37-813e-47c7-b987-889124b43abd&amp;amp;displaylang=en"&gt;&lt;FONT size=3&gt;Windows Azure Tools for Microsoft Visual Studio&lt;/FONT&gt;&lt;/A&gt;&lt;FONT size=3&gt;.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;The sample synchronizes to a Windows Azure Blob Storage project so you’ll need to make sure that you have an account and project set up.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;To get started on that, go to &lt;/FONT&gt;&lt;A href="http://www.microsoft.com/windowsazure/" mce_href="http://www.microsoft.com/windowsazure/"&gt;&lt;FONT size=3&gt;http://www.microsoft.com/windowsazure/&lt;/FONT&gt;&lt;/A&gt;&lt;FONT size=3&gt;.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;Finally, when running the sample you’ll need to modify the app.config file for the sample and specify the AccountName and AccountSharedKey properties for the storage project that you created.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;When you actually run it from the command line, the application expects to be given a container name (this is an Azure Blob Storage concept mentioned previously) and a local path.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;It will synchronize everything from the local path, including subdirectories, up to the container specified.&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0in 0in 10pt" class=MsoNormal&gt;&lt;FONT size=3&gt;So that’s basically it.&amp;nbsp; Please give this a try.&amp;nbsp; If you do this with photos you can easily view them in your web browser by going to &lt;A href="https://%3caccountname%3e.blobs.core.windows.net/%3CcontainerName%3E/%3CfileName%3E.jpg"&gt;https://&amp;lt;accountName&amp;gt;.blobs.core.windows.net/&amp;lt;containerName&amp;gt;/&amp;lt;fileName&amp;gt;.jpg&lt;/A&gt;.&amp;nbsp; Check out the code, and let us know what you think by sending mail to &lt;A href="mailto:syncfdbk@microsoft.com"&gt;syncfdbk@microsoft.com&lt;/A&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0in 0in 10pt" class=MsoNormal&gt;&lt;FONT size=3&gt;One final note that is worth covering: A great question to ask here is, “Why not just use Live Mesh to synchronize the files?”&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;The answer to that is that if Live Mesh fits your scenario and requirements, then you absolutely should use it.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;Live Mesh, part of the Windows Live Platform, is a great product and will allow you to synchronize files between any set of PCs and mobile devices.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;It is perfect for a lot of synchronization scenarios involving files.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;Most of the customers that have asked us about how to accomplish this with Sync Framework need something special.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;For instance, they are creating an end-to-end application and want explicit control over everything (instead of leaving that up to the end user) including where the files are synchronized, etc.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;Other examples are customers who specifically want the files in Azure Blob Storage so that they can use them with their Azure Web Application.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;The bottom line is that if Live Mesh meets your needs, then great.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;If not, Sync Framework is a perfect alternative for meeting the synchronization needs of your application.&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0in 0in 10pt" class=MsoNormal&gt;&lt;FONT size=3&gt;So there it is.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;This is a simple example of how to synchronize files with Azure Blob Storage.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;You can take this a lot further by for instance hosting in a Windows Azure Web Role and storing the item metadata directly in the file metadata.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;But using the method described above is fast to get up and running and performs well for a number of scenarios.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;Let us know if you have any questions or comments.&lt;/FONT&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0in 0in 10pt" class=MsoNormal&gt;&lt;FONT size=3&gt;The full &lt;/FONT&gt;&lt;A title="File Sync Sample to Windows Azure Blob" href="https://code.msdn.microsoft.com/Release/ProjectReleases.aspx?ProjectName=sync&amp;amp;ReleaseId=3638" target=_blank mce_href="https://code.msdn.microsoft.com/Release/ProjectReleases.aspx?ProjectName=sync&amp;amp;ReleaseId=3638"&gt;&lt;FONT size=3&gt;sample code is available here&lt;/FONT&gt;&lt;/A&gt;&lt;FONT size=3&gt;.&lt;/FONT&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0in 0in 10pt" class=MsoNormal&gt;&lt;FONT size=3&gt;Mike&lt;/FONT&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9932218" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/sync/archive/tags/Microsoft+Sync+Framework/default.aspx">Microsoft Sync Framework</category><category domain="http://blogs.msdn.com/sync/archive/tags/File+Sync/default.aspx">File Sync</category><category domain="http://blogs.msdn.com/sync/archive/tags/technical+article/default.aspx">technical article</category></item><item><title>Synchronizing a Remote Replica By Using a Proxy Provider</title><link>http://blogs.msdn.com/sync/archive/2009/11/30/synchronizing-a-remote-replica-by-using-a-proxy-provider.aspx</link><pubDate>Mon, 30 Nov 2009 21:01:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9930410</guid><dc:creator>LarenC</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.msdn.com/sync/comments/9930410.aspx</comments><wfw:commentRss>http://blogs.msdn.com/sync/commentrss.aspx?PostID=9930410</wfw:commentRss><description>&lt;P&gt;In a typical synchronization scenario, the two data stores are on different computers or devices that are connected over a network. A controlling application&amp;nbsp;runs on a third computer or on the same computer as one of the data stores. A common&amp;nbsp;way to perform synchronization is for the synchronization providers to run on the computer local to the controlling application. In a typical implementation, each provider&amp;nbsp;communicates directly with the remote data store to send and retrieve&amp;nbsp;data in a piecemeal fashion. This approach typically means lots of local-remote round trips to retrieve items and to apply changes, and relies on the local computer to perform the bulk of the synchronization processing. There's a better way! A more efficient method is to&amp;nbsp;use a proxy provider on the local computer. The proxy provider&amp;nbsp;sends metadata and data to a provider that runs on the remote computer, allowing the bulk of synchronization processing to&amp;nbsp;be distributed to the remote computer. When change data caching is added, only one round trip is needed to process each change batch.&lt;/P&gt;
&lt;P&gt;I've written an article that shows you how to implement a proxy provider that uses Windows Communication Foundation (WCF) to send data and commands over the Internet to a remote provider running on a Web server. The pattern used in this article can be easily adapted to work with any protocol over any network.&lt;/P&gt;
&lt;P&gt;The article can be read here: &lt;A class="" href="http://msdn.microsoft.com/en-us/library/ee819079.aspx" mce_href="http://msdn.microsoft.com/en-us/library/ee819079.aspx"&gt;Synchronizing a Remote Replica By Using a Proxy Provider&lt;/A&gt;.&lt;/P&gt;
&lt;P&gt;The article draws heavily on the&amp;nbsp;&lt;EM&gt;Sync101 with Remote Change Application over WCF&lt;/EM&gt; sample on the MSDN Code Gallery. If you'd rather skip the reading and just look at the code, click here: &lt;SPAN class=CodePlexPageHeader id=ctl00_ctl00_Content_TabContentPanel_Content_TitleLabel&gt;&lt;A class="" href="http://code.msdn.microsoft.com/Release/ProjectReleases.aspx?ProjectName=sync&amp;amp;ReleaseId=3421" mce_href="http://code.msdn.microsoft.com/Release/ProjectReleases.aspx?ProjectName=sync&amp;amp;ReleaseId=3421"&gt;Sync101 with Remote Change Application over WCF&lt;/A&gt;.&lt;/SPAN&gt;&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9930410" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/sync/archive/tags/Microsoft+Sync+Framework/default.aspx">Microsoft Sync Framework</category><category domain="http://blogs.msdn.com/sync/archive/tags/technical+article/default.aspx">technical article</category><category domain="http://blogs.msdn.com/sync/archive/tags/proxy+provider/default.aspx">proxy provider</category></item><item><title>PDC Keynote Recording - Kelley Blue Book's use of SQL Azure Data Sync</title><link>http://blogs.msdn.com/sync/archive/2009/11/25/pdc-keynote-recording-kelley-blue-book-s-use-of-sql-azure-data-sync.aspx</link><pubDate>Wed, 25 Nov 2009 19:54:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9928795</guid><dc:creator>liamca</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.msdn.com/sync/comments/9928795.aspx</comments><wfw:commentRss>http://blogs.msdn.com/sync/commentrss.aspx?PostID=9928795</wfw:commentRss><description>&lt;P&gt;Last week at PDC we announced the availability of our first CTP of &lt;A title="SQL Azure Data Sync - Developer" href="http://www.microsoft.com/windowsazure/developers/sqlazure/datasync/" target=_blank mce_href="http://www.microsoft.com/windowsazure/developers/sqlazure/datasync/"&gt;SQL Azure Data Sync&lt;/A&gt;.&amp;nbsp; In the keynote, Andy Lapin of &lt;A title="Kelley Blue Book" href="http://www.kbb.com/" target=_blank mce_href="http://www.kbb.com/"&gt;Kelley Blue Book&lt;/A&gt; explained how they keep their community databases up-to-date using this technolgy to synchronize data between their on-premises SQL Server and SQL Azure.&amp;nbsp; The recording is &lt;A title="PDC Keynote - SQL Azure Data Sync" href="http://microsoftpdc.com/Sessions/KEY01" target=_blank mce_href="http://microsoftpdc.com/Sessions/KEY01"&gt;now available &lt;/A&gt;&amp;nbsp;for you to view (the Kelley Blue Book portion of the keynote starts at about 1:18:00).&amp;nbsp; &lt;/P&gt;
&lt;P&gt;Ultimately, one of the goals of this CTP is to get your feedback.&amp;nbsp; What is it that you like or dislike about it?&amp;nbsp; Are you primarily interested in the Visual Studio integration or would you like us to see us add additional capabilities such as advanced monitoring or logging to the SQL Server provisioning tool.&amp;nbsp; So please send us your thoughts (good or bad) here:&amp;nbsp; &lt;/P&gt;
&lt;P&gt;&lt;A href="http://social.microsoft.com/Forums/en-US/syncfeedback/threads"&gt;http://social.microsoft.com/Forums/en-US/syncfeedback/threads&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;Liam&lt;/P&gt;
&lt;P mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9928795" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/sync/archive/tags/Microsoft+Sync+Framework/default.aspx">Microsoft Sync Framework</category><category domain="http://blogs.msdn.com/sync/archive/tags/Video/default.aspx">Video</category><category domain="http://blogs.msdn.com/sync/archive/tags/SQL+Azure/default.aspx">SQL Azure</category><category domain="http://blogs.msdn.com/sync/archive/tags/Database+Sync/default.aspx">Database Sync</category><category domain="http://blogs.msdn.com/sync/archive/tags/SQL+Azure+Data+sync/default.aspx">SQL Azure Data sync</category></item><item><title>SQL Pass Conference &amp; Synchronization to SQL Azure</title><link>http://blogs.msdn.com/sync/archive/2009/11/04/sql-pass-synchronization-to-sql-azure.aspx</link><pubDate>Wed, 04 Nov 2009 17:34:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9917438</guid><dc:creator>liamca</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.msdn.com/sync/comments/9917438.aspx</comments><wfw:commentRss>http://blogs.msdn.com/sync/commentrss.aspx?PostID=9917438</wfw:commentRss><description>&lt;FONT size=3&gt;&lt;FONT face=Calibri&gt;
&lt;P style="MARGIN: 0in 0in 10pt" class=MsoNormal mce_keep="true"&gt;Yesterday was the first day of the SQL Server conference, &lt;A href="http://summit2009.sqlpass.org/"&gt;SQL Pass&lt;/A&gt;, here in Seattle.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;It was a really exciting day for me because I had the opportunity to present our new synchronization capabilities to the cloud in the opening day keynote and in a subsequent session.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;&lt;?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0in 0in 10pt" class=MsoNormal&gt;We introduced the first piece of Project “Huron”, that is a technology based on the Sync Framework&amp;nbsp;enabling people to use Windows Azure as a central Data Hub for&amp;nbsp;all information.&amp;nbsp; To accomplish this, later this month&amp;nbsp;we will make available for download an early preview of a tool that provides the ability to extend a SQL Server on-premises databases to the cloud.&amp;nbsp; Once configured users can then easily extend data from the cloud to mobile users and remote offices.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0in 0in 10pt" class=MsoNormal&gt;Using this tool and with the help of one of our partners, &lt;A href="http://www.archetype-inc.com/"&gt;Archetype&lt;/A&gt;, we showed how companies can easily extend their on-premises SQL Servers to SQL Azure using data synchronization, allowing the data stores to co-exist and interoperate seamlessly.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0in 0in 10pt" class=MsoNormal&gt;All of this can be setup using a wizard.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;Then from an automatically generated SQL Agent, the synchronization process is executed periodically to move the incremental changes between SQL Server and SQL Azure.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0in 0in 10pt" class=MsoNormal&gt;&lt;SPAN style="LINE-HEIGHT: 115%; FONT-FAMILY: 'Calibri','sans-serif'; FONT-SIZE: 11pt; mso-fareast-font-family: Calibri; mso-bidi-font-family: 'Times New Roman'; mso-ascii-theme-font: minor-latin; mso-fareast-theme-font: minor-latin; mso-hansi-theme-font: minor-latin; mso-bidi-theme-font: minor-bidi; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA"&gt;Here are a few screenshots of the tool:&lt;/SPAN&gt;&lt;/P&gt;&lt;/FONT&gt;&lt;/FONT&gt;
&lt;P mce_keep="true"&gt;
&lt;P&gt;&lt;IMG style="WIDTH: 500px; HEIGHT: 343px" title="SQL Azure Server Credentials" alt="SQL Azure Server Credentials" src="http://blogs.msdn.com/photos/sync/images/9917427/500x343.aspx" width=500 height=343 mce_src="http://blogs.msdn.com/photos/sync/images/9917427/500x343.aspx"&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;IMG style="WIDTH: 500px; HEIGHT: 343px" title="Choose Tables to Sync" alt="Choose Tables to Sync" src="http://blogs.msdn.com/photos/sync/images/9917426/500x343.aspx" width=500 height=343 mce_src="http://blogs.msdn.com/photos/sync/images/9917426/500x343.aspx"&gt;&lt;/P&gt;
&lt;P mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;IMG style="WIDTH: 500px; HEIGHT: 343px" title="Sync Progress" alt="Sync Progress" src="http://blogs.msdn.com/photos/sync/images/9917429/500x343.aspx" width=500 height=343 mce_src="http://blogs.msdn.com/photos/sync/images/9917429/500x343.aspx"&gt;&lt;/P&gt;
&lt;P mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;IMG style="WIDTH: 365px; HEIGHT: 375px" title="Sync Complete" alt="Sync Complete" src="http://blogs.msdn.com/photos/sync/images/9917428/365x375.aspx" width=365 height=375 mce_src="http://blogs.msdn.com/photos/sync/images/9917428/365x375.aspx"&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;FONT size=3&gt;&lt;FONT face=Calibri&gt;Watch for more details over this month at the Professional Developer Conference and in this blog for other new capabilities we are providing to for integration to Windows Azure and SQL Azure.&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT size=3&gt;&lt;FONT face=Calibri&gt;&amp;nbsp;Liam Cavanagh&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9917438" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/sync/archive/tags/Microsoft+Sync+Framework/default.aspx">Microsoft Sync Framework</category><category domain="http://blogs.msdn.com/sync/archive/tags/SQL+Server+2008/default.aspx">SQL Server 2008</category><category domain="http://blogs.msdn.com/sync/archive/tags/Huron/default.aspx">Huron</category><category domain="http://blogs.msdn.com/sync/archive/tags/SQL+Azure/default.aspx">SQL Azure</category><category domain="http://blogs.msdn.com/sync/archive/tags/Database+Sync/default.aspx">Database Sync</category></item><item><title>New Sync Framework Samples</title><link>http://blogs.msdn.com/sync/archive/2009/10/26/new-sync-framework-samples.aspx</link><pubDate>Mon, 26 Oct 2009 22:11:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9913204</guid><dc:creator>LarenC</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.msdn.com/sync/comments/9913204.aspx</comments><wfw:commentRss>http://blogs.msdn.com/sync/commentrss.aspx?PostID=9913204</wfw:commentRss><description>We have lots of new samples on &lt;A href="http://code.msdn.microsoft.com/sync"&gt;Sync Framework Code Gallery&lt;/A&gt;. These samples demonstrate some of the most important and exciting features of Sync Framework 2.0. If you are new to Sync Framework or are looking for ways to write code to solve your synchronization problems, chances are we have a sample that can get you started. Here are some of the highlights: 
&lt;P mce_keep="true"&gt;&lt;B&gt;Sync101 Samples&lt;/B&gt;&lt;/P&gt;
&lt;P&gt;This set of samples illustrates various concepts and features needed to synchronize a custom data store, such as:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;A href="https://code.msdn.microsoft.com/Release/ProjectReleases.aspx?ProjectName=sync&amp;amp;ReleaseId=3414"&gt;Sync101 with Simple Providers&lt;/A&gt;, which shows how to write a basic synchronization application that uses simple custom providers.&lt;/LI&gt;
&lt;LI&gt;&lt;A href="https://code.msdn.microsoft.com/Release/ProjectReleases.aspx?ProjectName=sync&amp;amp;ReleaseId=3417"&gt;Sync101 with Constraint Conflicts&lt;/A&gt;, which shows how to write a standard custom provider that uses Windows Communication Foundation (WCF) to synchronize data between replicas on different computers.&lt;/LI&gt;
&lt;LI&gt;&lt;A href="https://code.msdn.microsoft.com/Release/ProjectReleases.aspx?ProjectName=sync&amp;amp;ReleaseId=3419"&gt;Sync101 with Custom Filtering&lt;/A&gt;, which shows how to track custom filters and how to use a standard custom provider to send changes from a filter-tracking replica to two different filtered replicas.&lt;/LI&gt;&lt;/UL&gt;
&lt;P mce_keep="true"&gt;&lt;B&gt;Database Synchronization Provider Samples&lt;/B&gt;&lt;/P&gt;
&lt;P&gt;This set of samples illustrates various concepts around using database synchronization providers to synchronize between SQL Server databases and SQL Server Compact databases, such as:&lt;/P&gt;
&lt;UL type=disc&gt;
&lt;LI&gt;&lt;A href="https://code.msdn.microsoft.com/Release/ProjectReleases.aspx?ProjectName=sync&amp;amp;ReleaseId=3422"&gt;Database Sync: SQL Server and SQL Server Compact&lt;/A&gt;, which shows how to use database synchronization providers to configure and execute peer-to-peer synchronization between a SQL Server database and one or more SQL Server Compact databases.&lt;/LI&gt;&lt;/UL&gt;
&lt;P mce_keep="true"&gt;&lt;B&gt;File Synchronization Provider Sample&lt;/B&gt;&lt;/P&gt;
&lt;P&gt;This sample shows how to use the file synchronization provider.&lt;/P&gt;
&lt;UL type=disc&gt;
&lt;LI&gt;&lt;A href="https://code.msdn.microsoft.com/Release/ProjectReleases.aspx?ProjectName=sync&amp;amp;ReleaseId=3424"&gt;File Synchronization Provider Sample&lt;/A&gt;, which shows how to use the file synchronization provider, a fully functioning provider that helps an application to synchronize files and folders in NTFS, FAT, and SMB file systems.&lt;/LI&gt;&lt;/UL&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9913204" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/sync/archive/tags/Microsoft+Sync+Framework/default.aspx">Microsoft Sync Framework</category><category domain="http://blogs.msdn.com/sync/archive/tags/File+Sync/default.aspx">File Sync</category><category domain="http://blogs.msdn.com/sync/archive/tags/Sample/default.aspx">Sample</category><category domain="http://blogs.msdn.com/sync/archive/tags/Database+Sync/default.aspx">Database Sync</category><category domain="http://blogs.msdn.com/sync/archive/tags/Filtering/default.aspx">Filtering</category><category domain="http://blogs.msdn.com/sync/archive/tags/Constraint+Conflicts/default.aspx">Constraint Conflicts</category><category domain="http://blogs.msdn.com/sync/archive/tags/Simple+Providers/default.aspx">Simple Providers</category></item><item><title>SharePoint 2010, Windows 7 and PwC Now Integrate Microsoft Sync Framework v2.0</title><link>http://blogs.msdn.com/sync/archive/2009/10/19/sharepoint-2010-now-integrates-microsoft-sync-framework.aspx</link><pubDate>Mon, 19 Oct 2009 18:17:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9909291</guid><dc:creator>liamca</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.msdn.com/sync/comments/9909291.aspx</comments><wfw:commentRss>http://blogs.msdn.com/sync/commentrss.aspx?PostID=9909291</wfw:commentRss><description>&lt;P&gt;As we announced earlier today, Microsoft Sync Framework V2.0 is now available for &lt;A title="Sync Framework v2.0" href="http://www.microsoft.com/downloads/details.aspx?FamilyID=89adbb1e-53ff-41b5-ba17-8e43a2e66254&amp;amp;displaylang=en" target=_blank mce_href="http://www.microsoft.com/downloads/details.aspx?FamilyID=89adbb1e-53ff-41b5-ba17-8e43a2e66254&amp;amp;displaylang=en"&gt;public download&lt;/A&gt;.&lt;/P&gt;
&lt;P&gt;Along with this release I wanted to outline a number of companies and partners that are already using Sync Framework v2.0 including Windows 7, Microsoft Office 2010 and PricewaterhouseCoopers (PwC).&amp;nbsp; &lt;/P&gt;
&lt;P&gt;SharePoint has also chosen to integrate Microsoft Sync Framework as part of their solution for synchronizing to Office SharePoint 2010. The SharePoint and Office teams will use the Sync Framework as the engine powering synchronization between Office Workspace (Groove) and SharePoint.&amp;nbsp; In addition, the SharePoint server will also expose Sync Framework API’s that will allow any developer to build providers to integrate new data stores into SharePoint.&lt;/P&gt;
&lt;BLOCKQUOTE&gt;
&lt;P&gt;&lt;EM&gt;"The Sync Framework will greatly reduce the amount of code that an ISV needs to create, and this represents probably the most painful code that they otherwise would have had to write".&lt;BR&gt;&lt;/EM&gt;Maxim Lukiyanov, Program Manager SharePoint Server, Microsoft&lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;P&gt;For more information on this please see our new case study: &lt;FONT size=3&gt;&lt;FONT face=Calibri&gt;&lt;SPAN style="COLOR: #1f497d"&gt;&lt;A href="http://www.microsoft.com/casestudies/Case_Study_Detail.aspx?casestudyid=4000005540"&gt;Microsoft Sync Framework used to Create Microsoft SharePoint Workspace 2010&lt;/A&gt;&lt;?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;The Windows 7 Device Stage gives users a common user interface to manage and synchronize data with their Windows 7 enabled phone.&amp;nbsp; Contacts, calendar, tasks and even notes can be synchronized with any data store. Sync Framework v2.0 is the easiest way for developers to implement data synchronization providers for any store to enable it for the Windows 7 Device synchronization experience. &lt;/P&gt;
&lt;BLOCKQUOTE&gt;
&lt;P&gt;&lt;EM&gt;"The flexibility of Sync Framework and its ability to track and exchange data really set this technology apart.&amp;nbsp; Since Sync Framework is data agnostic this allowed us to develop a framework tailored around contact, calendar, tasks and notes data".&amp;nbsp; &lt;/EM&gt;&lt;BR&gt;Anna Boyd, Windows 7 Engineering, Microsoft&lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;P&gt;PricewaterhouseCoopers has put a system in deployment for 60,000+ mobile auditors in 150 countries to allow much of their work to be done remotely at the client site, making disconnected, offline use of their application and friction free collaboration across teams.&amp;nbsp; &lt;/P&gt;
&lt;BLOCKQUOTE&gt;
&lt;P&gt;&lt;EM&gt;"Our implementation of Sync Framework ‘just worked’ for our auditors.&amp;nbsp; If they set automatic synchronization, our software finds peers, verifies access rights to the same engagement database, and updates all databases.&amp;nbsp; They might be connected to each other over a client’s network, or just via ad hoc (no access point) WiFi.&amp;nbsp; If just one laptop has access to the servers, that laptop automatically funnels all changes from the laptops to the server and vice versa.&amp;nbsp; No manual configuration is needed". &lt;BR&gt;&lt;/EM&gt;Dr. Glenn Ricart, Technology and Development Leader, PricewaterhouseCoopers&lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;P mce_keep="true"&gt;Liam Cavanagh&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9909291" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/sync/archive/tags/Microsoft+Sync+Framework/default.aspx">Microsoft Sync Framework</category><category domain="http://blogs.msdn.com/sync/archive/tags/Case+Study/default.aspx">Case Study</category><category domain="http://blogs.msdn.com/sync/archive/tags/SQL+Azure/default.aspx">SQL Azure</category></item><item><title>Sync Framework 2.0 Available for Download</title><link>http://blogs.msdn.com/sync/archive/2009/10/19/sync-framework-2-0-available-for-download.aspx</link><pubDate>Mon, 19 Oct 2009 15:27:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9909126</guid><dc:creator>LarenC</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.msdn.com/sync/comments/9909126.aspx</comments><wfw:commentRss>http://blogs.msdn.com/sync/commentrss.aspx?PostID=9909126</wfw:commentRss><description>&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-SIZE: 8.5pt; FONT-FAMILY: Verdana"&gt;I am happy to announce the availability of &lt;A href="http://www.microsoft.com/downloads/details.aspx?FamilyID=89adbb1e-53ff-41b5-ba17-8e43a2e66254&amp;amp;displaylang=en"&gt;Sync Framework 2.0&lt;/A&gt;. Sync Framework 2.0 expands on the capabilities offered by Sync Framework 1.0:&lt;?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;UL type=disc&gt;
&lt;LI class=MsoNormal style="MARGIN: 0in 0in 0pt; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto; mso-list: l2 level1 lfo1; tab-stops: list .5in"&gt;&lt;SPAN style="FONT-SIZE: 8.5pt; FONT-FAMILY: Verdana"&gt;Adds features that cater to new scenarios or scenarios that were difficult to support.&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI class=MsoNormal style="MARGIN: 0in 0in 0pt; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto; mso-list: l2 level1 lfo1; tab-stops: list .5in"&gt;&lt;SPAN style="FONT-SIZE: 8.5pt; FONT-FAMILY: Verdana"&gt;Reduces the amount of work required to develop providers.&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI class=MsoNormal style="MARGIN: 0in 0in 0pt; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto; mso-list: l2 level1 lfo1; tab-stops: list .5in"&gt;&lt;SPAN style="FONT-SIZE: 8.5pt; FONT-FAMILY: Verdana"&gt;Supports more data sources with new built-in providers.&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/LI&gt;&lt;/UL&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-SIZE: 8.5pt; FONT-FAMILY: Verdana"&gt;The major new features and improvements included in Sync Framework 2.0 are:&lt;BR&gt;&lt;BR&gt;&lt;B&gt;In Core Components: &lt;/B&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;UL type=disc&gt;
&lt;LI class=MsoNormal style="MARGIN: 0in 0in 0pt; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto; mso-list: l0 level1 lfo2; tab-stops: list .5in"&gt;&lt;B&gt;&lt;SPAN style="FONT-SIZE: 8.5pt; FONT-FAMILY: Verdana"&gt;Simple Providers&lt;/SPAN&gt;&lt;/B&gt;&lt;SPAN style="FONT-SIZE: 8.5pt; FONT-FAMILY: Verdana"&gt;: Reduce the amount of work required to develop providers, especially when the data source has very few synchronization-related capabilities, such as change-tracking. The goal is to enable a developer to write a provider without having to become a synchronization expert. The majority of the code that is required for a simple provider is limited to that responsible for interacting with the data source. Simple providers support many complex synchronization scenarios, such as filtering, concurrency and constraint conflict handling, and anchor-based enumeration. &lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI class=MsoNormal style="MARGIN: 0in 0in 0pt; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto; mso-list: l0 level1 lfo2; tab-stops: list .5in"&gt;&lt;B&gt;&lt;SPAN style="FONT-SIZE: 8.5pt; FONT-FAMILY: Verdana"&gt;Flexible Filtering&lt;/SPAN&gt;&lt;/B&gt;&lt;SPAN style="FONT-SIZE: 8.5pt; FONT-FAMILY: Verdana"&gt;: Change unit filters and custom filters have been added to the custom provider components. These filters, in addition to the item filters from Sync Framework 1.0, enable you to filter your data in whatever way is most useful. Filter negotiation allows the source and destination providers to negotiate the filter used during the synchronization session. Change unit filters enable a provider to specify that, while the replica it serves stores all items in the synchronization scope, the replica stores a reduced representation of each item. For example, when an item is a contact a device might store only the name and phone number of the contact as compared to the complete contact stored on a PC. Custom filters enable you to define a filter in whatever way is most appropriate, including filters that allow an item to move into or out of the filter as the item data changes. For example, a media storage device stores only songs that are rated as three stars or better. When the rating on a song changes from four stars to two stars, the song moves out of the filter. Filter negotiation allows a destination provider to specify the filter to be used by the source provider during change enumeration; the source provider can accept or reject a filter. If a source provider does not support the requested filter then the destination provider can choose to receive all of the data and do the filtering itself. &lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI class=MsoNormal style="MARGIN: 0in 0in 0pt; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto; mso-list: l0 level1 lfo2; tab-stops: list .5in"&gt;&lt;B&gt;&lt;SPAN style="FONT-SIZE: 8.5pt; FONT-FAMILY: Verdana"&gt;Improved Conflict Handling&lt;/SPAN&gt;&lt;/B&gt;&lt;SPAN style="FONT-SIZE: 8.5pt; FONT-FAMILY: Verdana"&gt;: Additional conflict scenarios are supported, such as reporting constraint conflicts, managing logged conflicts, and resolving conflicts by using a last-writer-wins policy. Constraint conflicts are conflicts that violate constraints that are put on items or change units, such as the relationship of folders or the location of identically named data within a file system. Sync Framework includes components to help resolve constraint conflicts and apply the resolution to the destination replica. Conflict logging is enhanced by Sync Framework components that help manage the log, such as by removing obsolete conflicts. A last-writer-wins conflict resolution policy can be used to resolve concurrency conflicts (in which an item is updated by more than one replica) by keeping the most recently made change, regardless of where the change was made. Sync Framework supports this policy by enabling an application to retrieve the time a change was made on the source and destination replicas. The application can then compare the two times and apply the last change. &lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI class=MsoNormal style="MARGIN: 0in 0in 0pt; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto; mso-list: l0 level1 lfo2; tab-stops: list .5in"&gt;&lt;B&gt;&lt;SPAN style="FONT-SIZE: 8.5pt; FONT-FAMILY: Verdana"&gt;Data Conversion between Providers&lt;/SPAN&gt;&lt;/B&gt;&lt;SPAN style="FONT-SIZE: 8.5pt; FONT-FAMILY: Verdana"&gt;: In some scenarios, synchronization providers synchronize the same type of data (such as sales data), but the data format that each provider requires is different. To address this scenario, Sync Framework enables you to implement interfaces that convert data to the format that each provider requires. In addition to data conversion APIs that can be used for any type of custom provider, Sync Framework also includes conversion APIs specifically for the file synchronization provider. &lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI class=MsoNormal style="MARGIN: 0in 0in 0pt; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto; mso-list: l0 level1 lfo2; tab-stops: list .5in"&gt;&lt;B&gt;&lt;SPAN style="FONT-SIZE: 8.5pt; FONT-FAMILY: Verdana"&gt;Change Application Service&lt;/SPAN&gt;&lt;/B&gt;&lt;SPAN style="FONT-SIZE: 8.5pt; FONT-FAMILY: Verdana"&gt;: Increases the flexibility and usefulness of the change applier component of Sync Framework. By performing the same actions as the standard change applier, but in a more granular way, the change application service gives a destination provider the ability to use only the features that it requires. &lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI class=MsoNormal style="MARGIN: 0in 0in 0pt; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto; mso-list: l0 level1 lfo2; tab-stops: list .5in"&gt;&lt;B&gt;&lt;SPAN style="FONT-SIZE: 8.5pt; FONT-FAMILY: Verdana"&gt;Tracing&lt;/SPAN&gt;&lt;/B&gt;&lt;SPAN style="FONT-SIZE: 8.5pt; FONT-FAMILY: Verdana"&gt;: Enables you to trace the execution of several components, which is useful during application debugging. This download provides the .tmf files that can be used to view a trace, flush the logger, and format the binary trace file. For more information about how to trace Sync Framework execution, see “Tracing Sync Framework Components” in the documentation that installs with the Sync Framework SDK. &lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/LI&gt;&lt;/UL&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-SIZE: 8.5pt; FONT-FAMILY: Verdana"&gt;&lt;BR&gt;&lt;B&gt;In Database Providers: &lt;/B&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;UL type=disc&gt;
&lt;LI class=MsoNormal style="MARGIN: 0in 0in 0pt; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto; mso-list: l1 level1 lfo3; tab-stops: list .5in"&gt;&lt;B&gt;&lt;SPAN style="FONT-SIZE: 8.5pt; FONT-FAMILY: Verdana"&gt;New Database Providers (SQL Server and SQL Server Compact)&lt;/SPAN&gt;&lt;/B&gt;&lt;SPAN style="FONT-SIZE: 8.5pt; FONT-FAMILY: Verdana"&gt;: Enable hub-and-spoke and peer-to-peer synchronization for SQL Server, SQL Server Express, and SQL Server Compact. Sync Framework automatically creates all of the commands that are required to communicate with each database. You do not have to write synchronization queries as you do with other providers. The providers support: flexible initialization options; batching of changes based on data size; and maintenance tasks, such as metadata cleanup and server database restore. &lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI class=MsoNormal style="MARGIN: 0in 0in 0pt; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto; mso-list: l1 level1 lfo3; tab-stops: list .5in"&gt;&lt;B&gt;&lt;SPAN style="FONT-SIZE: 8.5pt; FONT-FAMILY: Verdana"&gt;Robust Memory-Based Batching&lt;/SPAN&gt;&lt;/B&gt;&lt;SPAN style="FONT-SIZE: 8.5pt; FONT-FAMILY: Verdana"&gt;: Previous versions of Sync Framework and Sync Services for ADO.NET provided a way for developers to define their own batching logic but there were a lot of limitations, including significant complexity, excessive chattiness, out of memory issues, and restrictions on usage. Sync Framework 2.0 addresses all of these issues by providing a more complete and robust batching API. Developers no longer have to write batching logic themselves because Sync Framework divides changes into batches based on several properties in the API. Batches are now defined by memory consumption rather than the number of rows synchronized, which has eliminated out-of-memory issues for most common scenarios. &lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI class=MsoNormal style="MARGIN: 0in 0in 0pt; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto; mso-list: l1 level1 lfo3; tab-stops: list .5in"&gt;&lt;B&gt;&lt;SPAN style="FONT-SIZE: 8.5pt; FONT-FAMILY: Verdana"&gt;Provisioning and Management APIs&lt;/SPAN&gt;&lt;/B&gt;&lt;SPAN style="FONT-SIZE: 8.5pt; FONT-FAMILY: Verdana"&gt;: Provisioning and initialization activities that were previously exposed only through Visual Studio tooling have now been added to the database provider APIs. This includes the ability to provision an existing database by adding the change-tracking tables and triggers that are required by Sync Framework. It also includes the ability to start with an empty database, create the user schema, and provision that schema based on another server or client database that has already been provisioned. &lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI class=MsoNormal style="MARGIN: 0in 0in 0pt; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto; mso-list: l1 level1 lfo3; tab-stops: list .5in"&gt;&lt;B&gt;&lt;SPAN style="FONT-SIZE: 8.5pt; FONT-FAMILY: Verdana"&gt;Performance Improvements&lt;/SPAN&gt;&lt;/B&gt;&lt;SPAN style="FONT-SIZE: 8.5pt; FONT-FAMILY: Verdana"&gt;: The new database providers in this release have been thoroughly tested in large-scale scenarios in which a single server supports thousands of clients with hundreds of concurrent synchronization operations. This testing resulted in a large number of internal performance improvements that enable Sync Framework database providers to perform as well as other Microsoft technologies like Remote Data Access (RDA) while offering a wide range of capabilities that compete with end-to-end solutions like merge replication. &lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/LI&gt;&lt;/UL&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto"&gt;&lt;B&gt;&lt;SPAN style="FONT-SIZE: 8.5pt; FONT-FAMILY: Verdana"&gt;In File Synchronization Provider:&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/B&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt 0.5in; TEXT-INDENT: -0.25in; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto; mso-list: l3 level1 lfo4; tab-stops: list .5in"&gt;&lt;SPAN style="FONT-SIZE: 8.5pt; FONT-FAMILY: Symbol; mso-fareast-font-family: Symbol; mso-bidi-font-family: Symbol"&gt;&lt;SPAN style="mso-list: Ignore"&gt;·&lt;SPAN style="FONT: 7pt 'Times New Roman'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;B style="mso-bidi-font-weight: normal"&gt;&lt;SPAN style="FONT-SIZE: 8.5pt; FONT-FAMILY: Verdana"&gt;Data Conversion between Providers:&lt;/SPAN&gt;&lt;/B&gt;&lt;SPAN style="FONT-SIZE: 8.5pt; FONT-FAMILY: Verdana"&gt; The data transfer interface used by the file synchronization provider is now available in managed code. A custom provider that synchronizes some other data type can use the data transfer interface to convert its data to synchronize with a file synchronization provider.&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt 0.5in; TEXT-INDENT: -0.25in; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto; mso-list: l3 level1 lfo4; tab-stops: list .5in"&gt;&lt;SPAN style="FONT-SIZE: 8.5pt; FONT-FAMILY: Symbol; mso-fareast-font-family: Symbol; mso-bidi-font-family: Symbol"&gt;&lt;SPAN style="mso-list: Ignore"&gt;·&lt;SPAN style="FONT: 7pt 'Times New Roman'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;B style="mso-bidi-font-weight: normal"&gt;&lt;SPAN style="FONT-SIZE: 8.5pt; FONT-FAMILY: Verdana"&gt;Better File Transfer Performance: &lt;/SPAN&gt;&lt;/B&gt;&lt;SPAN style="FONT-SIZE: 8.5pt; FONT-FAMILY: Verdana"&gt;Improvements to the way file data is copied allow file data to be transferred up to 30% faster than in Sync Framework 1.0.&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt 0.5in; TEXT-INDENT: -0.25in; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto; mso-list: l3 level1 lfo4; tab-stops: list .5in"&gt;&lt;SPAN style="FONT-SIZE: 8.5pt; FONT-FAMILY: Symbol; mso-fareast-font-family: Symbol; mso-bidi-font-family: Symbol"&gt;&lt;SPAN style="mso-list: Ignore"&gt;·&lt;SPAN style="FONT: 7pt 'Times New Roman'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;B style="mso-bidi-font-weight: normal"&gt;&lt;SPAN style="FONT-SIZE: 8.5pt; FONT-FAMILY: Verdana"&gt;More Robust Synchronization: &lt;/SPAN&gt;&lt;/B&gt;&lt;SPAN style="FONT-SIZE: 8.5pt; FONT-FAMILY: Verdana"&gt;Instead of failing the entire synchronization session when a single file cannot be synchronized (including failures caused by network issues), the failure is flagged and the synchronization session continues.&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto"&gt;&lt;SPAN style="FONT-SIZE: 8.5pt; FONT-FAMILY: Verdana"&gt;To learn more about Sync Framework or to download Sync Framework 2.0, please visit the &lt;A href="http://msdn.microsoft.com/sync/default.aspx"&gt;&lt;FONT color=#0033cc&gt;Sync Framework Developer Center&lt;/FONT&gt;&lt;/A&gt;.&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9909126" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/sync/archive/tags/Microsoft+Sync+Framework/default.aspx">Microsoft Sync Framework</category><category domain="http://blogs.msdn.com/sync/archive/tags/Sync+Services+for+ADO.NET/default.aspx">Sync Services for ADO.NET</category><category domain="http://blogs.msdn.com/sync/archive/tags/File+Sync/default.aspx">File Sync</category><category domain="http://blogs.msdn.com/sync/archive/tags/Database+Sync/default.aspx">Database Sync</category></item><item><title>Sync Framework and our upcoming conferences</title><link>http://blogs.msdn.com/sync/archive/2009/10/05/sync-and-sql-pass.aspx</link><pubDate>Mon, 05 Oct 2009 19:31:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9903319</guid><dc:creator>liamca</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.msdn.com/sync/comments/9903319.aspx</comments><wfw:commentRss>http://blogs.msdn.com/sync/commentrss.aspx?PostID=9903319</wfw:commentRss><description>&lt;P&gt;The next few months are going to be&amp;nbsp;very busy for us here in the Sync Framework team.&amp;nbsp; Not only do we have Sync Framework v2 coming out shortly, we also have a number of conferences where we will talk about the work we have been doing with some of external companies and internal groups here at Microsoft to allow developers to plug-in synchronization to systems like SQL Server and SQL Azure.&amp;nbsp; &lt;/P&gt;
&lt;P&gt;Starting in November, we will be at &lt;A title="SQL Pass Conference" href="http://summit2009.sqlpass.org/" target=_blank mce_href="http://summit2009.sqlpass.org/"&gt;SQL PASS&lt;/A&gt;, and then at the &lt;A title="PDC Conference" href="http://microsoftpdc.com/" target=_blank mce_href="http://microsoftpdc.com/"&gt;PDC&lt;/A&gt; for the launch of SQL Azure.&amp;nbsp; Last week I recorded a Channel 9 video along with Buck Woody and Michael Rys on the upcoming SQL PASS Summit. You can view the video here:&lt;/P&gt;
&lt;P style="MARGIN: 0in 0in 0pt" class=MsoNormal&gt;&lt;SPAN style="COLOR: #1f497d"&gt;&lt;A href="http://channel9.msdn.com/posts/LarryLarsen/Upcoming-SQL-PASS-Summit-1/"&gt;&lt;FONT size=3 face=Calibri&gt;http://channel9.msdn.com/posts/LarryLarsen/Upcoming-SQL-PASS-Summit-1/&lt;/FONT&gt;&lt;/A&gt;&lt;FONT size=3&gt;&lt;FONT face=Calibri&gt; &lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;Here is a summary of the video:&lt;/P&gt;
&lt;BLOCKQUOTE&gt;
&lt;P&gt;&lt;EM&gt;Join thousands of SQL Server &amp;amp; BI professionals at the Washington State Convention &amp;amp; Trade Center in Seattle from Nov. 2-5 for the largest SQL Server conference in the world!&amp;nbsp; PASS Summit offers 168 technical sessions presented by SQL Server experts, one-on-one time with Microsoft’s SQL Server engineering team, free troubleshooting &amp;amp; design architecture guidance from Microsoft consultants, keynotes from Microsoft’s senior executives and much more! &lt;/EM&gt;&lt;/P&gt;
&lt;P&gt;&lt;EM&gt;Senior Data Platform Technology Specialist Buck Woody stopped by the Channel 9 studio to talk to Michael Rys, Principal Program Manager in SQL Server Engineering Team, and Liam Cavanagh, Senior Program Manager, about upcoming sessions you won’t want to miss this year’s PASS Summit conference.&lt;/EM&gt; &lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;P&gt;Liam Cavanagh&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9903319" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/sync/archive/tags/Microsoft+Sync+Framework/default.aspx">Microsoft Sync Framework</category><category domain="http://blogs.msdn.com/sync/archive/tags/Video/default.aspx">Video</category><category domain="http://blogs.msdn.com/sync/archive/tags/SQL+Azure/default.aspx">SQL Azure</category></item><item><title>Announcing Sync Framework 2.0 CTP2</title><link>http://blogs.msdn.com/sync/archive/2009/06/04/announcing-sync-framework-2-0-ctp2.aspx</link><pubDate>Fri, 05 Jun 2009 01:49:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9700425</guid><dc:creator>liamca</dc:creator><slash:comments>4</slash:comments><comments>http://blogs.msdn.com/sync/comments/9700425.aspx</comments><wfw:commentRss>http://blogs.msdn.com/sync/commentrss.aspx?PostID=9700425</wfw:commentRss><description>&lt;P&gt;I am extremely happy to announce the availability of Sync Framework 2.0 CTP2 .&amp;nbsp; Sync Framework 2.0 expands on the capabilities offered by Sync Framework 1.0:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;Adds features that cater to new scenarios or scenarios that were difficult to support.&lt;/LI&gt;
&lt;LI&gt;Reduces the amount of work required to develop providers.&lt;/LI&gt;
&lt;LI&gt;Supports more data sources with new built-in providers.&lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;The major new features included in this CTP are:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;STRONG&gt;New database providers (SqlSyncProvider and SqlCeSyncProvider)&lt;/STRONG&gt;&lt;BR&gt;Enable hub-and-spoke and peer-to-peer synchronization for SQL Server, SQL Server Express, and SQL Server Compact. Sync Framework automatically creates all of the commands that are required to communicate with each database. You do not have to write synchronization queries as you do with other providers. The providers support: flexible initialization options; batching of changes based on data size; and maintenance tasks, such as metadata cleanup and server database restore.&lt;STRONG&gt;&amp;nbsp;&lt;/STRONG&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Custom filters&lt;/STRONG&gt;&lt;BR&gt;Enable a filtered replica to store item data only for items that are in the filter, such as a media storage replica that stores only songs that are rated as three stars or better. As the rating on a song changes, an item might move in or out of the filter. A filter-tracking replica is another replica in the community that can identify which items are in the filter and which have moved in or out of the filter recently. A filter-tracking replica may store item data for items that are not in the filter. Sync Framework supports efficient synchronization between filtered replicas and filter-tracking replicas, and maintains all of the necessary metadata.&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Improved conflict handling&lt;/STRONG&gt;&lt;BR&gt;Sync Framework added several features in this release that make it easier to handle conflicts.&amp;nbsp;&lt;/LI&gt;
&lt;UL&gt;
&lt;LI&gt;Constraint conflict handling: Sync Framework now supports constraint conflicts, which are conflicts that violate constraints that are put on items or change units, such as the relationship of folders or the location of identically named data within a file system. A destination provider can report a constraint conflict to Sync Framework, and use Sync Framework components to resolve the conflict and determine how to apply the resolution to the destination replica.&amp;nbsp;&lt;/LI&gt;
&lt;LI&gt;Conflict logging: Sync Framework defines a set of conflict log interfaces and provides components that help manage conflicts in the log. Sync Framework also provides an in-memory implementation of the conflict log interfaces for replicas that do not contain a conflict log. It can be useful to save conflicts in a log so that they can be processed separately from the synchronization session, such as when a user needs to review conflicts and decide how to resolve them.&amp;nbsp;&lt;/LI&gt;
&lt;LI&gt;Last-writer-wins conflict resolution: An application might want to resolve concurrency conflicts (in which an item is updated by more than one replica) by keeping the most recently made change, regardless of where the change was made. Sync Framework supports this resolution option by enabling an application to retrieve the time a change was made on the source and destination replicas. The application can then compare the two times and apply the last change.&amp;nbsp;&lt;/LI&gt;
&lt;LI&gt;Improved simple provider conflict handling: Simple providers include a new set of conflict handling interfaces that make it easier to specify resolution actions for concurrency and constraint conflicts. &lt;/LI&gt;&lt;/UL&gt;
&lt;LI&gt;&lt;STRONG&gt;Data conversion between providers&lt;/STRONG&gt;&lt;BR&gt;In some scenarios, synchronization providers synchronize the same type of data (such as sales data), but the data format that each provider requires is different. To address this scenario, Sync Framework enables you to implement interfaces that convert data to the format that each provider requires. In addition to data conversion APIs that can be used for any type of custom provider, Sync Framework also includes conversion APIs specifically for the file synchronization provider.&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Change application service&lt;/STRONG&gt;&lt;BR&gt;Sync Framework includes a change applier implementation that most applications use to apply changes to a replica. In this CTP, Sync Framework introduces the change application service, which performs the same actions as the change applier, but in a more granular way. A destination provider that requires greater flexibility than the standard change applier can use the change application service to perform only the set of actions that are required. &lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;For more details please visit the Microsoft download center at:&lt;BR&gt;&lt;A href="http://www.microsoft.com/downloads/details.aspx?FamilyID=89adbb1e-53ff-41b5-ba17-8e43a2e66254&amp;amp;displaylang=en" mce_href="http://www.microsoft.com/downloads/details.aspx?FamilyID=89adbb1e-53ff-41b5-ba17-8e43a2e66254&amp;amp;displaylang=en"&gt;http://www.microsoft.com/downloads/details.aspx?FamilyID=89adbb1e-53ff-41b5-ba17-8e43a2e66254&amp;amp;displaylang=en&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;Nina Hu&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9700425" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/sync/archive/tags/Microsoft+Sync+Framework/default.aspx">Microsoft Sync Framework</category><category domain="http://blogs.msdn.com/sync/archive/tags/Sync+Services+for+ADO.NET/default.aspx">Sync Services for ADO.NET</category></item><item><title>TechEd 2009 - Building Applications with Microsoft SQL Data Services and Windows Azure (DAT316)</title><link>http://blogs.msdn.com/sync/archive/2009/05/05/teched-2009-building-applications-with-microsoft-sql-data-services-and-windows-azure.aspx</link><pubDate>Tue, 05 May 2009 03:06:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9587075</guid><dc:creator>liamca</dc:creator><slash:comments>2</slash:comments><comments>http://blogs.msdn.com/sync/comments/9587075.aspx</comments><wfw:commentRss>http://blogs.msdn.com/sync/commentrss.aspx?PostID=9587075</wfw:commentRss><description>&lt;P&gt;Hopefully a number of you will be attending this years TechEd in Los Angeles.&amp;nbsp; This year I will be co-presenting with David Robinson where we will be discussing SQL Data Services&amp;nbsp;and our "Huron" Data Hub project.&amp;nbsp; I am really looking forward to showing you our latest demo so I hope you can all make it.&amp;nbsp; If you are not able to make the session but are at the conference, I will also be at the SQL Data Services booth for quite a bit of the time, so please stop by so we can talk "sync".&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Here is the abstract for the session:&lt;/P&gt;
&lt;BLOCKQUOTE&gt;
&lt;P&gt;&lt;EM&gt;"Are you looking to reduce the costs of building and maintaining enterprise applications? Do you want to extend the reach of your applications across multiple devices, locations and partners? SQL Data Services and Windows Azure provides you a friction free, highly scalable platform for building applications. The scale and reach of the cloud lights up a new class of application scenarios. Come see how easy it is to consume SQL Data Services from within Windows Azure. In addition, we dive into Microsoft's new "Data Hub" for businesses and see how this SQL Data Services powered synchronization service allows for data aggregation within the Hub to provide straightforward data sharing between on-premises databases, business partners, remote offices, and mobile users". &lt;/EM&gt;&lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;P&gt;See you there!&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Liam Cavanagh&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9587075" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/sync/archive/tags/Microsoft+Sync+Framework/default.aspx">Microsoft Sync Framework</category><category domain="http://blogs.msdn.com/sync/archive/tags/SQL+Data+Services/default.aspx">SQL Data Services</category><category domain="http://blogs.msdn.com/sync/archive/tags/Huron/default.aspx">Huron</category></item><item><title>New Webcast Video - Drill Down Into the Next Release of the Microsoft Sync Framework </title><link>http://blogs.msdn.com/sync/archive/2009/05/02/new-webcast-video-drill-down-into-the-next-release-of-the-microsoft-sync-framework.aspx</link><pubDate>Sat, 02 May 2009 03:14:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9583182</guid><dc:creator>liamca</dc:creator><slash:comments>2</slash:comments><comments>http://blogs.msdn.com/sync/comments/9583182.aspx</comments><wfw:commentRss>http://blogs.msdn.com/sync/commentrss.aspx?PostID=9583182</wfw:commentRss><description>&lt;P style="MARGIN: 0in 0in 0pt" class=MsoNormal&gt;&lt;FONT size=3 face=Calibri&gt;We recently had a chance to record an MSDN webcast describing a handful of the new features that will ship in the next CTP of Sync Framework v2.&amp;nbsp; This particular session focuses primarily on those features we have built related to our offline and collaboration database scenarios. Please register at the following location:&lt;/FONT&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0in 0in 0pt" class=MsoNormal&gt;&lt;FONT size=3 face=Calibri&gt;&lt;/FONT&gt;&amp;nbsp;&lt;/P&gt;
&lt;P style="MARGIN: 0in 0in 0pt" class=MsoNormal&gt;&lt;FONT size=3 face=Calibri&gt;&lt;A href="http://msevents.microsoft.com/CUI/WebCastEventDetails.aspx?culture=en-US&amp;amp;EventID=1032413045&amp;amp;CountryCode=US"&gt;http://msevents.microsoft.com/CUI/WebCastEventDetails.aspx?culture=en-US&amp;amp;EventID=1032413045&amp;amp;CountryCode=US&lt;/A&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0in 0in 0pt" class=MsoNormal&gt;&lt;FONT size=3 face=Calibri&gt;&lt;/FONT&gt;&amp;nbsp;&lt;/P&gt;
&lt;P style="MARGIN: 0in 0in 0pt" class=MsoNormal&gt;&lt;FONT size=3 face=Calibri&gt;This session is a deep dive into the next release of the Microsoft Sync Framework with a focus on our database scenarios. Specifically, this session will discuss some of the work we have done in order to allow developers to synchronize SQL Compact in a peer to peer fashion. In addition, we will discuss the improvements we have made around batching to make it easier to use, expose more control over memory usage and provide resumability over transient networks that go up and down when performing sync operations. Furthermore, we will examine some of the performance related features baked into the runtime to improve the time it takes to initialize your client side database and synchronize large tables that have a less frequent rate of change. This will also include a discussion around some of the lessons we learned when performing scale and performance testing in an environment with 4000 clients and as much as 400 concurrent sync operations on a single server. These best practices were compiled at the end of one of the largest external implementations of the Microsoft Sync Framework&amp;nbsp; in the world. Finally, we will go over some of the new scenarios that we have enabled as a result of building on top of the Sync Framework, which provides much more flexibility around the shape of your topology. These scenarios include taking data stored in SQL Data Services and ADO.NET Data Services offline, USB shuttle scenarios, and traditional scenarios such as branch-office. This session will include demos that provide a deep dive into the use of these features as well as benchmark data around the performance of the Sync Framework in a large distributed environment.&lt;/FONT&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0in 0in 0pt" class=MsoNormal&gt;&lt;FONT size=3 face=Calibri&gt;&lt;/FONT&gt;&amp;nbsp;&lt;/P&gt;
&lt;P style="MARGIN: 0in 0in 0pt" class=MsoNormal&gt;&lt;FONT size=3 face=Calibri&gt;Enjoy and please send any and all feedback our way!&lt;/FONT&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0in 0in 0pt" class=MsoNormal&gt;&lt;FONT size=3 face=Calibri&gt;&lt;/FONT&gt;&amp;nbsp;&lt;/P&gt;
&lt;P style="MARGIN: 0in 0in 0pt" class=MsoNormal&gt;&lt;FONT size=3 face=Calibri&gt;Sean Kelley&lt;BR&gt;&lt;/P&gt;&lt;/FONT&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9583182" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/sync/archive/tags/Microsoft+Sync+Framework/default.aspx">Microsoft Sync Framework</category><category domain="http://blogs.msdn.com/sync/archive/tags/Sync+Services+for+ADO.NET/default.aspx">Sync Services for ADO.NET</category><category domain="http://blogs.msdn.com/sync/archive/tags/Video/default.aspx">Video</category></item><item><title>Project "Huron" - Early Adopter Program</title><link>http://blogs.msdn.com/sync/archive/2009/04/29/project-huron-early-adopter-program.aspx</link><pubDate>Wed, 29 Apr 2009 19:27:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9576046</guid><dc:creator>liamca</dc:creator><slash:comments>5</slash:comments><comments>http://blogs.msdn.com/sync/comments/9576046.aspx</comments><wfw:commentRss>http://blogs.msdn.com/sync/commentrss.aspx?PostID=9576046</wfw:commentRss><description>&lt;P&gt;I wanted to give an update on our &lt;A title="Project Huron Sync to Cloud" href="http://www.microsoft.com/azure/huron.mspx" target=_blank mce_href="http://www.microsoft.com/azure/huron.mspx"&gt;Project "Huron"&lt;/A&gt;.&amp;nbsp; For those new to it, this is an incubation project that we have been working on for some time to provide database "friction free" (this is a one fo those Microsoft terms that basically means simple to setup :-)) synchronization capabilities to the Cloud (SQL Data Service) via a hosted Sync Service sitting within the Azure data centers.&amp;nbsp; The goal is to remove the typical complexities (configuration, scalability, security, etc) involved with sharing database information between local databases such as SQL Server and SQL Compact and provide simple UI tools for configuration and sync components developers can embed in existing applications.&lt;/P&gt;
&lt;P&gt;One unfortunate scoping that we have decided to make is to temporarily hold off on direct support of Microsoft Access for v1.&amp;nbsp; Although we realize that there are a LOT of customers that are looking to support this, based on our current resourcing this has been an unfortunate scoping that we have decided to take.&amp;nbsp; The primarily jusitification was that we already had an existing SQL Server and SQL Compact provider from Sync Framework that we are able to easily re-use which greatly simplified our efforts.&amp;nbsp; It is our hope that some of these Access customers will consider initially linking their Access forms to a SQL Server database to then synchronize via the cloud in the short term until we can provide the full Access support.&lt;/P&gt;
&lt;P&gt;The good news is that in the short term we are still planning to offer direct support SQL Server and SQL Compact (desktop and devices).&amp;nbsp; In fact we are very close to the point that we can start taking on some early adopter to verify some of our assumptioms and help us solidify the first release.&amp;nbsp; What we are looking for are any customers that are looking to share SQL Server or SQL Compact databases via the cloud and have an existing project that would warrant this functionality.&amp;nbsp; If you are interested please contact us using the "Email" link in the left sidebar and I can provide additional details.&lt;/P&gt;
&lt;P&gt;With that I will leave you with a few screen mock-ups we are working with from our Huron Management Studio Dev UI.&lt;/P&gt;
&lt;P mce_keep="true"&gt;&lt;IMG style="WIDTH: 316px; HEIGHT: 375px" title="Huron Dev Studio" alt="Huron Dev Studio" src="http://blogs.msdn.com/photos/sync/images/9576067/316x375.aspx" width=316 height=375 mce_src="http://blogs.msdn.com/photos/sync/images/9576067/316x375.aspx"&gt;&amp;nbsp; &lt;IMG style="WIDTH: 436px; HEIGHT: 375px" title="Huron Publish Wizard" alt="Huron Publish Wizard" src="http://blogs.msdn.com/photos/sync/images/9576069/436x375.aspx" width=436 height=375 mce_src="http://blogs.msdn.com/photos/sync/images/9576069/436x375.aspx"&gt;&lt;/P&gt;
&lt;P&gt;Liam&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9576046" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/sync/archive/tags/Microsoft+Sync+Framework/default.aspx">Microsoft Sync Framework</category><category domain="http://blogs.msdn.com/sync/archive/tags/Sync+Services+for+ADO.NET/default.aspx">Sync Services for ADO.NET</category><category domain="http://blogs.msdn.com/sync/archive/tags/Huron/default.aspx">Huron</category></item><item><title>SyncToy 2.0 - 1 Millionth Download</title><link>http://blogs.msdn.com/sync/archive/2009/04/17/synctoy-2-0-1-millionth-download.aspx</link><pubDate>Fri, 17 Apr 2009 18:56:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9554374</guid><dc:creator>liamca</dc:creator><slash:comments>5</slash:comments><comments>http://blogs.msdn.com/sync/comments/9554374.aspx</comments><wfw:commentRss>http://blogs.msdn.com/sync/commentrss.aspx?PostID=9554374</wfw:commentRss><description>&lt;TABLE class=""&gt;
&lt;TBODY&gt;
&lt;TR&gt;
&lt;TD class=""&gt;&lt;IMG src="http://blogs.msdn.com/photos/sync/images/8867328/original.aspx"&gt; &lt;/TD&gt;
&lt;TD class=""&gt;
&lt;P&gt;I am excited to annouce that &lt;A class="" title="SyncToy - Free File Sync Utility" href="http://www.microsoft.com/downloads/details.aspx?displaylang=en&amp;amp;FamilyID=c26efa36-98e0-4ee9-a7c5-98d0592d8c52" target=_blank mce_href="http://www.microsoft.com/downloads/details.aspx?displaylang=en&amp;amp;FamilyID=c26efa36-98e0-4ee9-a7c5-98d0592d8c52"&gt;SyncToy 2.0&lt;/A&gt; has reached a major milestone.&amp;nbsp; During the month of March it passed &lt;STRONG&gt;&lt;U&gt;1 Million downloads&lt;/U&gt;&lt;/STRONG&gt;!&amp;nbsp;&amp;nbsp; This is exciting both for SyncToy as well as the Microsoft Sync Framework team.&amp;nbsp; Since SyncToy bases synchornization upon the Sync Framework's File Sync Provider, it is always a good test of the technology to have users of this scale.&amp;nbsp; In our forums we regularaly see people use it to keep 10's of thousands of files and folders in sync across desktops and devices.&amp;nbsp; It is also a great test and starting point as we look to expand file synchronization into cloud based services.&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;
&lt;P&gt;Liam Cavanagh&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9554374" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/sync/archive/tags/Microsoft+Sync+Framework/default.aspx">Microsoft Sync Framework</category><category domain="http://blogs.msdn.com/sync/archive/tags/SyncToy/default.aspx">SyncToy</category></item><item><title>Custom Conflict Resolution Survey</title><link>http://blogs.msdn.com/sync/archive/2009/04/07/custom-conflict-resolution-survey.aspx</link><pubDate>Wed, 08 Apr 2009 01:27:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9536859</guid><dc:creator>liamca</dc:creator><slash:comments>3</slash:comments><comments>http://blogs.msdn.com/sync/comments/9536859.aspx</comments><wfw:commentRss>http://blogs.msdn.com/sync/commentrss.aspx?PostID=9536859</wfw:commentRss><description>&lt;P&gt;We are considering making some changes to the patterns currently leveraged to apply custom conflict resolution policies and business logic.&amp;nbsp;&amp;nbsp; During our design discussions a handful of questions came up, so we thought it would be best to post them on our blog in an effort to collect feedback.&amp;nbsp; Please provide your feedback in the comments attached to this post.&amp;nbsp; &lt;/P&gt;
&lt;P&gt;Our questions are as follows:&lt;/P&gt;
&lt;OL&gt;
&lt;LI&gt;Can you give a handful of examples when you have had to apply some sort of custom conflict resolution policy and/or your own business logic when syncing changes?&amp;nbsp; Specifically, we are interested in examples that require data to be changed in the middle of synchronization either before/after getting changes or before/after applying changes.&lt;/LI&gt;
&lt;LI&gt;Do you typically leverage the Sync Framework or Sync Services events&amp;nbsp; in order to do so?&amp;nbsp; If so, which events do you most commonly use?&amp;nbsp; If not, can you describe alternate approaches you have taken?&lt;/LI&gt;
&lt;LI&gt;Do you leverage SyncContext to make changes to the DataSet being sent/received or some other approach?&lt;/LI&gt;&lt;/OL&gt;
&lt;P&gt;Thank you for your time!&lt;/P&gt;
&lt;P&gt;Regards,&lt;/P&gt;
&lt;P&gt;Sean Kelley&lt;BR&gt;Program Manager&lt;BR&gt;Microsoft Sync Framework&lt;BR&gt;&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9536859" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/sync/archive/tags/Microsoft+Sync+Framework/default.aspx">Microsoft Sync Framework</category><category domain="http://blogs.msdn.com/sync/archive/tags/Sync+Services+for+ADO.NET/default.aspx">Sync Services for ADO.NET</category><category domain="http://blogs.msdn.com/sync/archive/tags/Survey/default.aspx">Survey</category></item></channel></rss>