<?xml version='1.0' encoding='UTF-8'?><rss xmlns:atom="http://www.w3.org/2005/Atom" xmlns:openSearch="http://a9.com/-/spec/opensearchrss/1.0/" xmlns:blogger="http://schemas.google.com/blogger/2008" xmlns:georss="http://www.georss.org/georss" xmlns:gd="http://schemas.google.com/g/2005" xmlns:thr="http://purl.org/syndication/thread/1.0" version="2.0"><channel><atom:id>tag:blogger.com,1999:blog-2391544828936088267</atom:id><lastBuildDate>Thu, 18 Sep 2025 07:30:33 +0000</lastBuildDate><title>Unified Communications Development</title><description></description><link>http://unified-communications-development.blogspot.com/</link><managingEditor>noreply@blogger.com (Joachim Farla)</managingEditor><generator>Blogger</generator><openSearch:totalResults>32</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><item><guid isPermaLink="false">tag:blogger.com,1999:blog-2391544828936088267.post-864289491070874704</guid><pubDate>Fri, 11 Jun 2010 14:29:00 +0000</pubDate><atom:updated>2010-06-11T16:35:41.316+02:00</atom:updated><title>Communicator “14” Silverlight controls</title><description>&lt;p&gt;Creating a Silverlight app with presence using the communicator “14”client, is really as easy as can be.&lt;/p&gt;  &lt;p&gt;After installing the SDK in Visual Studio 2010 you get a new project type.   &lt;br /&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhLfPViZ09KquTSDE7xQvG4qvkfVsgWvp8a9YqOx45tYSIpAuAVZPXtTur8mBi7htXZYJ6k8p4jkMCYc3i7hN8XRn_Wd1wy7GAA6hjtkDUz77dnFP288mnlqulfbi-O2EQt-nmgPoZ9wRU/s1600-h/CaptureSL1%5B5%5D.jpg&quot;&gt;&lt;img style=&quot;border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px&quot; title=&quot;CaptureSL1&quot; border=&quot;0&quot; alt=&quot;CaptureSL1&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhjpIS4pDpYRdJATt4Zw1PA7TLClcau-4d_JYDA8n1wemG7Oa2te7OUShA93c6eUmIP1m13cKoUGgaNvbxgzQc7G7aXvv0bVP30gVj4otU89NeVev0XR9grreFs9uN9ud4GmrW3TGxHarE/?imgmax=800&quot; width=&quot;456&quot; height=&quot;332&quot; /&gt;&lt;/a&gt; Then you can create a silverlight 3 or 4 application.    &lt;br /&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgj7dJUrLBbIhsv68axjIEEp-pqWMipIPDPkKaPt-xgS3_7p2PYJ0sv1ajp6zuXgXf4fS20aDJALB_VhAncccaaCKSTtFeKyzq7JBfGpgwPz9YbpJls5-FS77oP7De4h6DjxOOsNBwWbo8/s1600-h/Capturesl2%5B3%5D.jpg&quot;&gt;&lt;img style=&quot;border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px&quot; title=&quot;Capturesl2&quot; border=&quot;0&quot; alt=&quot;Capturesl2&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjBc1KoHCIhzdC6It9287rW4RGnknzrmZFDByu0zhge82UXJ_c-b1uL0O7pgT73rFK8NmQJ3mejZbZVi-4542QtItjty0kfOwd8v1UpjMpyUvqxCXC2_C4ftCEGdYPS7mVakG6NM0EIrnc/?imgmax=800&quot; width=&quot;428&quot; height=&quot;344&quot; /&gt;&lt;/a&gt; Your newly created project has a sample page with all the controls.    &lt;br /&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj7kizBxJ_AygyK9jPwzREDrNl5r5jnjsd2POUPDoud_iWnrh76yKEdWNH7DhJ3eICtCDdLyDT5GngWi0_z8MQbU5EfIPrd58hHCwQE82H2VO5JjIbKkrLX6Jp2GTUhS-JlTooF7O_KaLM/s1600-h/CaptureSL4%5B3%5D.jpg&quot;&gt;&lt;img style=&quot;border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px&quot; title=&quot;CaptureSL4&quot; border=&quot;0&quot; alt=&quot;CaptureSL4&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhgoMMMnG_RDhAnZbxBKZY1B6F8OswaiiNfezEHu84P2qHjhg0j2NRw0RzEtr-d0m-iNKmrBlzZDNHxlG1x_E1qQN4lYo-CxkY-fjZTjw-4vc1RcS-WmZRbr5VYxLPhqlzq2BevrQbQeAQ/?imgmax=800&quot; width=&quot;446&quot; height=&quot;343&quot; /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;h3&gt;The Controls&lt;/h3&gt;  &lt;p&gt;in the toolbar there is a new section with the available controls.   &lt;br /&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj3bmv7wtLRXrAE8CsGxWJqsUB7anolzD95JnZFxA7OPyDGVKv3i4vOoO12qLkfvwX7n8dkiiffJXzCx21pIX8dOYJNtK_pxbfJ_uG5gbt0i_lkdqD99EYNFTy96wKggTyUsqpX2RSMmqY/s1600-h/Capturesl3%5B2%5D.jpg&quot;&gt;&lt;img style=&quot;border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px&quot; title=&quot;Capturesl3&quot; border=&quot;0&quot; alt=&quot;Capturesl3&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhNY1mA5NVj0uinr8jsuEOunbPEjaSskqU3k1Zys7GJAwfdd86yt0FnCZvaH5q8Qy3yTyAHSd3oEm9Vn1NuUOKTlnrTD4mF8Mk_8eOFNCdQezgmepJtiLE3_Zv1Sds5kdTCxwZ-pkuyxaA/?imgmax=800&quot; width=&quot;244&quot; height=&quot;190&quot; /&gt;&lt;/a&gt;&amp;#160; &lt;br /&gt;Everyone who has already seen the new Communicator “14” will see that the controls look really similar almost identical as the new Communicator ”14” Client&lt;/p&gt;  &lt;h3&gt;ContactCard&lt;/h3&gt;  &lt;p&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiVf0hqZyogFrV4MIYMmtcj-Y2xxxOG83UqBe196UmkyyXkUVBPKQLDU0sTgfa0RdTiqZHIcxk9iFXswUM1YgR2tp9XpRs4zpBPmtgeKeQSfK0A0jcmqEZhyphenhyphen3WAgEkWAuTIdJeHoAe_Pzg/s1600-h/CaptureSLContact%5B2%5D.jpg&quot;&gt;&lt;img style=&quot;border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px&quot; title=&quot;CaptureSLContact&quot; border=&quot;0&quot; alt=&quot;CaptureSLContact&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjRVQd69AI4jNBRQf3SKs6xiRCorXTPE_bu_LtRCs1zImUYZdAOMDwJAqADUUtGqpDNvB9IzwvWXDZ8vIavqR_y02O10LB6vdjI2LnsIcg1n8H8rJLZgPoWd-UfSGQQkr4gw-0TJ8n7k7U/?imgmax=800&quot; width=&quot;244&quot; height=&quot;83&quot; /&gt;&lt;/a&gt;&amp;#160; &lt;br /&gt;&lt;strong&gt;xaml     &lt;br /&gt;&lt;/strong&gt;&lt;span class=&quot;kwrd&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;html&quot;&gt;controls:ContactCard&lt;/span&gt; &lt;span class=&quot;attr&quot;&gt;Source&lt;/span&gt;&lt;span class=&quot;kwrd&quot;&gt;=&amp;quot;joachim.farla@e-office.com&amp;quot;&lt;/span&gt; &lt;span class=&quot;kwrd&quot;&gt;/&amp;gt;&lt;/span&gt;&lt;/p&gt; &lt;style type=&quot;text/css&quot;&gt;&lt;br /&gt;.csharpcode, .csharpcode pre&lt;br /&gt;{&lt;br /&gt;	font-size: small;&lt;br /&gt;	color: black;&lt;br /&gt;	font-family: consolas, &quot;Courier New&quot;, courier, monospace;&lt;br /&gt;	background-color: #ffffff;&lt;br /&gt;	/*white-space: pre;*/&lt;br /&gt;}&lt;br /&gt;.csharpcode pre { margin: 0em; }&lt;br /&gt;.csharpcode .rem { color: #008000; }&lt;br /&gt;.csharpcode .kwrd { color: #0000ff; }&lt;br /&gt;.csharpcode .str { color: #006080; }&lt;br /&gt;.csharpcode .op { color: #0000c0; }&lt;br /&gt;.csharpcode .preproc { color: #cc6633; }&lt;br /&gt;.csharpcode .asp { background-color: #ffff00; }&lt;br /&gt;.csharpcode .html { color: #800000; }&lt;br /&gt;.csharpcode .attr { color: #ff0000; }&lt;br /&gt;.csharpcode .alt &lt;br /&gt;{&lt;br /&gt;	background-color: #f4f4f4;&lt;br /&gt;	width: 100%;&lt;br /&gt;	margin: 0em;&lt;br /&gt;}&lt;br /&gt;.csharpcode .lnum { color: #606060; }&lt;/style&gt;  &lt;h3&gt;ContactsList&lt;/h3&gt;  &lt;p&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiaLN6n7PU6zxSoKqH3ijVhxFFjcEZiH4bSEcYGmBgr4vWYEfo4ljHQ5i_ycwC9T6H0dbU8o5FnQmcsCEYSpkhGyCV7n7EU4iqHMJgbkNvIH0xUdWdi8YSOHtcrd_Ghia9ZQgaaUiKsHOw/s1600-h/CaptureSLContacts%5B4%5D.jpg&quot;&gt;&lt;img style=&quot;border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px&quot; title=&quot;CaptureSLContacts&quot; border=&quot;0&quot; alt=&quot;CaptureSLContacts&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjzBm6jqjoOyDcyQLaEvOgf5coA1yB0UYLw799zNjxN7S_RcwVNEWDd1KUDRWlgbMPDwKMUahtCq7Cxxkwfo12svVDwju55rPEtzdkMf9YrNfZx-HLWPauajtA7t0e5dw8L2uV54ZcbGQc/?imgmax=800&quot; width=&quot;464&quot; height=&quot;283&quot; /&gt;&lt;/a&gt;&amp;#160;&lt;strong&gt;xaml     &lt;br /&gt;&lt;/strong&gt;&lt;span class=&quot;kwrd&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;html&quot;&gt;controls:ContactsList&lt;/span&gt; &lt;span class=&quot;attr&quot;&gt;Height&lt;/span&gt;&lt;span class=&quot;kwrd&quot;&gt;=&amp;quot;294&amp;quot;&lt;/span&gt; &lt;span class=&quot;attr&quot;&gt;Width&lt;/span&gt;&lt;span class=&quot;kwrd&quot;&gt;=&amp;quot;600&amp;quot;&lt;/span&gt;&lt;span class=&quot;kwrd&quot;&gt;/&amp;gt;&lt;/span&gt;&lt;/p&gt;  &lt;h3&gt;CustomContactsList and CustomContactsListitem&lt;/h3&gt;  &lt;p&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi5ommo1jSXpVRHSUE54RpY8JfTeDwUwSWXEy7Bz-v6I9PWH8Dy2yQ3ax4LjDtwXCleZ6Y2r1AuRody2rISKub4WytfMou9_ESt0ELXB4CmcF6BtuI5i0sIjdvnTP4hkCX8krXm8sanT3Q/s1600-h/CaptureSLCustomContacts%5B3%5D.jpg&quot;&gt;&lt;img style=&quot;border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px&quot; title=&quot;CaptureSLCustomContacts&quot; border=&quot;0&quot; alt=&quot;CaptureSLCustomContacts&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgc8T57VKrlVXAxoo5we65HDXMz5XZ8BARjuN8JyHuHwUUgcxAcRjQ8IikKCOoFBaJdtprqpecw8djBsWhbB7i7sNvS988WQxrivxzeUBf3oavndkytNHZJCDBFFx-8mEInV-Bq4GkDGPo/?imgmax=800&quot; width=&quot;284&quot; height=&quot;118&quot; /&gt;&lt;/a&gt;&amp;#160; &lt;br /&gt;&lt;strong&gt;xaml     &lt;br /&gt;&lt;/strong&gt;&lt;span class=&quot;kwrd&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;html&quot;&gt;controls:CustomContactsList&lt;/span&gt; &lt;span class=&quot;attr&quot;&gt;Height&lt;/span&gt;&lt;span class=&quot;kwrd&quot;&gt;=&amp;quot;94&amp;quot;&lt;/span&gt; &lt;span class=&quot;attr&quot;&gt;Width&lt;/span&gt;&lt;span class=&quot;kwrd&quot;&gt;=&amp;quot;297&amp;quot;&lt;/span&gt;&lt;span class=&quot;kwrd&quot;&gt;&amp;gt;&lt;/span&gt;    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span class=&quot;kwrd&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;html&quot;&gt;controls:CustomContactsListItem&lt;/span&gt; &lt;span class=&quot;attr&quot;&gt;Source&lt;/span&gt;&lt;span class=&quot;kwrd&quot;&gt;=&amp;quot;Marc.Wetters@e-office.com&amp;quot;&lt;/span&gt; &lt;span class=&quot;kwrd&quot;&gt;/&amp;gt;&lt;/span&gt;    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span class=&quot;kwrd&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;html&quot;&gt;controls:CustomContactsListItem&lt;/span&gt; &lt;span class=&quot;attr&quot;&gt;Source&lt;/span&gt;&lt;span class=&quot;kwrd&quot;&gt;=&amp;quot;Joachim.Farla@e-office.com&amp;quot;&lt;/span&gt; &lt;span class=&quot;kwrd&quot;&gt;/&amp;gt;&lt;/span&gt;    &lt;br /&gt;&lt;span class=&quot;kwrd&quot;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&quot;html&quot;&gt;controls:CustomContactsList&lt;/span&gt;&lt;span class=&quot;kwrd&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt;  &lt;h3&gt;PresenceAvailabilityIndicator&lt;/h3&gt;  &lt;p&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjLKNBqF4-sSfq7wMZJNmGMaVBtp_bt936rpcZebeUVDqcqMKd55xv-cl_Wa4kQBJjzMeAPPqlP9nES_McBz5Xyy50y78EPJLgp7aWnQpR6aMYI6qGJ8FkI9rGaAANeKYEs1Y1LxQa3JfE/s1600-h/CaptureSLPresence%5B2%5D.jpg&quot;&gt;&lt;img style=&quot;border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px&quot; title=&quot;CaptureSLPresence&quot; border=&quot;0&quot; alt=&quot;CaptureSLPresence&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg4iqtkPcy8cV4HnZqQyj3OEI9HjSytp9zY2huLdm5N0GzSN0h63bbJNLdixVz5ZcEoyTnKrGrg5Wqsme9dAURemNTn6-dc-VFtQn_ud5O1awyQu0lfR6xF9pYuLHPvjhtz_hqDZk99Hoc/?imgmax=800&quot; width=&quot;148&quot; height=&quot;32&quot; /&gt;&lt;/a&gt;&amp;#160; &lt;br /&gt;&lt;strong&gt;xaml     &lt;br /&gt;&lt;/strong&gt;&lt;span class=&quot;kwrd&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;html&quot;&gt;controls:PresenceAvailabilityIndicator&lt;/span&gt;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span class=&quot;attr&quot;&gt;x:Name&lt;/span&gt;&lt;span class=&quot;kwrd&quot;&gt;=&amp;quot;Presence&amp;quot;&lt;/span&gt;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span class=&quot;attr&quot;&gt;Source&lt;/span&gt;&lt;span class=&quot;kwrd&quot;&gt;=&amp;quot;marc.wetters@e-office.com&amp;quot;&lt;/span&gt;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span class=&quot;attr&quot;&gt;Margin&lt;/span&gt;&lt;span class=&quot;kwrd&quot;&gt;=&amp;quot;10,0&amp;quot;&lt;/span&gt; &lt;span class=&quot;kwrd&quot;&gt;/&amp;gt;&lt;/span&gt;    &lt;br /&gt;&lt;span class=&quot;kwrd&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;html&quot;&gt;TextBlock&lt;/span&gt;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span class=&quot;attr&quot;&gt;Text&lt;/span&gt;&lt;span class=&quot;kwrd&quot;&gt;=&amp;quot;{Binding DisplayName, ElementName=Presence}&amp;quot;&lt;/span&gt;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span class=&quot;attr&quot;&gt;Margin&lt;/span&gt;&lt;span class=&quot;kwrd&quot;&gt;=&amp;quot;10,0,0,0&amp;quot;&lt;/span&gt;&lt;span class=&quot;kwrd&quot;&gt;/&amp;gt;&lt;/span&gt;&lt;/p&gt; &lt;style type=&quot;text/css&quot;&gt;&lt;br /&gt;.csharpcode, .csharpcode pre&lt;br /&gt;{&lt;br /&gt;	font-size: small;&lt;br /&gt;	color: black;&lt;br /&gt;	font-family: consolas, &quot;Courier New&quot;, courier, monospace;&lt;br /&gt;	background-color: #ffffff;&lt;br /&gt;	/*white-space: pre;*/&lt;br /&gt;}&lt;br /&gt;.csharpcode pre { margin: 0em; }&lt;br /&gt;.csharpcode .rem { color: #008000; }&lt;br /&gt;.csharpcode .kwrd { color: #0000ff; }&lt;br /&gt;.csharpcode .str { color: #006080; }&lt;br /&gt;.csharpcode .op { color: #0000c0; }&lt;br /&gt;.csharpcode .preproc { color: #cc6633; }&lt;br /&gt;.csharpcode .asp { background-color: #ffff00; }&lt;br /&gt;.csharpcode .html { color: #800000; }&lt;br /&gt;.csharpcode .attr { color: #ff0000; }&lt;br /&gt;.csharpcode .alt &lt;br /&gt;{&lt;br /&gt;	background-color: #f4f4f4;&lt;br /&gt;	width: 100%;&lt;br /&gt;	margin: 0em;&lt;br /&gt;}&lt;br /&gt;.csharpcode .lnum { color: #606060; }&lt;/style&gt;  &lt;h3&gt;SearchInput&lt;/h3&gt;  &lt;p&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhZIDBdP47p455KxV8cNZ7bF5JDakzz_Ku1-kUOo61Q3vEZhuu2RNJln_QJrSBMz0onph0iZkpnrOdRs_Nu5gzEjJg-amzTlBlc8RWS7TETZ4zaqpbXMsMA_k181nUYfJ_JuhY7VIFi2xU/s1600-h/CaptureSLSearch%5B3%5D.jpg&quot;&gt;&lt;img style=&quot;border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px&quot; title=&quot;CaptureSLSearch&quot; border=&quot;0&quot; alt=&quot;CaptureSLSearch&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjxIGO2JdEdq2McsPp_rK0kIJhUBNqz_0NLXr0mwdEC4vo8WlQlXsYnxTeIqU7yj9DDhv5B11_0ViQf3BRu-PUjeUvGtMHYORw0mQxPCamYVisJVwbRElmHTwKXsRc0L1WejmSiwTIwPtU/?imgmax=800&quot; width=&quot;434&quot; height=&quot;86&quot; /&gt;&lt;/a&gt;&amp;#160;&lt;strong&gt;xaml     &lt;br /&gt;&lt;/strong&gt;&amp;#160;&lt;span class=&quot;kwrd&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;html&quot;&gt;controls:SearchInput&lt;/span&gt; &lt;span class=&quot;attr&quot;&gt;x:Name&lt;/span&gt;&lt;span class=&quot;kwrd&quot;&gt;=&amp;quot;SearchTextbox&amp;quot;&lt;/span&gt; &lt;span class=&quot;attr&quot;&gt;Width&lt;/span&gt;&lt;span class=&quot;kwrd&quot;&gt;=&amp;quot;500&amp;quot;&lt;/span&gt;&lt;span class=&quot;kwrd&quot;&gt;/&amp;gt;&lt;/span&gt;&lt;/p&gt; &lt;style type=&quot;text/css&quot;&gt;&lt;br /&gt;.csharpcode, .csharpcode pre&lt;br /&gt;{&lt;br /&gt;	font-size: small;&lt;br /&gt;	color: black;&lt;br /&gt;	font-family: consolas, &quot;Courier New&quot;, courier, monospace;&lt;br /&gt;	background-color: #ffffff;&lt;br /&gt;	/*white-space: pre;*/&lt;br /&gt;}&lt;br /&gt;.csharpcode pre { margin: 0em; }&lt;br /&gt;.csharpcode .rem { color: #008000; }&lt;br /&gt;.csharpcode .kwrd { color: #0000ff; }&lt;br /&gt;.csharpcode .str { color: #006080; }&lt;br /&gt;.csharpcode .op { color: #0000c0; }&lt;br /&gt;.csharpcode .preproc { color: #cc6633; }&lt;br /&gt;.csharpcode .asp { background-color: #ffff00; }&lt;br /&gt;.csharpcode .html { color: #800000; }&lt;br /&gt;.csharpcode .attr { color: #ff0000; }&lt;br /&gt;.csharpcode .alt &lt;br /&gt;{&lt;br /&gt;	background-color: #f4f4f4;&lt;br /&gt;	width: 100%;&lt;br /&gt;	margin: 0em;&lt;br /&gt;}&lt;br /&gt;.csharpcode .lnum { color: #606060; }&lt;/style&gt;  &lt;h3&gt;SearchResults&lt;/h3&gt;  &lt;p&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgFa8hNhjM9_kYFnQdk50_fFnut65MBfikPPcsFNxIofPBSFW9pIwbYtmOBwZboz6kvAf8bXDanZdg-S9-ysbKlJZBXaqD6LyW5zUy1hwofvwoN2qpMLUPXNVODqfX-jtZV4wucAzOuuEU/s1600-h/CaptureSLSearchresult1%5B3%5D.jpg&quot;&gt;&lt;img style=&quot;border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px&quot; title=&quot;CaptureSLSearchresult1&quot; border=&quot;0&quot; alt=&quot;CaptureSLSearchresult1&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhf3NiIjjUDH2nRcX53VdThAvJZ9dvwujGNb551rFizNUtX34WAyAaG9ygHKMCQTC_iLC-ZPy9b1FhlbUXZTU6K5HzARJpBEcUN2EWp6FcA9QphCfM5DZdIwXWOYJNlmhVuDAZ9lqRAoHs/?imgmax=800&quot; width=&quot;449&quot; height=&quot;75&quot; /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjBz-9uCfou4O0n9O01BB79xatO0ynfAR5fwgHBDycm6dFxY3DqcARvBPaDXBQ2ieaneoohlz7KIVMKL_BTg8S1IzaDKSHGtbFNH7fasgI8B2QvnHloXq1R9R5UskHYTnMMzVw2QMKKRYE/s1600-h/CaptureSLsearchresult2%5B3%5D.jpg&quot;&gt;&lt;img style=&quot;border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px&quot; title=&quot;CaptureSLsearchresult2&quot; border=&quot;0&quot; alt=&quot;CaptureSLsearchresult2&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiNCaPzYO4g1F7DSnlDr6gfD3nzSOez4CPLj6ufyPkBWPKC21c8WNyhZl4Ab_HrN-XEYJ3UapHibjS4rjwmOLE9DMLWlXg6OiTa8v6WJzhhcv67hvB6NZ5PIBcSL7IUAqdInex7vUp-bOo/?imgmax=800&quot; width=&quot;473&quot; height=&quot;164&quot; /&gt;&lt;/a&gt; &lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;xaml     &lt;br /&gt;&lt;/strong&gt;&lt;span class=&quot;kwrd&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;html&quot;&gt;controls:SearchResults&lt;/span&gt; &lt;span class=&quot;attr&quot;&gt;Width&lt;/span&gt;&lt;span class=&quot;kwrd&quot;&gt;=&amp;quot;500&amp;quot;&lt;/span&gt; &lt;span class=&quot;attr&quot;&gt;Height&lt;/span&gt;&lt;span class=&quot;kwrd&quot;&gt;=&amp;quot;200&amp;quot;&lt;/span&gt;    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span class=&quot;attr&quot;&gt;ResultsSource&lt;/span&gt;&lt;span class=&quot;kwrd&quot;&gt;=&amp;quot;{Binding Results, ElementName=SearchTextbox}&amp;quot;&lt;/span&gt;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span class=&quot;attr&quot;&gt;ResultsState&lt;/span&gt;&lt;span class=&quot;kwrd&quot;&gt;=&amp;quot;{Binding SearchState, ElementName=SearchTextbox}&amp;quot;&lt;/span&gt; &lt;span class=&quot;kwrd&quot;&gt;/&amp;gt;&lt;/span&gt;&lt;/p&gt; &lt;style type=&quot;text/css&quot;&gt;&lt;br /&gt;.csharpcode, .csharpcode pre&lt;br /&gt;{&lt;br /&gt;	font-size: small;&lt;br /&gt;	color: black;&lt;br /&gt;	font-family: consolas, &quot;Courier New&quot;, courier, monospace;&lt;br /&gt;	background-color: #ffffff;&lt;br /&gt;	/*white-space: pre;*/&lt;br /&gt;}&lt;br /&gt;.csharpcode pre { margin: 0em; }&lt;br /&gt;.csharpcode .rem { color: #008000; }&lt;br /&gt;.csharpcode .kwrd { color: #0000ff; }&lt;br /&gt;.csharpcode .str { color: #006080; }&lt;br /&gt;.csharpcode .op { color: #0000c0; }&lt;br /&gt;.csharpcode .preproc { color: #cc6633; }&lt;br /&gt;.csharpcode .asp { background-color: #ffff00; }&lt;br /&gt;.csharpcode .html { color: #800000; }&lt;br /&gt;.csharpcode .attr { color: #ff0000; }&lt;br /&gt;.csharpcode .alt &lt;br /&gt;{&lt;br /&gt;	background-color: #f4f4f4;&lt;br /&gt;	width: 100%;&lt;br /&gt;	margin: 0em;&lt;br /&gt;}&lt;br /&gt;.csharpcode .lnum { color: #606060; }&lt;/style&gt;  &lt;h3&gt;StartAudioConcersation&lt;/h3&gt;  &lt;p&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEga9g1lW_WTUC9aJrYLOFMWEGafPdxhUCJ-78selP-CL6gyaKU_jR24oaOggUHQ_mFTgSt7tmZNiqwXVf8A9R6UYx7dM9NUWYlCdqQwd77GV9wEftsC8NC0DlKUaLraZe0t6IW0i8_1Lpo/s1600-h/CaptureSLaudio%5B2%5D.jpg&quot;&gt;&lt;img style=&quot;border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px&quot; title=&quot;CaptureSLaudio&quot; border=&quot;0&quot; alt=&quot;CaptureSLaudio&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhg88AIH74ZbRWtFhEU5-qN3NjJpZh-pg3LLa_IweuFxdZVc1FdFejP303bt84AepvvZcldBKt1-LmiQFPlwyTouAN3pkOLL3jYYHtWRGUur4eVHHMTxvJ8kDqEEWK1uvVs7m9CR_x7DTA/?imgmax=800&quot; width=&quot;42&quot; height=&quot;30&quot; /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;&lt;strong&gt;xaml     &lt;br /&gt;&lt;/strong&gt;&lt;span class=&quot;kwrd&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;html&quot;&gt;controls:StartAudioConversation&lt;/span&gt; &lt;span class=&quot;attr&quot;&gt;Source&lt;/span&gt;&lt;span class=&quot;kwrd&quot;&gt;=&amp;quot;joachim.farla@e-office.com&amp;quot;&lt;/span&gt; &lt;span class=&quot;kwrd&quot;&gt;/&amp;gt;&lt;/span&gt;&lt;/p&gt; &lt;style type=&quot;text/css&quot;&gt;&lt;br /&gt;.csharpcode, .csharpcode pre&lt;br /&gt;{&lt;br /&gt;	font-size: small;&lt;br /&gt;	color: black;&lt;br /&gt;	font-family: consolas, &quot;Courier New&quot;, courier, monospace;&lt;br /&gt;	background-color: #ffffff;&lt;br /&gt;	/*white-space: pre;*/&lt;br /&gt;}&lt;br /&gt;.csharpcode pre { margin: 0em; }&lt;br /&gt;.csharpcode .rem { color: #008000; }&lt;br /&gt;.csharpcode .kwrd { color: #0000ff; }&lt;br /&gt;.csharpcode .str { color: #006080; }&lt;br /&gt;.csharpcode .op { color: #0000c0; }&lt;br /&gt;.csharpcode .preproc { color: #cc6633; }&lt;br /&gt;.csharpcode .asp { background-color: #ffff00; }&lt;br /&gt;.csharpcode .html { color: #800000; }&lt;br /&gt;.csharpcode .attr { color: #ff0000; }&lt;br /&gt;.csharpcode .alt &lt;br /&gt;{&lt;br /&gt;	background-color: #f4f4f4;&lt;br /&gt;	width: 100%;&lt;br /&gt;	margin: 0em;&lt;br /&gt;}&lt;br /&gt;.csharpcode .lnum { color: #606060; }&lt;/style&gt;  &lt;h3&gt;StartInstantMessagingConversation&lt;/h3&gt;  &lt;p&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh3vu_2Fp2pyIIwtNzJVCeQYx_Ik-dK9gZX_hXRZ8CLcPDZoKEGI7t_qF4tlk_9MBh8V-Ez_6a4E0tL-JTpEEF1BjODtB3t03pmsOSuGZBQZFYUM9RGaZdWZ8xE6GQHdg8_4_YBHl-Fx94/s1600-h/CaptureSLmessaging%5B2%5D.jpg&quot;&gt;&lt;img style=&quot;border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px&quot; title=&quot;CaptureSLmessaging&quot; border=&quot;0&quot; alt=&quot;CaptureSLmessaging&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiuTUQTldgMaydaTFvaGwFVYFgiBInHb_r9G-rATk4eZQaGsOmYyN_syDfZKl4ess4_sf_0RHa1QlFYmIJHKY05lwIBJuWwpGUgMLNmoCt3pPZE0oJ03NPYAeE1XE0A3F3AOvx7n6JDDpg/?imgmax=800&quot; width=&quot;36&quot; height=&quot;30&quot; /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;&lt;strong&gt;xaml     &lt;br /&gt;&lt;/strong&gt;&lt;span class=&quot;kwrd&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;html&quot;&gt;controls:StartInstantMessagingConversation&lt;/span&gt; &lt;span class=&quot;attr&quot;&gt;Source&lt;/span&gt;&lt;span class=&quot;kwrd&quot;&gt;=&amp;quot;joachim.farla@e-office.com&amp;quot;&lt;/span&gt; &lt;span class=&quot;kwrd&quot;&gt;/&amp;gt;&lt;/span&gt;&lt;/p&gt; &lt;style type=&quot;text/css&quot;&gt;&lt;br /&gt;.csharpcode, .csharpcode pre&lt;br /&gt;{&lt;br /&gt;	font-size: small;&lt;br /&gt;	color: black;&lt;br /&gt;	font-family: consolas, &quot;Courier New&quot;, courier, monospace;&lt;br /&gt;	background-color: #ffffff;&lt;br /&gt;	/*white-space: pre;*/&lt;br /&gt;}&lt;br /&gt;.csharpcode pre { margin: 0em; }&lt;br /&gt;.csharpcode .rem { color: #008000; }&lt;br /&gt;.csharpcode .kwrd { color: #0000ff; }&lt;br /&gt;.csharpcode .str { color: #006080; }&lt;br /&gt;.csharpcode .op { color: #0000c0; }&lt;br /&gt;.csharpcode .preproc { color: #cc6633; }&lt;br /&gt;.csharpcode .asp { background-color: #ffff00; }&lt;br /&gt;.csharpcode .html { color: #800000; }&lt;br /&gt;.csharpcode .attr { color: #ff0000; }&lt;br /&gt;.csharpcode .alt &lt;br /&gt;{&lt;br /&gt;	background-color: #f4f4f4;&lt;br /&gt;	width: 100%;&lt;br /&gt;	margin: 0em;&lt;br /&gt;}&lt;br /&gt;.csharpcode .lnum { color: #606060; }&lt;/style&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;Hope this gives a good overview of the available silverlight controls. Next to these controls&lt;/p&gt;  </description><link>http://unified-communications-development.blogspot.com/2010/06/communicator-14-silverlight-controls.html</link><author>noreply@blogger.com (Marc Wetters)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhjpIS4pDpYRdJATt4Zw1PA7TLClcau-4d_JYDA8n1wemG7Oa2te7OUShA93c6eUmIP1m13cKoUGgaNvbxgzQc7G7aXvv0bVP30gVj4otU89NeVev0XR9grreFs9uN9ud4GmrW3TGxHarE/s72-c?imgmax=800" height="72" width="72"/><thr:total>1</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-2391544828936088267.post-4932068486174710313</guid><pubDate>Fri, 11 Jun 2010 10:10:00 +0000</pubDate><atom:updated>2010-06-11T12:10:36.069+02:00</atom:updated><title>Communicator “14” development</title><description>&lt;p&gt;When starting to develop for Communicator client where do you start…&lt;/p&gt;  &lt;p&gt;First you need to have the Communicator “14” client. Visual Studio 2010 with the tools for Silverlight and of course the Communicator “14” SDK.&lt;/p&gt;  &lt;p&gt;Most developers who already want to start developing for the Communicator client don’t always have the possibility to setup a complete Communications server “14” environment.&lt;/p&gt;  &lt;p&gt;So the big question is: can you use Communicator “14” with an existing OCS 2007 R2 environment?    &lt;br /&gt;Everyone who has tried and installed the client will say no, you can’t… It just doesn’t work. But this is only because the Communicator “14’&amp;quot; checks the server version!&lt;/p&gt;  &lt;p&gt;But there is a way to disable the server check. This can be done with the following registry setting:&lt;/p&gt;  &lt;pre class=&quot;csharpcode&quot;&gt;[HKEY_CURRENT_USER\Software\Policies\Microsoft\Communicator]&lt;br /&gt;&amp;quot;DisableServerCheck&amp;quot;=dword:00000001&lt;/pre&gt;&lt;br /&gt;&lt;style type=&quot;text/css&quot;&gt;&lt;br /&gt;.csharpcode, .csharpcode pre&lt;br /&gt;{&lt;br /&gt;	font-size: small;&lt;br /&gt;	color: black;&lt;br /&gt;	font-family: consolas, &quot;Courier New&quot;, courier, monospace;&lt;br /&gt;	background-color: #ffffff;&lt;br /&gt;	/*white-space: pre;*/&lt;br /&gt;}&lt;br /&gt;.csharpcode pre { margin: 0em; }&lt;br /&gt;.csharpcode .rem { color: #008000; }&lt;br /&gt;.csharpcode .kwrd { color: #0000ff; }&lt;br /&gt;.csharpcode .str { color: #006080; }&lt;br /&gt;.csharpcode .op { color: #0000c0; }&lt;br /&gt;.csharpcode .preproc { color: #cc6633; }&lt;br /&gt;.csharpcode .asp { background-color: #ffff00; }&lt;br /&gt;.csharpcode .html { color: #800000; }&lt;br /&gt;.csharpcode .attr { color: #ff0000; }&lt;br /&gt;.csharpcode .alt &lt;br /&gt;{&lt;br /&gt;	background-color: #f4f4f4;&lt;br /&gt;	width: 100%;&lt;br /&gt;	margin: 0em;&lt;br /&gt;}&lt;br /&gt;.csharpcode .lnum { color: #606060; }&lt;/style&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;Then you can use Communicator “14” and the SDK without the specific need for Communications “14” server. Specific Communications server “14” functionality won’t be available. But you can use the Silverlight and WPF controls.&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;sip:Marc.Wetters@e-office.com&lt;/p&gt;  </description><link>http://unified-communications-development.blogspot.com/2010/06/communicator-14-development.html</link><author>noreply@blogger.com (Marc Wetters)</author><thr:total>3</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-2391544828936088267.post-2278966786730335920</guid><pubDate>Fri, 11 Jun 2010 09:52:00 +0000</pubDate><atom:updated>2010-06-11T11:53:13.002+02:00</atom:updated><title>It’s time to start Blogging again</title><description>&lt;p&gt;Finally I have some time to start blogging again. And the upcoming Communications Server “14” and the new Communicator “14” are great Topics to blog about.&lt;/p&gt;  &lt;p&gt;For client side development a lot has been changed in a very positive way. With the new Silverlight controls and the WPF controls which are included in the new Communicator SDK.&lt;/p&gt;  &lt;p&gt;Server Side development with UCMA 3.0 has also made progress making the life for developers easier.&lt;/p&gt;  </description><link>http://unified-communications-development.blogspot.com/2010/06/its-time-to-start-blogging-again.html</link><author>noreply@blogger.com (Marc Wetters)</author><thr:total>2</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-2391544828936088267.post-7342035813686982702</guid><pubDate>Fri, 31 Oct 2008 07:25:00 +0000</pubDate><atom:updated>2008-10-31T08:25:41.130+01:00</atom:updated><title>Speech Server 2007 vs UCMA v2.0 WF activites</title><description>&lt;p&gt;Michael Dunn wrote a really nice article about the differences between UCMA v2.0 and Speech Server 2007, you can find this artikel &lt;a target=&quot;_blank&quot; href=&quot;http://blogs.msdn.com/midunn/archive/2008/10/15/speech-server-2007-vs-ucma-v2-0-wf-activites.aspx&quot;&gt;here&lt;/a&gt;&lt;/p&gt;  </description><link>http://unified-communications-development.blogspot.com/2008/10/speech-server-2007-vs-ucma-v20-wf.html</link><author>noreply@blogger.com (Marc Wetters)</author><thr:total>1</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-2391544828936088267.post-2931701167259328626</guid><pubDate>Thu, 11 Sep 2008 15:19:00 +0000</pubDate><atom:updated>2008-09-11T17:19:50.565+02:00</atom:updated><title>Microsoft just released 5 new UC development sample&amp;#39;s</title><description>&lt;h3&gt;Integrating Web Chat Functionality&lt;/h3&gt;  &lt;p&gt; - Microsoft Unified Communications AJAX API Sample   &lt;br /&gt;&lt;a href=&quot;http://www.microsoft.com/downloads/details.aspx?FamilyId=C8C3F762-7BE4-4541-9B18-82499DB61293&amp;amp;displaylang=en&quot;&gt;http://www.microsoft.com/downloads/details.aspx?FamilyId=C8C3F762-7BE4-4541-9B18-82499DB61293&amp;amp;displaylang=en&lt;/a&gt;    &lt;br /&gt;&lt;/p&gt;  &lt;h3&gt;WPF Presence Controls for Microsoft Office Communicator 2007&lt;/h3&gt;  &lt;p&gt; - Microsoft Office Communicator 2007 SDK Sample   &lt;br /&gt;&lt;a href=&quot;http://www.microsoft.com/downloads/details.aspx?FamilyId=5001D612-533A-4721-91EA-DA990D94FF0F&amp;amp;displaylang=en&quot;&gt;http://www.microsoft.com/downloads/details.aspx?FamilyId=5001D612-533A-4721-91EA-DA990D94FF0F&amp;amp;displaylang=en&lt;/a&gt;    &lt;br /&gt;&lt;/p&gt;  &lt;h3&gt;Dynamics CRM Integration &lt;/h3&gt;  &lt;p&gt;with Office Communications Server   &lt;br /&gt;&lt;a href=&quot;http://www.microsoft.com/downloads/details.aspx?FamilyId=6E2EA762-A6C9-43BD-8C84-BF610073765C&amp;amp;displaylang=en&quot;&gt;http://www.microsoft.com/downloads/details.aspx?FamilyId=6E2EA762-A6C9-43BD-8C84-BF610073765C&amp;amp;displaylang=en&lt;/a&gt;    &lt;br /&gt;&lt;/p&gt;  &lt;h3&gt;Customer Relationship Management (CRM) Activity&lt;/h3&gt;  &lt;p&gt; - Microsoft Unified Communications Managed API 1.0 Sample   &lt;br /&gt;&lt;a href=&quot;http://www.microsoft.com/downloads/details.aspx?FamilyId=16303459-DD75-451F-B7C0-FB2EB0D9A84A&amp;amp;displaylang=en&quot;&gt;http://www.microsoft.com/downloads/details.aspx?FamilyId=16303459-DD75-451F-B7C0-FB2EB0D9A84A&amp;amp;displaylang=en&lt;/a&gt;    &lt;br /&gt;&lt;/p&gt;  &lt;h3&gt;Communicator 2007 Custom Tabs&lt;/h3&gt;  &lt;p&gt; - Microsoft Office Communicator 2007 Sample   &lt;br /&gt;&lt;a href=&quot;http://www.microsoft.com/downloads/details.aspx?FamilyId=621C675C-46B7-4F68-ADDC-9F44E5594BFB&amp;amp;displaylang=en&quot;&gt;http://www.microsoft.com/downloads/details.aspx?FamilyId=621C675C-46B7-4F68-ADDC-9F44E5594BFB&amp;amp;displaylang=en&lt;/a&gt;&lt;/p&gt;  </description><link>http://unified-communications-development.blogspot.com/2008/09/microsoft-just-released-5-new-uc.html</link><author>noreply@blogger.com (Marc Wetters)</author><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-2391544828936088267.post-2809648265951454876</guid><pubDate>Fri, 05 Sep 2008 15:25:00 +0000</pubDate><atom:updated>2008-09-05T17:25:52.745+02:00</atom:updated><title>Patrick passed away..</title><description>&lt;p&gt;Although I didn’t knew Patrick in person, I always enjoyed watching him speak at conferences (really loved the dutch/belgian english accent he had:). &lt;/p&gt;  &lt;p&gt;My deepest condolences&amp;#160; to Patrick’s family, friends and his colleagues at U2U..&lt;/p&gt;  </description><link>http://unified-communications-development.blogspot.com/2008/09/patrick-passed-away.html</link><author>noreply@blogger.com (Joachim Farla)</author><thr:total>1</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-2391544828936088267.post-6354716440570474525</guid><pubDate>Thu, 10 Jul 2008 06:18:00 +0000</pubDate><atom:updated>2008-07-10T08:18:47.924+02:00</atom:updated><title>OCSDKWrapper Project on CodePlex</title><description>&lt;p&gt;George Durzi wrote a really nice wrapper for the Office Communicator SDK. He also included a sample application to get you started.&lt;/p&gt;  &lt;p&gt;The Office Communicator SDK is actually pretty easy to use, but some parts could have been easier. Especially cleaning up when the connection is lost. Monitoring the status of the connection. Connecting to communicator.&lt;/p&gt;  &lt;p&gt;And exactly that functionality he addressed with this OCSDKWraper.&lt;/p&gt;  &lt;p&gt;Please check out his blogpost: &lt;a title=&quot;http://blogs.claritycon.com/blogs/george_durzi/archive/2008/07/05/ocsdkwrapper-project-on-codeplex.aspx&quot; href=&quot;http://blogs.claritycon.com/blogs/george_durzi/archive/2008/07/05/ocsdkwrapper-project-on-codeplex.aspx&quot; target=&quot;_blank&quot;&gt;OCSDKWrapper Project on CodePlex&lt;/a&gt;&lt;/p&gt;  &lt;div class=&quot;wlWriterSmartContent&quot; id=&quot;scid:0767317B-992E-4b12-91E0-4F059A8CECA8:3b846d2e-91ea-482e-a2ac-80d04c3e4e9c&quot; style=&quot;padding-right: 0px; display: inline; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px&quot;&gt;Tags van Technorati: &lt;a href=&quot;http://technorati.com/tags/OC%20SDK&quot; rel=&quot;tag&quot;&gt;OC SDK&lt;/a&gt;,&lt;a href=&quot;http://technorati.com/tags/George%20Durzi&quot; rel=&quot;tag&quot;&gt;George Durzi&lt;/a&gt;,&lt;a href=&quot;http://technorati.com/tags/CodePlex&quot; rel=&quot;tag&quot;&gt;CodePlex&lt;/a&gt;&lt;/div&gt;  </description><link>http://unified-communications-development.blogspot.com/2008/07/ocsdkwrapper-project-on-codeplex.html</link><author>noreply@blogger.com (Marc Wetters)</author><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-2391544828936088267.post-1621514802329918471</guid><pubDate>Tue, 01 Jul 2008 15:45:00 +0000</pubDate><atom:updated>2008-07-01T17:45:53.632+02:00</atom:updated><title>Joachim just received the Microsoft MVP Award</title><description>&lt;p&gt;I have to congratulate Joachim Farla for receiving the MVP award.&lt;/p&gt;  &lt;p&gt;&lt;a href=&quot;http://Unified-communications.blogspot.com&quot;&gt;http://Unified-communications.blogspot.com&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Marc&lt;/p&gt;  </description><link>http://unified-communications-development.blogspot.com/2008/07/joachim-just-received-microsoft-mvp.html</link><author>noreply@blogger.com (Marc Wetters)</author><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-2391544828936088267.post-3532677702988063362</guid><pubDate>Tue, 01 Jul 2008 06:40:00 +0000</pubDate><atom:updated>2008-07-01T08:40:31.077+02:00</atom:updated><title>Getting/Setting presence protocols</title><description>&lt;p&gt;About a month ago I downloaded all of the &lt;a href=&quot;http://msdn.microsoft.com/en-us/library/cc307432.aspx&quot;&gt;Microsoft Office Protocol Documents&lt;/a&gt; as a single zip file. I did the same today because I noticed that there were new version of these documents.&lt;/p&gt;  &lt;p&gt;What really made me wonder was that it weren&#39;t the same number of documents. As I am especially interested in the sip protocols, I noticed that the protocols for getting presence weren&#39;t in there anymore.....[MS-SIP].&lt;/p&gt;  &lt;p&gt;Turned out that they were moved to a different location.&lt;/p&gt;  &lt;p&gt;For anyone who is interested: &lt;a title=&quot;http://msdn.microsoft.com/en-us/library/cc239903.aspx&quot; href=&quot;http://msdn.microsoft.com/en-us/library/cc239903.aspx&quot;&gt;http://msdn.microsoft.com/en-us/library/cc239903.aspx&lt;/a&gt;&lt;/p&gt;  &lt;div class=&quot;wlWriterSmartContent&quot; id=&quot;scid:0767317B-992E-4b12-91E0-4F059A8CECA8:f5f6d441-afd2-44cf-9ab4-c78658d290f5&quot; style=&quot;padding-right: 0px; display: inline; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px&quot;&gt;Tags van Technorati: &lt;a href=&quot;http://technorati.com/tags/getting%20presence&quot; rel=&quot;tag&quot;&gt;getting presence&lt;/a&gt;,&lt;a href=&quot;http://technorati.com/tags/protocols&quot; rel=&quot;tag&quot;&gt;protocols&lt;/a&gt;,&lt;a href=&quot;http://technorati.com/tags/sip%20protocols&quot; rel=&quot;tag&quot;&gt;sip protocols&lt;/a&gt;,&lt;a href=&quot;http://technorati.com/tags/UCMA&quot; rel=&quot;tag&quot;&gt;UCMA&lt;/a&gt;&lt;/div&gt;  </description><link>http://unified-communications-development.blogspot.com/2008/07/gettingsetting-presence-protocols.html</link><author>noreply@blogger.com (Marc Wetters)</author><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-2391544828936088267.post-5573130519293036486</guid><pubDate>Tue, 01 Jul 2008 06:16:00 +0000</pubDate><atom:updated>2008-07-01T08:16:46.965+02:00</atom:updated><title>Presence Protocols</title><description>&lt;p&gt;Microsoft has just released a final version of their presence protocols (the one I used for presence subscription with UCMA).&lt;/p&gt;  &lt;p&gt;For any one who is interested in a deeper understanding of presence, this document can give you more insight.&lt;/p&gt;  &lt;p&gt;&lt;a title=&quot;http://msdn.microsoft.com/en-us/library/cc431501.aspx&quot; href=&quot;http://msdn.microsoft.com/en-us/library/cc431501.aspx&quot;&gt;http://msdn.microsoft.com/en-us/library/cc431501.aspx&lt;/a&gt;&lt;/p&gt;  &lt;div class=&quot;wlWriterSmartContent&quot; id=&quot;scid:0767317B-992E-4b12-91E0-4F059A8CECA8:5cc86113-7774-4509-a1a3-f64b8e197fdb&quot; style=&quot;padding-right: 0px; display: inline; padding-left: 0px; float: none; padding-bottom: 0px; margin: 0px; padding-top: 0px&quot;&gt;Tags van Technorati: &lt;a href=&quot;http://technorati.com/tags/UCMA&quot; rel=&quot;tag&quot;&gt;UCMA&lt;/a&gt;,&lt;a href=&quot;http://technorati.com/tags/Presence&quot; rel=&quot;tag&quot;&gt;Presence&lt;/a&gt;,&lt;a href=&quot;http://technorati.com/tags/Presence%20Protocols&quot; rel=&quot;tag&quot;&gt;Presence Protocols&lt;/a&gt;,&lt;a href=&quot;http://technorati.com/tags/Subscriptions&quot; rel=&quot;tag&quot;&gt;Subscriptions&lt;/a&gt;&lt;/div&gt;  </description><link>http://unified-communications-development.blogspot.com/2008/07/presence-protocols.html</link><author>noreply@blogger.com (Marc Wetters)</author><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-2391544828936088267.post-1414229162471662291</guid><pubDate>Fri, 27 Jun 2008 13:02:00 +0000</pubDate><atom:updated>2008-06-27T21:41:14.694+02:00</atom:updated><title>WPF Presence Screen saver</title><description>&lt;p&gt;Based on the &lt;a href=&quot;http://blogs.msdn.com/coding4fun/archive/2008/06/20/8626294.aspx&quot; target=&quot;_blank&quot;&gt;WPF Custom Screen Saver Art&lt;/a&gt; artikel by Erik Klimczak on coding4fun, a colleague of mine, Michiel van Oudheusden decided to extend this screen saver to show real presence.     &lt;br /&gt;&lt;a href=&quot;http://lh6.ggpht.com/MarcWetters/SGTk2kM_GtI/AAAAAAAAACA/6iifYlX3obg/s1600-h/screenshot%5B4%5D.png&quot;&gt;&lt;img style=&quot;border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px&quot; height=&quot;332&quot; alt=&quot;screenshot&quot; src=&quot;http://lh4.ggpht.com/MarcWetters/SGTk3dH6GJI/AAAAAAAAACE/gbwtUAOd1Cc/screenshot_thumb%5B2%5D.png?imgmax=800&quot; width=&quot;432&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Showing presence icons and the friendly name of the user. Next to this presence there is a kind of notification for incoming messages. The icon is going to blink.&lt;/p&gt;  &lt;p&gt;The presence information is build with &lt;a href=&quot;http://www.microsoft.com/downloads/details.aspx?FamilyID=ed1cce45-cc22-46e1-bd50-660fe6d2c98c&amp;amp;displaylang=en&quot; target=&quot;_blank&quot;&gt;Microsoft Office Communicator 2007 SDK&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;You can download the source code of this C# sample project code from &lt;a href=&quot;http://www.codeplex.com/eoffice/Release/ProjectReleases.aspx?ReleaseId=14798&quot; target=&quot;_blank&quot;&gt;codeplex.&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;More information &lt;a href=&quot;http://www.codeplex.com/eoffice&quot; target=&quot;_blank&quot;&gt;here.&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;For running this sample you have to need Office Communicator 2007 installed. This code doesn&#39;t run on 64 bit machines. &lt;/p&gt;  &lt;p&gt;There is one strange thing I encountered. The presence only changes if there is an other product running that is integrating with communicator (Outlook). &lt;/p&gt;  &lt;p&gt;For more information you can contact &lt;a href=&quot;mailto:Michiel.van.Oudheusden@e-office.com&quot;&gt;Michiel.van.Oudheusden@e-office.com&lt;/a&gt; or me &lt;a href=&quot;sip:Marc.Wetters@e-office.com&quot; target=&quot;_blank&quot;&gt;sip:Marc.Wetters@e-office.com&lt;/a&gt;&lt;/p&gt;  &lt;div class=&quot;wlWriterSmartContent&quot; id=&quot;scid:0767317B-992E-4b12-91E0-4F059A8CECA8:f702cfe7-7544-4fe2-8553-d798b30ba166&quot; style=&quot;padding-right: 0px; display: inline; padding-left: 0px; float: none; padding-bottom: 0px; margin: 0px; padding-top: 0px&quot;&gt;Tags van Technorati: &lt;a href=&quot;http://technorati.com/tags/Presence&quot; rel=&quot;tag&quot;&gt;Presence&lt;/a&gt;,&lt;a href=&quot;http://technorati.com/tags/Marc%20Wetters&quot; rel=&quot;tag&quot;&gt;Marc Wetters&lt;/a&gt;,&lt;a href=&quot;http://technorati.com/tags/Michiel%20van%20Oudheusden&quot; rel=&quot;tag&quot;&gt;Michiel van Oudheusden&lt;/a&gt;,&lt;a href=&quot;http://technorati.com/tags/OC%202007%20SDK&quot; rel=&quot;tag&quot;&gt;OC 2007 SDK&lt;/a&gt;,&lt;a href=&quot;http://technorati.com/tags/WPF&quot; rel=&quot;tag&quot;&gt;WPF&lt;/a&gt;,&lt;a href=&quot;http://technorati.com/tags/Screen%20saver&quot; rel=&quot;tag&quot;&gt;Screen saver&lt;/a&gt;&lt;/div&gt;  </description><link>http://unified-communications-development.blogspot.com/2008/06/wpf-presence-screen-saver.html</link><author>noreply@blogger.com (Marc Wetters)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://lh4.ggpht.com/MarcWetters/SGTk3dH6GJI/AAAAAAAAACE/gbwtUAOd1Cc/s72-c/screenshot_thumb%5B2%5D.png?imgmax=800" height="72" width="72"/><thr:total>4</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-2391544828936088267.post-4178158555389935682</guid><pubDate>Fri, 27 Jun 2008 09:06:00 +0000</pubDate><atom:updated>2008-06-27T11:06:59.522+02:00</atom:updated><title>UC Development Samples</title><description>&lt;p&gt;For all who want to start developing UC apps here are some new samples from Microsoft.&lt;/p&gt;  &lt;h3&gt;Incoming Call Screen Pop&lt;/h3&gt;  &lt;p&gt;Microsoft Unified Communications Client API 1.0 Sample Registers for incoming calls and pops up another app based on the caller ID info.    &lt;br /&gt;&lt;a href=&quot;http://www.microsoft.com/downloads/details.aspx?FamilyId=84AC7DD7-99D3-48F7-99D7-A281BD616407&amp;amp;displaylang=en&quot;&gt;http://www.microsoft.com/downloads/details.aspx?FamilyId=84AC7DD7-99D3-48F7-99D7-A281BD616407&amp;amp;displaylang=en&lt;/a&gt;&lt;/p&gt;  &lt;h3&gt;Presence in a Communications Web Client &lt;/h3&gt;  &lt;p&gt;Microsoft Unified Communications AJAX API Sample Shows how to use the UC AJAX Services API to put presence and IM into a web app.    &lt;br /&gt;&lt;a href=&quot;http://www.microsoft.com/downloads/details.aspx?FamilyId=AEBFA4E2-B30E-43A6-BF34-6403465BC9A9&amp;amp;displaylang=en&quot;&gt;http://www.microsoft.com/downloads/details.aspx?FamilyId=AEBFA4E2-B30E-43A6-BF34-6403465BC9A9&amp;amp;displaylang=en&lt;/a&gt;&lt;/p&gt;  &lt;h3&gt;Presence in Web Applications &lt;/h3&gt;  &lt;p&gt;Microsoft Office Communicator 2007 Automation API Sample Shows how to use the MOC automation API to show presence in web pages. Uses the name.ctrl that SharePoint uses as well as    &lt;br /&gt;the custom ActiveX presence control.     &lt;br /&gt;&lt;a href=&quot;http://www.microsoft.com/downloads/details.aspx?FamilyId=32CA6DA5-42A2-4B96-B13C-644AD8256645&amp;amp;displaylang=en&quot;&gt;http://www.microsoft.com/downloads/details.aspx?FamilyId=32CA6DA5-42A2-4B96-B13C-644AD8256645&amp;amp;displaylang=en&lt;/a&gt;&lt;/p&gt;  &lt;h3&gt;Presence in Managed Applications&lt;/h3&gt;  &lt;p&gt;Microsoft Office Communicator 2007 Automation API Sample    &lt;br /&gt;Uses the MOC automation API and two custom WinForms controls to show     &lt;br /&gt;presence in WinForms apps and launch collaboration sessions.     &lt;br /&gt;&lt;a href=&quot;http://www.microsoft.com/downloads/details.aspx?FamilyId=CBD51E8A-13BB-4F06-9CD5-E737E51E4B54&amp;amp;displaylang=en&quot;&gt;http://www.microsoft.com/downloads/details.aspx?FamilyId=CBD51E8A-13BB-4F06-9CD5-E737E51E4B54&amp;amp;displaylang=en&lt;/a&gt;&lt;/p&gt;  &lt;h3&gt;Presence in Rich Clients &lt;/h3&gt;  &lt;p&gt;Unified Communications 2007 AJAX Service Sample Shows how to use the UC AJAX Services to provide presence and IM in a rich client app.    &lt;br /&gt;&lt;a href=&quot;http://www.microsoft.com/downloads/details.aspx?FamilyId=7F11D95D-5AFD-4B8A-84AF-4B7A9720AADF&amp;amp;displaylang=en&quot;&gt;http://www.microsoft.com/downloads/details.aspx?FamilyId=7F11D95D-5AFD-4B8A-84AF-4B7A9720AADF&amp;amp;displaylang=en&lt;/a&gt;&lt;/p&gt;  &lt;h3&gt;Ethical Walls for Microsoft Office Communications Server 2007&lt;/h3&gt;  &lt;p&gt; Microsoft Office Communications Server 2007 API Sample Uses the OC Server API to show how to block sessions between specified users at the server level.    &lt;br /&gt;&lt;a href=&quot;http://www.microsoft.com/downloads/details.aspx?FamilyId=070DBCAB-472A-4EC1-AEAC-9273ECCD70C9&amp;amp;displaylang=en&quot;&gt;http://www.microsoft.com/downloads/details.aspx?FamilyId=070DBCAB-472A-4EC1-AEAC-9273ECCD70C9&amp;amp;displaylang=en&lt;/a&gt;&lt;/p&gt;  &lt;h3&gt;Custom Alerting &lt;/h3&gt;  &lt;p&gt;Microsoft Office Communications Server 2007 API Sample Uses a custom desktop client written using the UCC API and an alert sender written using the UCMA API to send alerts to users.    &lt;br /&gt;&lt;a href=&quot;http://www.microsoft.com/downloads/details.aspx?FamilyId=9EFC784B-E443-4441-926C-5FD405D41BD9&amp;amp;displaylang=en&quot;&gt;http://www.microsoft.com/downloads/details.aspx?FamilyId=9EFC784B-E443-4441-926C-5FD405D41BD9&amp;amp;displaylang=en&lt;/a&gt;&lt;/p&gt;  &lt;h3&gt;Group and Contact Management Using WMI &lt;/h3&gt;  &lt;p&gt;Microsoft Office Communications Server 2007 WMI API Sample Sample of using the WMI managment API for OCS to create and maintain contacts and contact groups for users.    &lt;br /&gt;&lt;a href=&quot;http://www.microsoft.com/downloads/details.aspx?FamilyId=5FAF0725-7139-401C-A848-086A529CC78E&amp;amp;displaylang=en&quot;&gt;http://www.microsoft.com/downloads/details.aspx?FamilyId=5FAF0725-7139-401C-A848-086A529CC78E&amp;amp;displaylang=en&lt;/a&gt;&lt;/p&gt;  &lt;h3&gt;Group and Contact Management Using Communicator Automation&lt;/h3&gt;  &lt;p&gt;Microsoft Office Communicator 2007 Automation API Sample Shows how to use the MOC automation API to manage users and groups on the client desktop.    &lt;br /&gt;&lt;a href=&quot;http://www.microsoft.com/downloads/details.aspx?FamilyId=C334685A-4C9D-416F-BCFB-BD79613EE34C&amp;amp;displaylang=en&quot;&gt;http://www.microsoft.com/downloads/details.aspx?FamilyId=C334685A-4C9D-416F-BCFB-BD79613EE34C&amp;amp;displaylang=en&lt;/a&gt;&lt;/p&gt;  &lt;h3&gt;Office Communicator 2007 Automation API Capabilities&lt;/h3&gt;  &lt;p&gt;Microsoft Office Communicator 2007 Automation API Sample Shows some of the more advanced features of the MOC automation API such as custom conversation logging and causing incoming session windows to get focus.    &lt;br /&gt;&lt;a href=&quot;http://www.microsoft.com/downloads/details.aspx?FamilyId=36E27ADD-D45E-4057-9CD6-7F62B792B0B6&amp;amp;displaylang=en&quot;&gt;http://www.microsoft.com/downloads/details.aspx?FamilyId=36E27ADD-D45E-4057-9CD6-7F62B792B0B6&amp;amp;displaylang=en&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href=&quot;sip:Marc.Wetters@e-office.com&quot; target=&quot;_blank&quot;&gt;sip:Marc.Wetters@e-office.com&lt;/a&gt;&lt;/p&gt;  </description><link>http://unified-communications-development.blogspot.com/2008/06/uc-development-samples.html</link><author>noreply@blogger.com (Marc Wetters)</author><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-2391544828936088267.post-4971074999096635541</guid><pubDate>Thu, 12 Jun 2008 06:45:00 +0000</pubDate><atom:updated>2008-06-12T08:45:23.253+02:00</atom:updated><title>Creating a CWA client with Silverlight 2: Upgrading from the beta 1 to beta 2.</title><description>&lt;p&gt;&lt;/p&gt;  &lt;p&gt;First things I did was uninstalling Blend 2.5 March preview and the Silverlight 2 beta 1 Visual Studio tools.&lt;/p&gt;  &lt;p&gt;Then Installed the Blend 2.5 June Preview end the Silverlight 2 beta 2 SDK.&lt;/p&gt;  &lt;p&gt;I opened my existing Silverlight 2 beta 1 project. Got the question to convert it, converted it and I could build my solution without a problem.&lt;/p&gt;  &lt;p&gt;No problems till I first started to run the project. Got the statement that I had to Uninstall the beta 2 and reinstall the beta. This was an easy problem to solve. When you upgrade from silverlight 2 beta 1 to the beta 2 the silverlight project is upgraded. But what wasn&#39;t upgraded was the web page that is hosting your silverlight app. This is easy to fix . In your web application properties remove and add your silverlight application.&lt;/p&gt;  &lt;p&gt;&lt;a href=&quot;http://lh4.ggpht.com/MarcWetters/SFDF_mKJWTI/AAAAAAAAAB4/P1z2qEzdgfE/s1600-h/image%5B5%5D.png&quot;&gt;&lt;img style=&quot;border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px&quot; height=&quot;296&quot; alt=&quot;image&quot; src=&quot;http://lh3.ggpht.com/MarcWetters/SFDGAgcQuYI/AAAAAAAAAB8/ky6mvXb0eg4/image_thumb%5B3%5D.png?imgmax=800&quot; width=&quot;477&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Now you can start your silverlight application.&lt;/p&gt;  &lt;h3&gt;Invalid cross-thread access&lt;/h3&gt;  &lt;p&gt;It looked as if everything was working, until I logged in. Then I got an Invalid cross-thread access error.&lt;/p&gt;  &lt;p&gt;Hmm something really has changed. In de &lt;a href=&quot;http://www.microsoft.com/downloads/details.aspx?FamilyID=bce7684a-507b-4fc6-bc99-6933cd690cab&amp;amp;DisplayLang=en&quot; target=&quot;_blank&quot;&gt;Microsoft&amp;#174; Silverlight&amp;#8482; 2 Software Development Kit Beta 2 Documentation&lt;/a&gt; which has to be downloaded separately there is a list breaking changes between Beta 1 and the Beta 2. &lt;/p&gt;  &lt;p&gt;In this case the changes on the HttpWebRequest caused the error. All delegates on the HttpWebRequest are changed to return on a background thread. If you try to update your UI from a background threat you get this error. &lt;/p&gt;  &lt;h3&gt;The solution&lt;/h3&gt;  &lt;p&gt;It&#39;s quite easy to handle this problem. On all Silverlight Controlls there is a Dispatcher property. Use this property to update your UI&lt;/p&gt;  &lt;div&gt;   &lt;pre style=&quot;padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none&quot;&gt;&lt;span style=&quot;color: #0000ff&quot;&gt;this&lt;/span&gt;.Dispatcher.BeginInvoke(&lt;span style=&quot;color: #0000ff&quot;&gt;delegate&lt;/span&gt;()&lt;br /&gt;{&lt;br /&gt;   &lt;span style=&quot;color: #008000&quot;&gt;//DO your UI update&lt;/span&gt;&lt;br /&gt;               &lt;br /&gt;     &lt;br /&gt;});&lt;/pre&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;That were the only things that I had to do upgrading from the beta 1 to the beta 2.&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;What&#39;s coming up next on silverlight beta 2 and CWA. The Beta 2 has a new tabbed control. I had created one my self and I will have a look how easy it is to use this new control. &lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;For more information sip:Marc.Wetters@e-office.com&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&amp;#160;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class=&quot;wlWriterSmartContent&quot; id=&quot;scid:0767317B-992E-4b12-91E0-4F059A8CECA8:a2645838-b6e5-4f67-b3b8-407462f6365f&quot; style=&quot;padding-right: 0px; display: inline; padding-left: 0px; float: none; padding-bottom: 0px; margin: 0px; padding-top: 0px&quot;&gt;Tags van Technorati: &lt;a href=&quot;http://technorati.com/tags/Silverlight%202%20beta%202&quot; rel=&quot;tag&quot;&gt;Silverlight 2 beta 2&lt;/a&gt;,&lt;a href=&quot;http://technorati.com/tags/HttpWebRequest&quot; rel=&quot;tag&quot;&gt;HttpWebRequest&lt;/a&gt;,&lt;a href=&quot;http://technorati.com/tags/Invalid%20cross-thread%20access&quot; rel=&quot;tag&quot;&gt;Invalid cross-thread access&lt;/a&gt;,&lt;a href=&quot;http://technorati.com/tags/Threading&quot; rel=&quot;tag&quot;&gt;Threading&lt;/a&gt;,&lt;a href=&quot;http://technorati.com/tags/background%20thread&quot; rel=&quot;tag&quot;&gt;background thread&lt;/a&gt;,&lt;a href=&quot;http://technorati.com/tags/CWA&quot; rel=&quot;tag&quot;&gt;CWA&lt;/a&gt;,&lt;a href=&quot;http://technorati.com/tags/UC&quot; rel=&quot;tag&quot;&gt;UC&lt;/a&gt;,&lt;a href=&quot;http://technorati.com/tags/Development&quot; rel=&quot;tag&quot;&gt;Development&lt;/a&gt;,&lt;a href=&quot;http://technorati.com/tags/Marc%20Wetters&quot; rel=&quot;tag&quot;&gt;Marc Wetters&lt;/a&gt;&lt;/div&gt;  </description><link>http://unified-communications-development.blogspot.com/2008/06/creating-cwa-client-with-silverlight-2.html</link><author>noreply@blogger.com (Marc Wetters)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://lh3.ggpht.com/MarcWetters/SFDGAgcQuYI/AAAAAAAAAB8/ky6mvXb0eg4/s72-c/image_thumb%5B3%5D.png?imgmax=800" height="72" width="72"/><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-2391544828936088267.post-6587107738409709345</guid><pubDate>Fri, 06 Jun 2008 11:47:00 +0000</pubDate><atom:updated>2008-06-30T09:57:02.823+02:00</atom:updated><title>CWA Client with Silverlight 2 beta 2</title><description>&lt;p&gt;I have been able to download &lt;a href=&quot;http://www.microsoft.com/downloads/details.aspx?FamilyID=bce7684a-507b-4fc6-bc99-6933cd690cab&amp;amp;DisplayLang=en&quot;&gt;Microsoft® Silverlight™ 2 Software Development Kit Beta 2 Documentation&lt;/a&gt;. And took a look at something what was really important for me in building a communicator web access with Silverlight 2.&lt;/p&gt;&lt;p&gt;The first thing I looked at was the support for Headers in the HttpWebResponse Class. And too bad it still isn&#39;t in there :-(.&lt;/p&gt;&lt;p&gt;For everybody asking why this is such a big deal. This would have made it possible to use silverlight HttpWebRequest/ HttpWebResponse and no need any more for the browsers / ActiveX XMLHttpRequest. So hosting Silverlight controls who access our CWA server still have to run on our CWA server :-( and we still have to develop our silverlight CWA client on a CWA server directly.&lt;/p&gt;&lt;p&gt;What is good is that Silverlight 2 beta 2 now has a tabbed control.&lt;/p&gt;&lt;p&gt;See also: &lt;a href=&quot;http://unified-communications-development.blogspot.com/2008/05/creating-cwa-client-with-silverlight-2.html&quot;&gt;Creating a CWA client with Silverlight 2 beta1 (part 1).&lt;/a&gt;&lt;/p&gt;&lt;p&gt;Please contact Marc Wetters @&lt;br /&gt;Sip:Marc.Wetters@e-office.com or send me an email on Marc.Wetters@e-office.com . Enjoy and please feel free to give me your feedback.&lt;/p&gt;&lt;div class=&quot;wlWriterSmartContent&quot; id=&quot;scid:0767317B-992E-4b12-91E0-4F059A8CECA8:94055ea6-a141-4b3c-a39a-ad7adec1f8b7&quot; style=&quot;PADDING-RIGHT: 0px; DISPLAY: inline; PADDING-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-TOP: 0px&quot;&gt;Tags van Technorati: &lt;a href=&quot;http://technorati.com/tags/Silverlight%202%20beta%202&quot; rel=&quot;tag&quot;&gt;Silverlight 2 beta 2&lt;/a&gt;,&lt;a href=&quot;http://technorati.com/tags/CWA&quot; rel=&quot;tag&quot;&gt;CWA&lt;/a&gt;,&lt;a href=&quot;http://technorati.com/tags/HttpWebRequest&quot; rel=&quot;tag&quot;&gt;HttpWebRequest&lt;/a&gt;&lt;/div&gt;</description><link>http://unified-communications-development.blogspot.com/2008/06/cwa-client-with-silverlight-2-beta-2.html</link><author>noreply@blogger.com (Marc Wetters)</author></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-2391544828936088267.post-176153449088809602</guid><pubDate>Wed, 04 Jun 2008 10:04:00 +0000</pubDate><atom:updated>2008-06-04T12:04:34.591+02:00</atom:updated><title>CWA Client with Silverlight 2 beta 1 Update</title><description>&lt;p&gt;&lt;/p&gt;  &lt;p&gt;Silverlight 2 Beta 2 is nearly here (out at the end of this week).&lt;/p&gt;  &lt;p&gt;As soon as I get my hands on the Silverlight 2 Beta 2. I will try and update my application. And will post my findings to see if things have changed for the better.&lt;/p&gt;  &lt;p&gt;Main things that should have been changed is the improved cross-domain access and the tabbed control will be introduced.&lt;/p&gt;  &lt;p&gt;See also:&lt;a href=&quot;http://blogs.msdn.com/salvapatuel/archive/2008/06/04/envision-silverlight-2-beta-2-and-the-competition.aspx&quot;&gt;Envision: Silverlight 2 Beta 2 and the competition&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;For more information sip:Marc.Wetters@e-office.com&lt;/p&gt;  </description><link>http://unified-communications-development.blogspot.com/2008/06/cwa-client-with-silverlight-2-beta-1.html</link><author>noreply@blogger.com (Marc Wetters)</author><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-2391544828936088267.post-2436684036959900520</guid><pubDate>Wed, 04 Jun 2008 08:37:00 +0000</pubDate><atom:updated>2008-06-04T10:55:19.413+02:00</atom:updated><title>Subscriptions using UCMA part 5: Enhanced Presence</title><description>&lt;p&gt;This one is the real interesting one, how can you subscribe to enhanced presence. See also &lt;a href=&quot;http://unified-communications-development.blogspot.com/2008/06/subscriptions-in-ucma-part-3-presence.html&quot;&gt;Subscriptions in UCMA part 3: Presence&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;The sample code here shows how to subscribe to one user. Actually this is a batch subscribe and is easy extensible for multiple users.&lt;/p&gt;  &lt;p&gt;This one is much more complex then subscribing to presence using PIDF. The real thing here is enhanced presence. You can subscribe to multiple categories.&lt;/p&gt;  &lt;p&gt;First let&#39;s create ISipSubscriptionProcessor again. We have to send a message and we have to set our signaling headers correct. This sample doesn&#39;t show how to handle the notification message.&lt;/p&gt;  &lt;div&gt;   &lt;pre style=&quot;padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none&quot;&gt;&lt;span style=&quot;color: #0000ff&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;color: #0000ff&quot;&gt;class&lt;/span&gt; PresenceSubscriptionEnhanced : ISipSubscriptionProcessor&lt;br /&gt;    {&lt;br /&gt;        &lt;span style=&quot;color: #0000ff&quot;&gt;private&lt;/span&gt; &lt;span style=&quot;color: #0000ff&quot;&gt;string&lt;/span&gt; _uri = &lt;span style=&quot;color: #006080&quot;&gt;&amp;quot;&amp;quot;&lt;/span&gt;;&lt;br /&gt;        &lt;span style=&quot;color: #cc6633&quot;&gt;#region&lt;/span&gt; ISipSubscriptionProcessor Members&lt;br /&gt;&lt;br /&gt;        &lt;span style=&quot;color: #0000ff&quot;&gt;void&lt;/span&gt; ISipSubscriptionProcessor.GetExtensionHeaders(SipSubscription.RequestType requestType, &lt;span style=&quot;color: #0000ff&quot;&gt;out&lt;/span&gt; IEnumerable&amp;lt;SignalingHeader&amp;gt; extensionHeaders)&lt;br /&gt;        {&lt;br /&gt;           &lt;br /&gt;            List&amp;lt;SignalingHeader&amp;gt; list = &lt;span style=&quot;color: #0000ff&quot;&gt;new&lt;/span&gt; List&amp;lt;SignalingHeader&amp;gt;();&lt;br /&gt;            list.Add(&lt;span style=&quot;color: #0000ff&quot;&gt;new&lt;/span&gt; SignalingHeader(&lt;span style=&quot;color: #006080&quot;&gt;&amp;quot;Accept&amp;quot;&lt;/span&gt;, &lt;span style=&quot;color: #006080&quot;&gt;&amp;quot;application/msrtc-event-categories+xml&amp;quot;&lt;/span&gt;));&lt;br /&gt;            list.Add(&lt;span style=&quot;color: #0000ff&quot;&gt;new&lt;/span&gt; SignalingHeader(&lt;span style=&quot;color: #006080&quot;&gt;&amp;quot;Accept&amp;quot;&lt;/span&gt;, &lt;span style=&quot;color: #006080&quot;&gt;&amp;quot;application/rlmi+xml&amp;quot;&lt;/span&gt;));&lt;br /&gt;            list.Add(&lt;span style=&quot;color: #0000ff&quot;&gt;new&lt;/span&gt; SignalingHeader(&lt;span style=&quot;color: #006080&quot;&gt;&amp;quot;Accept&amp;quot;&lt;/span&gt;, &lt;span style=&quot;color: #006080&quot;&gt;&amp;quot;multipart/related&amp;quot;&lt;/span&gt;));&lt;br /&gt;            list.Add(&lt;span style=&quot;color: #0000ff&quot;&gt;new&lt;/span&gt; SignalingHeader(&lt;span style=&quot;color: #006080&quot;&gt;&amp;quot;Content-Type&amp;quot;&lt;/span&gt;, &lt;span style=&quot;color: #006080&quot;&gt;&amp;quot;application/msrtc-adrl-categorylist+xml&amp;quot;&lt;/span&gt;));&lt;br /&gt;            list.Add(&lt;span style=&quot;color: #0000ff&quot;&gt;new&lt;/span&gt; SignalingHeader(&lt;span style=&quot;color: #006080&quot;&gt;&amp;quot;supported&amp;quot;&lt;/span&gt;, &lt;span style=&quot;color: #006080&quot;&gt;&amp;quot;eventlist&amp;quot;&lt;/span&gt;));&lt;br /&gt;            list.Add(&lt;span style=&quot;color: #0000ff&quot;&gt;new&lt;/span&gt; SignalingHeader(&lt;span style=&quot;color: #006080&quot;&gt;&amp;quot;supported&amp;quot;&lt;/span&gt;, &lt;span style=&quot;color: #006080&quot;&gt;&amp;quot;ms-piggyback-first-notify&amp;quot;&lt;/span&gt;));&lt;br /&gt;            list.Add(&lt;span style=&quot;color: #0000ff&quot;&gt;new&lt;/span&gt; SignalingHeader(&lt;span style=&quot;color: #006080&quot;&gt;&amp;quot;Require&amp;quot;&lt;/span&gt;, &lt;span style=&quot;color: #006080&quot;&gt;&amp;quot;adhoclist&amp;quot;&lt;/span&gt;));&lt;br /&gt;            list.Add(&lt;span style=&quot;color: #0000ff&quot;&gt;new&lt;/span&gt; SignalingHeader(&lt;span style=&quot;color: #006080&quot;&gt;&amp;quot;Require&amp;quot;&lt;/span&gt;, &lt;span style=&quot;color: #006080&quot;&gt;&amp;quot;categoryList&amp;quot;&lt;/span&gt;));&lt;br /&gt;            extensionHeaders = list;&lt;br /&gt;&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        &lt;span style=&quot;color: #0000ff&quot;&gt;void&lt;/span&gt; ISipSubscriptionProcessor.GetMessageBody(SipSubscription.RequestType requestType, &lt;span style=&quot;color: #0000ff&quot;&gt;out&lt;/span&gt; ContentType contentType, &lt;span style=&quot;color: #0000ff&quot;&gt;out&lt;/span&gt; &lt;span style=&quot;color: #0000ff&quot;&gt;byte&lt;/span&gt;[] messageBody)&lt;br /&gt;        {&lt;br /&gt;            contentType = &lt;span style=&quot;color: #0000ff&quot;&gt;new&lt;/span&gt; ContentType(&lt;span style=&quot;color: #006080&quot;&gt;&amp;quot;application/msrtc-adrl-categorylist+xml&amp;quot;&lt;/span&gt;);&lt;br /&gt;            &lt;span style=&quot;color: #0000ff&quot;&gt;string&lt;/span&gt; message = &lt;span style=&quot;color: #006080&quot;&gt;&amp;quot;&amp;lt;batchSub xmlns=\&amp;quot;http://schemas.microsoft.com/2006/01/sip/batch-subscribe\&amp;quot; uri=\&amp;quot;sip:Marc.Wetters@e-office.com\&amp;quot; name=\&amp;quot;\&amp;quot;&amp;gt; &amp;lt;action name=\&amp;quot;subscribe\&amp;quot; id=\&amp;quot;63792024\&amp;quot;&amp;gt; &amp;lt;adhocList&amp;gt; &amp;lt;resource uri=\&amp;quot;&amp;quot;&lt;/span&gt;+_uri+&lt;span style=&quot;color: #006080&quot;&gt;&amp;quot;\&amp;quot;/&amp;gt;  &amp;lt;/adhocList&amp;gt; &amp;lt;categoryList xmlns=\&amp;quot;http://schemas.microsoft.com/2006/09/sip/categorylist\&amp;quot;&amp;gt; &amp;lt;category name=\&amp;quot;calendarData\&amp;quot;/&amp;gt; &amp;lt;category name=\&amp;quot;contactCard\&amp;quot;/&amp;gt; &amp;lt;category name=\&amp;quot;note\&amp;quot;/&amp;gt; &amp;lt;category name=\&amp;quot;services\&amp;quot;/&amp;gt; &amp;lt;category name=\&amp;quot;state\&amp;quot;/&amp;gt; &amp;lt;/categoryList&amp;gt; &amp;lt;/action&amp;gt; &amp;lt;/batchSub&amp;gt;&amp;quot;&lt;/span&gt;;&lt;br /&gt;            messageBody = System.Text.Encoding.UTF8.GetBytes(message);&lt;br /&gt;  &lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        &lt;span style=&quot;color: #0000ff&quot;&gt;void&lt;/span&gt; ISipSubscriptionProcessor.ProcessErrorResponse(SipResponseData message)&lt;br /&gt;        {&lt;br /&gt;           &lt;span style=&quot;color: #008000&quot;&gt;//TODO;&lt;/span&gt;&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        &lt;span style=&quot;color: #0000ff&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;color: #0000ff&quot;&gt;void&lt;/span&gt; ProcessNotification(SipMessageData message)&lt;br /&gt;        {&lt;br /&gt;            &lt;span style=&quot;color: #0000ff&quot;&gt;string&lt;/span&gt; s = message.GetMessageBodyString();&lt;br /&gt;            &lt;span style=&quot;color: #008000&quot;&gt;//TODO&lt;/span&gt;&lt;br /&gt;     &lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        &lt;span style=&quot;color: #0000ff&quot;&gt;void&lt;/span&gt; ISipSubscriptionProcessor.SubscriptionStateChanged(SubscriptionStateChangedEventArgs eventArg)&lt;br /&gt;        {&lt;br /&gt;            &lt;span style=&quot;color: #008000&quot;&gt;//TODO&lt;/span&gt;&lt;br /&gt;        }&lt;br /&gt;       &lt;span style=&quot;color: #cc6633&quot;&gt;#endregion&lt;/span&gt;&lt;br /&gt;        &lt;span style=&quot;color: #0000ff&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;color: #0000ff&quot;&gt;string&lt;/span&gt; Uri&lt;br /&gt;        {&lt;br /&gt;            get { &lt;span style=&quot;color: #0000ff&quot;&gt;return&lt;/span&gt; _uri;}&lt;br /&gt;            set { _uri = &lt;span style=&quot;color: #0000ff&quot;&gt;value&lt;/span&gt;; }&lt;br /&gt;&lt;br /&gt;        }&lt;br /&gt;    }&lt;/pre&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;Let&#39;s subscribe.&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;div&gt;&lt;br /&gt;  &lt;pre style=&quot;padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none&quot;&gt;&lt;span style=&quot;color: #0000ff&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;color: #0000ff&quot;&gt;void&lt;/span&gt; SubscribePresence(&lt;span style=&quot;color: #0000ff&quot;&gt;string&lt;/span&gt; sip)&lt;br /&gt;       {&lt;br /&gt;           PresenceSubscriptionPIDF presenceSubscription = &lt;span style=&quot;color: #0000ff&quot;&gt;new&lt;/span&gt; PresenceSubscriptionPIDF();&lt;br /&gt;           presenceSubscription.Uri = sip;&lt;br /&gt;           SipEndpoint myEndpoint = _endPoint;&lt;br /&gt;           RealTimeAddress cgAddress = &lt;span style=&quot;color: #0000ff&quot;&gt;new&lt;/span&gt; RealTimeAddress(sip);&lt;br /&gt;           SipSubscription mySubScription = &lt;span style=&quot;color: #0000ff&quot;&gt;new&lt;/span&gt; SipSubscription(myEndpoint, cgAddress, &lt;span style=&quot;color: #006080&quot;&gt;&amp;quot;presence&amp;quot;&lt;/span&gt;, presenceSubscription);&lt;br /&gt;           mySubScription.BeginSubscribe(BeginSubscribeCallback, mySubScription);&lt;br /&gt;       }&lt;br /&gt;&lt;span style=&quot;color: #0000ff&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;color: #0000ff&quot;&gt;void&lt;/span&gt; BeginSubscribeCallback(IAsyncResult asyncResult)&lt;br /&gt;        {&lt;br /&gt;&lt;br /&gt;            SipSubscription mySubscription = asyncResult.AsyncState &lt;span style=&quot;color: #0000ff&quot;&gt;as&lt;/span&gt; SipSubscription;&lt;br /&gt;            &lt;span style=&quot;color: #0000ff&quot;&gt;try&lt;/span&gt;&lt;br /&gt;            {&lt;br /&gt;                mySubscription.EndSubscribe(asyncResult);&lt;br /&gt;            }&lt;br /&gt;            &lt;span style=&quot;color: #0000ff&quot;&gt;catch&lt;/span&gt; (PublishSubscribeException)&lt;br /&gt;            {&lt;br /&gt;                &lt;span style=&quot;color: #008000&quot;&gt;//Error(&amp;quot;An exception occurred when unregistering the session.\n{0}&amp;quot;, endpoint.ToString());&lt;/span&gt;&lt;br /&gt;            }&lt;br /&gt;&lt;br /&gt;            &lt;span style=&quot;color: #0000ff&quot;&gt;catch&lt;/span&gt; (RealTimeException)&lt;br /&gt;            {&lt;br /&gt;                &lt;span style=&quot;color: #008000&quot;&gt;//Error(&amp;quot;An exception occurred when unregistering the session.\n{0}&amp;quot;, endpoint.ToString());&lt;/span&gt;&lt;br /&gt;            }&lt;br /&gt;        }&lt;/pre&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;For more information/questions/remarks please contact me sip:marc.wetters@e-office.com&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&amp;#160;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class=&quot;wlWriterSmartContent&quot; id=&quot;scid:0767317B-992E-4b12-91E0-4F059A8CECA8:ebc8b683-85b8-4a48-b4c3-ff51acd68061&quot; style=&quot;padding-right: 0px; display: inline; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px&quot;&gt;Tags van Technorati: &lt;a href=&quot;http://technorati.com/tags/ISipSubscriptionProcessor&quot; rel=&quot;tag&quot;&gt;ISipSubscriptionProcessor&lt;/a&gt;,&lt;a href=&quot;http://technorati.com/tags/Presence&quot; rel=&quot;tag&quot;&gt;Presence&lt;/a&gt;,&lt;a href=&quot;http://technorati.com/tags/PIDF&quot; rel=&quot;tag&quot;&gt;PIDF&lt;/a&gt;,&lt;a href=&quot;http://technorati.com/tags/Marc%20Wetters&quot; rel=&quot;tag&quot;&gt;Marc Wetters&lt;/a&gt;,&lt;a href=&quot;http://technorati.com/tags/UCMA&quot; rel=&quot;tag&quot;&gt;UCMA&lt;/a&gt;,&lt;a href=&quot;http://technorati.com/tags/Subscriptions&quot; rel=&quot;tag&quot;&gt;Subscriptions&lt;/a&gt;,&lt;a href=&quot;http://technorati.com/tags/Enhanced%20Presence&quot; rel=&quot;tag&quot;&gt;Enhanced Presence&lt;/a&gt;,&lt;a href=&quot;http://technorati.com/tags/application/msrtc-event-categories+xml&quot; rel=&quot;tag&quot;&gt;application/msrtc-event-categories+xml&lt;/a&gt;,&lt;a href=&quot;http://technorati.com/tags/application/msrtc-adrl-categorylist+xml&quot; rel=&quot;tag&quot;&gt;application/msrtc-adrl-categorylist+xml&lt;/a&gt;,&lt;a href=&quot;http://technorati.com/tags/OCS&quot; rel=&quot;tag&quot;&gt;OCS&lt;/a&gt;&lt;/div&gt;  </description><link>http://unified-communications-development.blogspot.com/2008/06/subscriptions-using-ucma-part-5.html</link><author>noreply@blogger.com (Marc Wetters)</author><thr:total>1</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-2391544828936088267.post-7085057028974351813</guid><pubDate>Wed, 04 Jun 2008 08:22:00 +0000</pubDate><atom:updated>2008-06-04T10:22:35.125+02:00</atom:updated><title>Subscriptions in UCMA part 4: Presence (PIDF)</title><description>&lt;p&gt;In this part I&#39;ll show you how to implement subscriptions using PIDF. See also &lt;a href=&quot;http://unified-communications-development.blogspot.com/2008/06/subscriptions-in-ucma-part-3-presence.html&quot;&gt;Subscriptions in UCMA part 3: Presence&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;First we need as with all subscriptions the ISipSubscriptionProcessor.&lt;/p&gt;  &lt;div&gt;   &lt;pre style=&quot;padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none&quot;&gt;&lt;span style=&quot;color: #0000ff&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;color: #0000ff&quot;&gt;class&lt;/span&gt; PresenceSubscriptionPIDF : ISipSubscriptionProcessor&lt;br /&gt;    {&lt;br /&gt;&lt;br /&gt;        &lt;span style=&quot;color: #cc6633&quot;&gt;#region&lt;/span&gt; ISipSubscriptionProcessor Members&lt;br /&gt;&lt;br /&gt;        &lt;span style=&quot;color: #0000ff&quot;&gt;void&lt;/span&gt; ISipSubscriptionProcessor.GetExtensionHeaders(SipSubscription.RequestType requestType, &lt;span style=&quot;color: #0000ff&quot;&gt;out&lt;/span&gt; IEnumerable&amp;lt;SignalingHeader&amp;gt; extensionHeaders)&lt;br /&gt;        {&lt;br /&gt;           &lt;br /&gt;            extensionHeaders = &lt;span style=&quot;color: #0000ff&quot;&gt;null&lt;/span&gt;;&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        &lt;span style=&quot;color: #0000ff&quot;&gt;void&lt;/span&gt; ISipSubscriptionProcessor.GetMessageBody(SipSubscription.RequestType requestType, &lt;span style=&quot;color: #0000ff&quot;&gt;out&lt;/span&gt; ContentType contentType, &lt;span style=&quot;color: #0000ff&quot;&gt;out&lt;/span&gt; &lt;span style=&quot;color: #0000ff&quot;&gt;byte&lt;/span&gt;[] messageBody)&lt;br /&gt;        {&lt;br /&gt;            contentType = &lt;span style=&quot;color: #0000ff&quot;&gt;null&lt;/span&gt;;&lt;br /&gt;            messageBody = &lt;span style=&quot;color: #0000ff&quot;&gt;new&lt;/span&gt; Byte[0];&lt;br /&gt;&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        &lt;span style=&quot;color: #0000ff&quot;&gt;void&lt;/span&gt; ISipSubscriptionProcessor.ProcessErrorResponse(SipResponseData message)&lt;br /&gt;        {&lt;br /&gt;            Console.WriteLine(&lt;span style=&quot;color: #006080&quot;&gt;&amp;quot;error = &amp;quot;&lt;/span&gt; + message.ResponseCode);&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        &lt;span style=&quot;color: #0000ff&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;color: #0000ff&quot;&gt;void&lt;/span&gt; ProcessNotification(SipMessageData message)&lt;br /&gt;        {&lt;br /&gt;            &lt;span style=&quot;color: #0000ff&quot;&gt;string&lt;/span&gt; s = message.GetMessageBodyString();&lt;br /&gt;            &lt;span style=&quot;color: #0000ff&quot;&gt;string&lt;/span&gt; status = &lt;span style=&quot;color: #006080&quot;&gt;&amp;quot;online&amp;quot;&lt;/span&gt;;&lt;br /&gt;            &lt;span style=&quot;color: #0000ff&quot;&gt;string&lt;/span&gt; sip = &lt;span style=&quot;color: #006080&quot;&gt;&amp;quot;&amp;quot;&lt;/span&gt;;&lt;br /&gt;            &lt;span style=&quot;color: #0000ff&quot;&gt;try&lt;/span&gt;{&lt;br /&gt;                XmlDocument doc = &lt;span style=&quot;color: #0000ff&quot;&gt;new&lt;/span&gt; XmlDocument();&lt;br /&gt;                doc.LoadXml(s);&lt;br /&gt;                XmlNamespaceManager nsmanager = &lt;span style=&quot;color: #0000ff&quot;&gt;new&lt;/span&gt; XmlNamespaceManager(doc.NameTable);&lt;br /&gt;                nsmanager.AddNamespace(&lt;span style=&quot;color: #006080&quot;&gt;&amp;quot;p&amp;quot;&lt;/span&gt;, &lt;span style=&quot;color: #006080&quot;&gt;&amp;quot;urn:ietf:params:xml:ns:pidf&amp;quot;&lt;/span&gt;);&lt;br /&gt;                nsmanager.AddNamespace(&lt;span style=&quot;color: #006080&quot;&gt;&amp;quot;ep&amp;quot;&lt;/span&gt;, &lt;span style=&quot;color: #006080&quot;&gt;&amp;quot;urn:ietf:params:xml:ns:pidf:status:rpid-status&amp;quot;&lt;/span&gt;);&lt;br /&gt;                nsmanager.AddNamespace(&lt;span style=&quot;color: #006080&quot;&gt;&amp;quot;ci&amp;quot;&lt;/span&gt;, &lt;span style=&quot;color: #006080&quot;&gt;&amp;quot;urn:ietf:params:xml:ns:pidf:cipid&amp;quot;&lt;/span&gt;);&lt;br /&gt;                XmlNode node = &lt;span style=&quot;color: #0000ff&quot;&gt;null&lt;/span&gt;;&lt;br /&gt;                node = doc.SelectSingleNode(&lt;span style=&quot;color: #006080&quot;&gt;&amp;quot;//p:presence&amp;quot;&lt;/span&gt;, nsmanager);&lt;br /&gt;                sip = node.Attributes[&lt;span style=&quot;color: #006080&quot;&gt;&amp;quot;entity&amp;quot;&lt;/span&gt;].Value;&lt;br /&gt;                node = doc.SelectSingleNode(&lt;span style=&quot;color: #006080&quot;&gt;&amp;quot;//p:presence/p:tuple/p:status/p:basic&amp;quot;&lt;/span&gt;, nsmanager);&lt;br /&gt;                &lt;span style=&quot;color: #0000ff&quot;&gt;if&lt;/span&gt; (node.InnerText == &lt;span style=&quot;color: #006080&quot;&gt;&amp;quot;closed&amp;quot;&lt;/span&gt;)&lt;br /&gt;                {&lt;br /&gt;                    status = &lt;span style=&quot;color: #006080&quot;&gt;&amp;quot;offline&amp;quot;&lt;/span&gt;;&lt;br /&gt;                }&lt;br /&gt;                &lt;span style=&quot;color: #0000ff&quot;&gt;else&lt;/span&gt;{&lt;br /&gt;                    node = doc.SelectSingleNode(&lt;span style=&quot;color: #006080&quot;&gt;&amp;quot;//ep:activities/ep:activity&amp;quot;&lt;/span&gt;, nsmanager);&lt;br /&gt;                    status = node.InnerText;&lt;br /&gt;                }&lt;br /&gt;                   &lt;br /&gt;                &lt;br /&gt;            }&lt;span style=&quot;color: #0000ff&quot;&gt;catch&lt;/span&gt;{&lt;br /&gt;            }&lt;br /&gt;           &lt;span style=&quot;color: #008000&quot;&gt;//TODO &lt;/span&gt;&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        &lt;span style=&quot;color: #0000ff&quot;&gt;void&lt;/span&gt; ISipSubscriptionProcessor.SubscriptionStateChanged(SubscriptionStateChangedEventArgs eventArg)&lt;br /&gt;        {&lt;br /&gt;           &lt;span style=&quot;color: #008000&quot;&gt;//TODO&lt;/span&gt;&lt;br /&gt;        }&lt;br /&gt;      &lt;br /&gt;        &lt;span style=&quot;color: #cc6633&quot;&gt;#endregion&lt;/span&gt;&lt;br /&gt;    }&lt;/pre&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;Let&#39;s subscribe:&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;div&gt;&lt;br /&gt;  &lt;pre style=&quot;padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none&quot;&gt;&lt;span style=&quot;color: #0000ff&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;color: #0000ff&quot;&gt;void&lt;/span&gt; SubscribePresence(&lt;span style=&quot;color: #0000ff&quot;&gt;string&lt;/span&gt; sip)&lt;br /&gt;        {&lt;br /&gt;            PresenceSubscriptionPIDF presenceSubscription = &lt;span style=&quot;color: #0000ff&quot;&gt;new&lt;/span&gt; PresenceSubscriptionPIDF();&lt;br /&gt;            SipEndpoint myEndpoint = _endPoint;&lt;br /&gt;            RealTimeAddress cgAddress = &lt;span style=&quot;color: #0000ff&quot;&gt;new&lt;/span&gt; RealTimeAddress(sip);&lt;br /&gt;            SipSubscription mySubScription = &lt;span style=&quot;color: #0000ff&quot;&gt;new&lt;/span&gt; SipSubscription(myEndpoint, cgAddress, &lt;span style=&quot;color: #006080&quot;&gt;&amp;quot;presence&amp;quot;&lt;/span&gt;, presenceSubscription);&lt;br /&gt;            mySubScription.BeginSubscribe(BeginSubscribeCallback, mySubScription);&lt;br /&gt;        }&lt;br /&gt;&lt;span style=&quot;color: #0000ff&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;color: #0000ff&quot;&gt;void&lt;/span&gt; BeginSubscribeCallback(IAsyncResult asyncResult)&lt;br /&gt;         {&lt;br /&gt;&lt;br /&gt;             SipSubscription mySubscription = asyncResult.AsyncState &lt;span style=&quot;color: #0000ff&quot;&gt;as&lt;/span&gt; SipSubscription;&lt;br /&gt;             &lt;span style=&quot;color: #0000ff&quot;&gt;try&lt;/span&gt;&lt;br /&gt;             {&lt;br /&gt;                 mySubscription.EndSubscribe(asyncResult);&lt;br /&gt;  &lt;br /&gt;             }&lt;br /&gt;             &lt;span style=&quot;color: #0000ff&quot;&gt;catch&lt;/span&gt; (PublishSubscribeException)&lt;br /&gt;             {&lt;br /&gt;                 &lt;span style=&quot;color: #008000&quot;&gt;//Error(&amp;quot;An exception occurred when unregistering the session.\n{0}&amp;quot;, endpoint.ToString());&lt;/span&gt;&lt;br /&gt;             }&lt;br /&gt;&lt;br /&gt;             &lt;span style=&quot;color: #0000ff&quot;&gt;catch&lt;/span&gt; (RealTimeException)&lt;br /&gt;             {&lt;br /&gt;                 &lt;span style=&quot;color: #008000&quot;&gt;//Error(&amp;quot;An exception occurred when unregistering the session.\n{0}&amp;quot;, endpoint.ToString());&lt;/span&gt;&lt;br /&gt;             }&lt;br /&gt;         }&lt;/pre&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;For more information/questions/remarks please contact me sip:marc.wetters@e-office.com&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class=&quot;wlWriterSmartContent&quot; id=&quot;scid:0767317B-992E-4b12-91E0-4F059A8CECA8:a1b71da1-2d97-4613-ac9d-b6442f32a193&quot; style=&quot;padding-right: 0px; display: inline; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px&quot;&gt;Tags van Technorati: &lt;a href=&quot;http://technorati.com/tags/ISipSubscriptionProcessor&quot; rel=&quot;tag&quot;&gt;ISipSubscriptionProcessor&lt;/a&gt;,&lt;a href=&quot;http://technorati.com/tags/Presence&quot; rel=&quot;tag&quot;&gt;Presence&lt;/a&gt;,&lt;a href=&quot;http://technorati.com/tags/PIDF&quot; rel=&quot;tag&quot;&gt;PIDF&lt;/a&gt;,&lt;a href=&quot;http://technorati.com/tags/Marc%20Wetters&quot; rel=&quot;tag&quot;&gt;Marc Wetters&lt;/a&gt;,&lt;a href=&quot;http://technorati.com/tags/UCMA&quot; rel=&quot;tag&quot;&gt;UCMA&lt;/a&gt;,&lt;a href=&quot;http://technorati.com/tags/Subscriptions&quot; rel=&quot;tag&quot;&gt;Subscriptions&lt;/a&gt;&lt;/div&gt;  </description><link>http://unified-communications-development.blogspot.com/2008/06/subscriptions-in-ucma-part-4-presence.html</link><author>noreply@blogger.com (Marc Wetters)</author><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-2391544828936088267.post-5737270010737375376</guid><pubDate>Wed, 04 Jun 2008 08:05:00 +0000</pubDate><atom:updated>2008-06-04T10:05:28.796+02:00</atom:updated><title>Subscriptions in UCMA part 3: Presence</title><description>&lt;p&gt;This is the most interesting kind of subscription. There are actually 3 kinds of presence subscriptions with different kind of document formats:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;PIDF(Content-Type: application:pidf+xml) &lt;/li&gt;    &lt;li&gt;MSRTC(Content-Type: text/xml+mrstc.pidf) &lt;/li&gt;    &lt;li&gt;Enhanced presence(Content-Type: application/msrtc-event-categories+xml) &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;Each of these having more functionality/Information. PIDF(Presence Information Document Format) is the easiest to implement using UCMA. Where enhanced presence is actually the way to go. The other 2 are there for backwards compatibility. OCS server supports all 3. &lt;/p&gt;  &lt;p&gt;The next two parts will cover how to implement subscriptions using PIDF and Enhanced Presence.&lt;/p&gt;  &lt;p&gt;For more information please contact me: Sip:Marc.Wetters@e-office.com.&lt;/p&gt;  &lt;div class=&quot;wlWriterSmartContent&quot; id=&quot;scid:0767317B-992E-4b12-91E0-4F059A8CECA8:bd864848-d4e2-4246-aeb5-5a0bd244c368&quot; style=&quot;padding-right: 0px; display: inline; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px&quot;&gt;Tags van Technorati: &lt;a href=&quot;http://technorati.com/tags/Presence&quot; rel=&quot;tag&quot;&gt;Presence&lt;/a&gt;,&lt;a href=&quot;http://technorati.com/tags/OCS&quot; rel=&quot;tag&quot;&gt;OCS&lt;/a&gt;,&lt;a href=&quot;http://technorati.com/tags/UCMA&quot; rel=&quot;tag&quot;&gt;UCMA&lt;/a&gt;,&lt;a href=&quot;http://technorati.com/tags/PIDF&quot; rel=&quot;tag&quot;&gt;PIDF&lt;/a&gt;,&lt;a href=&quot;http://technorati.com/tags/MSRTC&quot; rel=&quot;tag&quot;&gt;MSRTC&lt;/a&gt;,&lt;a href=&quot;http://technorati.com/tags/Enhanced%20Presence&quot; rel=&quot;tag&quot;&gt;Enhanced Presence&lt;/a&gt;,&lt;a href=&quot;http://technorati.com/tags/Subscriptions&quot; rel=&quot;tag&quot;&gt;Subscriptions&lt;/a&gt;&lt;/div&gt;  </description><link>http://unified-communications-development.blogspot.com/2008/06/subscriptions-in-ucma-part-3-presence.html</link><author>noreply@blogger.com (Marc Wetters)</author><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-2391544828936088267.post-8490629993661058572</guid><pubDate>Fri, 30 May 2008 09:53:00 +0000</pubDate><atom:updated>2008-05-30T11:53:18.932+02:00</atom:updated><title>Subscriptions in UCMA part 2: Self</title><description>&lt;p&gt;In &lt;a href=&quot;http://unified-communications-development.blogspot.com/2008/05/subscriptions-in-ucma-part-1-roaming.html&quot;&gt;Part 1&lt;/a&gt; we have seen how we can subcribe to Roaming Contacts in this part we will take a look at Self subscription.&lt;/p&gt;  &lt;p&gt;You may ask why do we want to subscribe to our self? actually Self subscription returns some important information. Which categories do we have set up. Which containers do we have and the membership of those containers. And who is subscribed to me. The last one can be very handy. For instance we have created a bot, and we want to tell everybody who is using it that it will be down for maintenance or that new functionality has been added.&lt;/p&gt;  &lt;p&gt;This one is a little more difficult then the one we have seen in part 1. We actually have to send a message during the subscription.&lt;/p&gt;  &lt;p&gt;The class implementing the ISipSubscriptionProcessor interface:&lt;/p&gt;  &lt;div&gt;   &lt;pre style=&quot;padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none&quot;&gt;&lt;span style=&quot;color: #0000ff&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;color: #0000ff&quot;&gt;class&lt;/span&gt; RoamingSelfSubscription : ISipSubscriptionProcessor&lt;br /&gt;{&lt;br /&gt;    &lt;span style=&quot;color: #0000ff&quot;&gt;void&lt;/span&gt; ISipSubscriptionProcessor.GetExtensionHeaders(SipSubscription.RequestType requestType, &lt;span style=&quot;color: #0000ff&quot;&gt;out&lt;/span&gt; IEnumerable&amp;lt;SignalingHeader&amp;gt; extensionHeaders)&lt;br /&gt;    {&lt;br /&gt;        extensionHeaders = &lt;span style=&quot;color: #0000ff&quot;&gt;null&lt;/span&gt;;&lt;br /&gt;    }&lt;br /&gt;    &lt;span style=&quot;color: #0000ff&quot;&gt;void&lt;/span&gt; ISipSubscriptionProcessor.GetMessageBody(SipSubscription.RequestType requestType, &lt;span style=&quot;color: #0000ff&quot;&gt;out&lt;/span&gt; ContentType contentType, &lt;span style=&quot;color: #0000ff&quot;&gt;out&lt;/span&gt; &lt;span style=&quot;color: #0000ff&quot;&gt;byte&lt;/span&gt;[] messageBody)&lt;br /&gt;    {&lt;br /&gt;        contentType = &lt;span style=&quot;color: #0000ff&quot;&gt;null&lt;/span&gt;;&lt;br /&gt;        messageBody = &lt;span style=&quot;color: #0000ff&quot;&gt;new&lt;/span&gt; Byte[0];&lt;br /&gt;        &lt;span style=&quot;color: #0000ff&quot;&gt;if&lt;/span&gt; (requestType == SipSubscription.RequestType.Subscribe ||&lt;br /&gt;            requestType == SipSubscription.RequestType.Refresh)&lt;br /&gt;        {&lt;br /&gt;            contentType = &lt;span style=&quot;color: #0000ff&quot;&gt;new&lt;/span&gt; ContentType(&lt;span style=&quot;color: #006080&quot;&gt;&amp;quot;application/vnd-microsoft-roaming-self+xml&amp;quot;&lt;/span&gt;);&lt;br /&gt;            StringWriter sw = &lt;span style=&quot;color: #0000ff&quot;&gt;new&lt;/span&gt; StringWriter(&lt;span style=&quot;color: #0000ff&quot;&gt;new&lt;/span&gt; StringBuilder(128), CultureInfo.InvariantCulture);&lt;br /&gt;            XmlTextWriter writer = &lt;span style=&quot;color: #0000ff&quot;&gt;new&lt;/span&gt; XmlTextWriter(sw);&lt;br /&gt;            writer.WriteStartElement(&lt;span style=&quot;color: #006080&quot;&gt;&amp;quot;roamingList&amp;quot;&lt;/span&gt;);&lt;br /&gt;            writer.WriteAttributeString(&lt;span style=&quot;color: #006080&quot;&gt;&amp;quot;xmlns&amp;quot;&lt;/span&gt;, &lt;span style=&quot;color: #006080&quot;&gt;&amp;quot;http://schemas.microsoft.com/2006/09/sip/roaming-self&amp;quot;&lt;/span&gt;);&lt;br /&gt;            &lt;span style=&quot;color: #0000ff&quot;&gt;this&lt;/span&gt;.AddRoamingType(writer, &lt;span style=&quot;color: #006080&quot;&gt;&amp;quot;categories&amp;quot;&lt;/span&gt;);&lt;br /&gt;            &lt;span style=&quot;color: #0000ff&quot;&gt;this&lt;/span&gt;.AddRoamingType(writer, &lt;span style=&quot;color: #006080&quot;&gt;&amp;quot;containers&amp;quot;&lt;/span&gt;);&lt;br /&gt;            &lt;span style=&quot;color: #0000ff&quot;&gt;this&lt;/span&gt;.AddRoamingType(writer, &lt;span style=&quot;color: #006080&quot;&gt;&amp;quot;subscribers&amp;quot;&lt;/span&gt;);&lt;br /&gt;            writer.WriteEndElement();&lt;br /&gt;            sw.Close();&lt;br /&gt;            writer.Close();&lt;br /&gt;            messageBody = System.Text.Encoding.UTF8.GetBytes(sw.ToString());&lt;br /&gt;        }&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    &lt;span style=&quot;color: #0000ff&quot;&gt;void&lt;/span&gt; ISipSubscriptionProcessor.ProcessErrorResponse(SipResponseData message)&lt;br /&gt;    {&lt;br /&gt;        &lt;span style=&quot;color: #008000&quot;&gt;// TODO&lt;/span&gt;&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    &lt;span style=&quot;color: #0000ff&quot;&gt;void&lt;/span&gt; ISipSubscriptionProcessor.SubscriptionStateChanged(SubscriptionStateChangedEventArgs e)&lt;br /&gt;    {&lt;br /&gt;        &lt;span style=&quot;color: #008000&quot;&gt;//TODO&lt;/span&gt;&lt;br /&gt;    }&lt;br /&gt;    &lt;span style=&quot;color: #0000ff&quot;&gt;private&lt;/span&gt; &lt;span style=&quot;color: #0000ff&quot;&gt;void&lt;/span&gt; AddRoamingType(XmlTextWriter writer, &lt;span style=&quot;color: #0000ff&quot;&gt;string&lt;/span&gt; roamingType)&lt;br /&gt;    {&lt;br /&gt;        writer.WriteStartElement(&lt;span style=&quot;color: #006080&quot;&gt;&amp;quot;roaming&amp;quot;&lt;/span&gt;);&lt;br /&gt;        writer.WriteAttributeString(&lt;span style=&quot;color: #006080&quot;&gt;&amp;quot;type&amp;quot;&lt;/span&gt;, roamingType);&lt;br /&gt;        writer.WriteEndElement();&lt;br /&gt;    }&lt;br /&gt;    &lt;span style=&quot;color: #0000ff&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;color: #0000ff&quot;&gt;void&lt;/span&gt; ProcessNotification(SipMessageData message)&lt;br /&gt;    {&lt;br /&gt;        String s = message.GetMessageBodyString();&lt;br /&gt;        &lt;span style=&quot;color: #008000&quot;&gt;//TODO&lt;/span&gt;&lt;br /&gt;    }    &lt;br /&gt;}&lt;/pre&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;div&gt;Let&#39;s Subscribe, the even package name is &amp;quot;vnd-microsoft-roaming-self&amp;quot;.&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;div&gt;&lt;br /&gt;  &lt;pre style=&quot;padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none&quot;&gt;&lt;span style=&quot;color: #0000ff&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;color: #0000ff&quot;&gt;void&lt;/span&gt; SubscribeRoamingSelf()&lt;br /&gt;        {&lt;br /&gt;            RoamingSelfSubscription mycgSubscription = &lt;span style=&quot;color: #0000ff&quot;&gt;new&lt;/span&gt; RoamingSelfSubscription();&lt;br /&gt;            SipEndpoint myEndpoint = _endPoint;&lt;br /&gt;            RealTimeAddress cgAddress = &lt;span style=&quot;color: #0000ff&quot;&gt;new&lt;/span&gt; RealTimeAddress(_endPoint.Uri);&lt;br /&gt;            SipSubscription mySubScription = &lt;span style=&quot;color: #0000ff&quot;&gt;new&lt;/span&gt; SipSubscription(myEndpoint, cgAddress, &lt;span style=&quot;color: #006080&quot;&gt;&amp;quot;vnd-microsoft-roaming-self&amp;quot;&lt;/span&gt;, mycgSubscription);&lt;br /&gt;            mySubScription.BeginSubscribe(SubscribeRoamingSelfCallback, mySubScription);&lt;br /&gt;&lt;br /&gt;        }&lt;br /&gt;&lt;span style=&quot;color: #0000ff&quot;&gt;private&lt;/span&gt; &lt;span style=&quot;color: #0000ff&quot;&gt;void&lt;/span&gt; SubscribeRoamingSelfCallback(IAsyncResult asyncResult)&lt;br /&gt;        {&lt;br /&gt;            SipSubscription mySubscription = asyncResult.AsyncState &lt;span style=&quot;color: #0000ff&quot;&gt;as&lt;/span&gt; SipSubscription;&lt;br /&gt;            &lt;span style=&quot;color: #0000ff&quot;&gt;try&lt;/span&gt;&lt;br /&gt;            {&lt;br /&gt;                mySubscription.EndSubscribe(asyncResult);&lt;br /&gt;            }&lt;br /&gt;            &lt;span style=&quot;color: #0000ff&quot;&gt;catch&lt;/span&gt; (PublishSubscribeException)&lt;br /&gt;            {&lt;br /&gt;                &lt;span style=&quot;color: #008000&quot;&gt;//TODO&lt;/span&gt;&lt;br /&gt;            }&lt;br /&gt;&lt;br /&gt;            &lt;span style=&quot;color: #0000ff&quot;&gt;catch&lt;/span&gt; (RealTimeException)&lt;br /&gt;            {&lt;br /&gt;                &lt;span style=&quot;color: #008000&quot;&gt;//TODO&lt;/span&gt;&lt;br /&gt;            }&lt;br /&gt;        }&lt;/pre&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;div&gt;&amp;#160;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;For more information/questions/remarks please contact me sip:marc.wetters@e-office.com&lt;/p&gt;  </description><link>http://unified-communications-development.blogspot.com/2008/05/subscriptions-in-ucma-part-2-self.html</link><author>noreply@blogger.com (Marc Wetters)</author><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-2391544828936088267.post-5940477200333980674</guid><pubDate>Fri, 30 May 2008 08:54:00 +0000</pubDate><atom:updated>2008-05-30T10:54:39.807+02:00</atom:updated><title>Subscriptions in UCMA Part 1: Roaming Contacts</title><description>&lt;p&gt;Looking at the UCMA 1.0 SDK stated that it is possible to use subscriptions. The only thing that is missing is how to implement them? What do we need to send? What do we get back?&lt;/p&gt;  &lt;p&gt;For this information you have to dig deep into the protocols.   &lt;br /&gt;Recently Microsoft published preliminary versions of these protocols. You can find them here: &lt;a href=&quot;http://msdn.microsoft.com/en-us/library/cc307432.aspx&quot;&gt;Office Protocol Documents&lt;/a&gt;. It&#39;s almost 90 Mb in PDF documents :-(.&lt;/p&gt;  &lt;p&gt;For me the most important subscriptions are at the moment: &amp;quot;Roaming Contacts&amp;quot;, &amp;quot;Self&amp;quot;, and the most important one &amp;quot;presence&amp;quot;.&lt;/p&gt;  &lt;p&gt;This part I&#39;ll focus on Roaming Contacts. This subscription returns all the groups and contacts you are subscribed to.&lt;/p&gt;  &lt;p&gt;First we have to create a class that implements the ISipSubscriptionProcessor. Next to setting the message and the SignalingHeaders, the main thing for this class is handling the notifications.&lt;/p&gt;  &lt;div&gt;   &lt;pre style=&quot;padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none&quot;&gt;&lt;span style=&quot;color: #0000ff&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;color: #0000ff&quot;&gt;class&lt;/span&gt; RoamingContactsSubscription : ISipSubscriptionProcessor&lt;br /&gt;    {&lt;br /&gt;        &lt;span style=&quot;color: #0000ff&quot;&gt;void&lt;/span&gt; ISipSubscriptionProcessor.GetExtensionHeaders(SipSubscription.RequestType requestType, &lt;span style=&quot;color: #0000ff&quot;&gt;out&lt;/span&gt; IEnumerable&amp;lt;SignalingHeader&amp;gt; extensionHeaders)&lt;br /&gt;        {&lt;br /&gt;            extensionHeaders = &lt;span style=&quot;color: #0000ff&quot;&gt;null&lt;/span&gt;;&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        &lt;span style=&quot;color: #0000ff&quot;&gt;void&lt;/span&gt; ISipSubscriptionProcessor.GetMessageBody(SipSubscription.RequestType requestType, &lt;span style=&quot;color: #0000ff&quot;&gt;out&lt;/span&gt; ContentType contentType, &lt;span style=&quot;color: #0000ff&quot;&gt;out&lt;/span&gt; &lt;span style=&quot;color: #0000ff&quot;&gt;byte&lt;/span&gt;[] messageBody)&lt;br /&gt;        {&lt;br /&gt;            contentType = &lt;span style=&quot;color: #0000ff&quot;&gt;null&lt;/span&gt;;&lt;br /&gt;            messageBody = &lt;span style=&quot;color: #0000ff&quot;&gt;new&lt;/span&gt; Byte[0];    &lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        &lt;span style=&quot;color: #0000ff&quot;&gt;void&lt;/span&gt; ISipSubscriptionProcessor.ProcessErrorResponse(SipResponseData message)&lt;br /&gt;        {&lt;br /&gt;           &lt;span style=&quot;color: #008000&quot;&gt;//Not implemented&lt;/span&gt;&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        &lt;span style=&quot;color: #0000ff&quot;&gt;void&lt;/span&gt; ISipSubscriptionProcessor.SubscriptionStateChanged(SubscriptionStateChangedEventArgs e)&lt;br /&gt;        {&lt;br /&gt;            &lt;span style=&quot;color: #008000&quot;&gt;//Not implemented&lt;/span&gt;&lt;br /&gt;        }&lt;br /&gt;        &lt;span style=&quot;color: #0000ff&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;color: #0000ff&quot;&gt;void&lt;/span&gt; ProcessNotification(SipMessageData message)&lt;br /&gt;        {&lt;br /&gt;            String s = message.GetMessageBodyString();&lt;br /&gt;            ContentType contentType = message.ContentType;&lt;br /&gt;&lt;br /&gt;            &lt;span style=&quot;color: #008000&quot;&gt;// TODO; Do somthing with the notification message!!!&lt;/span&gt;&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;    }&lt;/pre&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;Next we have to subscribe. For this code I already registered an endpoint. The event package name is : &amp;quot;vnd-microsoft-roaming-contacts&amp;quot;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;div&gt;&lt;br /&gt;  &lt;pre style=&quot;padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none&quot;&gt;&lt;span style=&quot;color: #0000ff&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;color: #0000ff&quot;&gt;void&lt;/span&gt; SubscribeRoamingContacts()&lt;br /&gt;        {&lt;br /&gt;            RoamingContactsSubscription myRCSubscription = &lt;span style=&quot;color: #0000ff&quot;&gt;new&lt;/span&gt; RoamingContactsSubscription();&lt;br /&gt;            SipEndpoint myEndpoint = _endPoint;&lt;br /&gt;            RealTimeAddress RCAddress = &lt;span style=&quot;color: #0000ff&quot;&gt;new&lt;/span&gt; RealTimeAddress(_endPoint.Uri);&lt;br /&gt;            SipSubscription mySubScription = &lt;span style=&quot;color: #0000ff&quot;&gt;new&lt;/span&gt; SipSubscription(myEndpoint, RCAddress, &lt;span style=&quot;color: #006080&quot;&gt;&amp;quot;vnd-microsoft-roaming-contacts&amp;quot;&lt;/span&gt;, myRCSubscription);&lt;br /&gt;            mySubScription.BeginSubscribe(SubscribeRoamingContactsCallback, mySubScription);&lt;br /&gt;        }&lt;/pre&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&amp;#160;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;div&gt;&lt;br /&gt;  &lt;pre style=&quot;padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none&quot;&gt;&lt;span style=&quot;color: #0000ff&quot;&gt;private&lt;/span&gt; &lt;span style=&quot;color: #0000ff&quot;&gt;void&lt;/span&gt; SubscribeRoamingSelfCallback(IAsyncResult asyncResult)&lt;br /&gt;       {&lt;br /&gt;           SipSubscription mySubscription = asyncResult.AsyncState &lt;span style=&quot;color: #0000ff&quot;&gt;as&lt;/span&gt; SipSubscription;&lt;br /&gt;           &lt;span style=&quot;color: #0000ff&quot;&gt;try&lt;/span&gt;&lt;br /&gt;           {&lt;br /&gt;               mySubscription.EndSubscribe(asyncResult);&lt;br /&gt;           }&lt;br /&gt;           &lt;span style=&quot;color: #0000ff&quot;&gt;catch&lt;/span&gt; (PublishSubscribeException)&lt;br /&gt;           {&lt;br /&gt;               &lt;span style=&quot;color: #008000&quot;&gt;//TODO&lt;/span&gt;&lt;br /&gt;           }&lt;br /&gt;&lt;br /&gt;           &lt;span style=&quot;color: #0000ff&quot;&gt;catch&lt;/span&gt; (RealTimeException)&lt;br /&gt;           {&lt;br /&gt;               &lt;span style=&quot;color: #008000&quot;&gt;//TODO&lt;/span&gt;&lt;br /&gt;           }&lt;br /&gt;       }&lt;/pre&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;That is actually all. Here is a sample of the Notification message:&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;div&gt;&lt;br /&gt;  &lt;pre style=&quot;padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none&quot;&gt;&lt;span style=&quot;color: #0000ff&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #800000&quot;&gt;contactList&lt;/span&gt; &lt;span style=&quot;color: #ff0000&quot;&gt;deltaNum&lt;/span&gt;&lt;span style=&quot;color: #0000ff&quot;&gt;=&amp;quot;4&amp;quot;&lt;/span&gt;&lt;span style=&quot;color: #0000ff&quot;&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;  &lt;span style=&quot;color: #0000ff&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #800000&quot;&gt;group&lt;/span&gt; &lt;span style=&quot;color: #ff0000&quot;&gt;id&lt;/span&gt;&lt;span style=&quot;color: #0000ff&quot;&gt;=&amp;quot;1&amp;quot;&lt;/span&gt; &lt;span style=&quot;color: #ff0000&quot;&gt;name&lt;/span&gt;&lt;span style=&quot;color: #0000ff&quot;&gt;=&amp;quot;~&amp;quot;&lt;/span&gt; &lt;span style=&quot;color: #ff0000&quot;&gt;externalURI&lt;/span&gt;&lt;span style=&quot;color: #0000ff&quot;&gt;=&amp;quot;&amp;quot;&lt;/span&gt; &lt;span style=&quot;color: #0000ff&quot;&gt;/&amp;gt;&lt;/span&gt; &lt;br /&gt;  &lt;span style=&quot;color: #0000ff&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #800000&quot;&gt;contact&lt;/span&gt; &lt;span style=&quot;color: #ff0000&quot;&gt;uri&lt;/span&gt;&lt;span style=&quot;color: #0000ff&quot;&gt;=&amp;quot;Joachim.Farla@e-office.com&amp;quot;&lt;/span&gt; &lt;span style=&quot;color: #ff0000&quot;&gt;name&lt;/span&gt;&lt;span style=&quot;color: #0000ff&quot;&gt;=&amp;quot;&amp;quot;&lt;/span&gt; &lt;span style=&quot;color: #ff0000&quot;&gt;groups&lt;/span&gt;&lt;span style=&quot;color: #0000ff&quot;&gt;=&amp;quot;1&amp;quot;&lt;/span&gt; &lt;span style=&quot;color: #ff0000&quot;&gt;subscribed&lt;/span&gt;&lt;span style=&quot;color: #0000ff&quot;&gt;=&amp;quot;true&amp;quot;&lt;/span&gt; &lt;span style=&quot;color: #ff0000&quot;&gt;externalURI&lt;/span&gt;&lt;span style=&quot;color: #0000ff&quot;&gt;=&amp;quot;&amp;quot;&lt;/span&gt; &lt;span style=&quot;color: #0000ff&quot;&gt;/&amp;gt;&lt;/span&gt; &lt;br /&gt;  &lt;span style=&quot;color: #0000ff&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #800000&quot;&gt;contact&lt;/span&gt; &lt;span style=&quot;color: #ff0000&quot;&gt;uri&lt;/span&gt;&lt;span style=&quot;color: #0000ff&quot;&gt;=&amp;quot;Marc.Wetters@e-office.com&amp;quot;&lt;/span&gt; &lt;span style=&quot;color: #ff0000&quot;&gt;name&lt;/span&gt;&lt;span style=&quot;color: #0000ff&quot;&gt;=&amp;quot;&amp;quot;&lt;/span&gt; &lt;span style=&quot;color: #ff0000&quot;&gt;groups&lt;/span&gt;&lt;span style=&quot;color: #0000ff&quot;&gt;=&amp;quot;1&amp;quot;&lt;/span&gt; &lt;span style=&quot;color: #ff0000&quot;&gt;subscribed&lt;/span&gt;&lt;span style=&quot;color: #0000ff&quot;&gt;=&amp;quot;true&amp;quot;&lt;/span&gt; &lt;span style=&quot;color: #ff0000&quot;&gt;externalURI&lt;/span&gt;&lt;span style=&quot;color: #0000ff&quot;&gt;=&amp;quot;&amp;quot;&lt;/span&gt; &lt;span style=&quot;color: #0000ff&quot;&gt;/&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #0000ff&quot;&gt;&amp;lt;/&lt;/span&gt;&lt;span style=&quot;color: #800000&quot;&gt;contactList&lt;/span&gt;&lt;span style=&quot;color: #0000ff&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&amp;#160;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;Next Part will be self subscribe.&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;For more information/questions/remarks please contact me sip:marc.wetters@e-office.com&lt;/p&gt;  </description><link>http://unified-communications-development.blogspot.com/2008/05/subscriptions-in-ucma-part-1-roaming.html</link><author>noreply@blogger.com (Marc Wetters)</author><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-2391544828936088267.post-756256591130633042</guid><pubDate>Thu, 29 May 2008 11:49:00 +0000</pubDate><atom:updated>2008-05-29T13:49:55.378+02:00</atom:updated><title>Getting and setting presence using UCMA</title><description>&lt;p&gt;After publishing the first 2 articles about &lt;a href=&quot;http://unified-communications-development.blogspot.com/2008/05/getting-presence-using-ucma.html&quot;&gt;getting&lt;/a&gt; and &lt;a href=&quot;http://unified-communications-development.blogspot.com/2008/05/setting-presence-using-ucma.html&quot;&gt;setting&lt;/a&gt; presence using UCMA, Paolo Tuninetto came up with a scenario in which it didn&#39;t quite behaved the way I expected it to be.&lt;/p&gt;  &lt;p&gt;If you did set the presence of your application it did show up online in the OC Clients. If you were getting the presence of some one using the OC client it got the correct presence back. That was the scenario I used and tested.&lt;/p&gt;  &lt;p&gt;But if you set the presence using one application and getting it with an other the way I described it. It didn&#39;t work.&amp;#160; Still in the OC client the correct presence was set.&lt;/p&gt;  &lt;p&gt;So what was going on? Actually the problem was in both the setting and getting the presence. Getting the presence the way I described uses the old (legacy) way of getting presence. And we set the presence using the new (enhanced presence) way.&lt;/p&gt;  &lt;p&gt;The solution was either getting the enhanced presence or&amp;#160; setting the legacy presence. Actually it&#39;s better to do both. The way I was getting the presence only supports the old way. The best way for getting presence is actually subscribing to presence, which I will address in an other article.&lt;/p&gt;  &lt;p&gt;So we had to set the legacy presence also. &lt;/p&gt;  &lt;p&gt;This is almost the same as publishing the enhanced presence, except that the category is different.&lt;/p&gt;  &lt;div&gt;   &lt;pre style=&quot;padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none&quot;&gt;&lt;span style=&quot;color: #0000ff&quot;&gt;string&lt;/span&gt; PresenceBlobLegacy = &lt;span style=&quot;color: #006080&quot;&gt;&amp;quot;&amp;lt;publish xmlns=\&amp;quot;http://schemas.microsoft.com/2006/09/sip/rich-presence\&amp;quot;&amp;gt;&amp;lt;publications uri=\&amp;quot;{0}\&amp;quot;&amp;gt;&amp;lt;publication categoryName=\&amp;quot;legacyInterop\&amp;quot; instance=\&amp;quot;0\&amp;quot; container=\&amp;quot;{1}\&amp;quot; version=\&amp;quot;{2}\&amp;quot; expireType=\&amp;quot;user\&amp;quot;&amp;gt;&amp;lt;legacyInterop availability=\&amp;quot;3500\&amp;quot; /&amp;gt;&amp;lt;/publication&amp;gt;&amp;lt;/publications&amp;gt;&amp;lt;/publish&amp;gt;&amp;quot;&lt;/span&gt;;&lt;br /&gt;       &lt;/pre&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;For more information contact &lt;a href=&quot;sip:marc.wetters@e-office.com&quot;&gt;sip:marc.wetters@e-office.com&lt;/a&gt;&lt;/p&gt;  </description><link>http://unified-communications-development.blogspot.com/2008/05/getting-and-setting-presence-using-ucma.html</link><author>noreply@blogger.com (Marc Wetters)</author><thr:total>1</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-2391544828936088267.post-1236591127055556957</guid><pubDate>Thu, 29 May 2008 11:22:00 +0000</pubDate><atom:updated>2008-05-29T13:22:56.309+02:00</atom:updated><title>What&amp;#39;s coming up...</title><description>&lt;p&gt;I&#39;ve been really busy with a lot of questions and issues regarding to UC development. Here is a short overview of what I&#39;ve been working on and what you can expect from me the next few weeks.&lt;/p&gt;  &lt;h3&gt;CWA and Silverlight 2 beta 1.&lt;/h3&gt;  &lt;p&gt;I&#39;m still working on this one here is a screenshot of the current application:&lt;/p&gt;  &lt;p&gt;&lt;a href=&quot;http://lh5.ggpht.com/MarcWetters/SD6SDNB6ofI/AAAAAAAAABU/qvsmOPW17rA/s1600-h/SnipImage%5B7%5D.jpg&quot;&gt;&lt;img style=&quot;border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px&quot; height=&quot;373&quot; alt=&quot;SnipImage&quot; src=&quot;http://lh4.ggpht.com/MarcWetters/SD6SD9B6ogI/AAAAAAAAABg/V7xG3zyG0WQ/SnipImage_thumb%5B5%5D.jpg?imgmax=800&quot; width=&quot;476&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Next part of this series will show you how to handle presence events. &lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h3&gt;UCMA&lt;/h3&gt;  &lt;p&gt;After publishing the articles about how to get and how to set presence, I got a series of questions and issues. To solve these I had to take a deep dive into the presence and SIP protocols. Microsoft recently published preliminary versions of these protocols.&lt;/p&gt;  &lt;p&gt;Here is a list of the things I worked on:&lt;/p&gt;  &lt;ol&gt;   &lt;li&gt;Getting and Setting presence(update article coming soon)&lt;/li&gt;    &lt;li&gt;Subscriptions&lt;/li&gt;    &lt;ol&gt;     &lt;li&gt;self(Categories, Containers, Subscribers)&lt;/li&gt;      &lt;li&gt;roaming contacts (groups and contacts)&lt;/li&gt;      &lt;li&gt;presence (in fact there are 3 ways how you can implement presence subscriptions).&lt;/li&gt;   &lt;/ol&gt;    &lt;li&gt;ContainerMembership&lt;/li&gt; &lt;/ol&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;For more information contact &lt;a href=&quot;sip:marc.wetters@e-office.com&quot;&gt;sip:marc.wetters@e-office.com&lt;/a&gt;&lt;/p&gt;  </description><link>http://unified-communications-development.blogspot.com/2008/05/what-coming-up.html</link><author>noreply@blogger.com (Marc Wetters)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://lh4.ggpht.com/MarcWetters/SD6SD9B6ogI/AAAAAAAAABg/V7xG3zyG0WQ/s72-c/SnipImage_thumb%5B5%5D.jpg?imgmax=800" height="72" width="72"/><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-2391544828936088267.post-6266122963610569177</guid><pubDate>Fri, 23 May 2008 11:57:00 +0000</pubDate><atom:updated>2008-05-23T13:57:47.561+02:00</atom:updated><title>Using UCMA to create a custom routing bot!</title><description>&lt;p&gt;Using UCMA to create a custom routing bot!    &lt;br /&gt;&lt;/p&gt;  &lt;p&gt;Scenario (case):    &lt;br /&gt;&lt;em&gt;A service/help desk wanted to expand their services using OCS as an extra communication channel. The big question in this case is how can we use a single point of entry for the employees who want to connect to the service desk? How can we show that the service desk is online? How do we make sure that an available service desk employee gets the question/incoming messages? How can we maintain the pool of service desk employees?      &lt;br /&gt;&lt;/em&gt;&lt;/p&gt;  &lt;p&gt;Solution:    &lt;br /&gt;Create a custom application using UCMA . This application registers itself as &lt;strong&gt;THE&lt;/strong&gt; service desk. If one of the employees of the service desk is online/available the service desk is online/available.&amp;#160; If none of the employees is online the application shows itself as offline. If somebody sends a message to the service desk the message will be routed to the next available service desk employee. We wanted this to use for text messages but also for incoming video and audio calls.     &lt;br /&gt;&lt;/p&gt;  &lt;p&gt;Example application:    &lt;br /&gt;For demo purposes we created a Windows application.     &lt;br /&gt;In this case, if at least one of the 3 users is online/available the application is online. The colors show the availability of the different users.&lt;a href=&quot;http://lh3.google.com/joachimfarla/R_IEmMXghoI/AAAAAAAAA6k/1-mULIiQ9gY/image%5B4%5D.png&quot;&gt;&lt;img style=&quot;border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px&quot; height=&quot;206&quot; alt=&quot;image&quot; src=&quot;http://lh6.google.com/joachimfarla/R_IEm8XghpI/AAAAAAAAA6s/S0b3I16ESE4/image_thumb%5B2%5D.png&quot; width=&quot;430&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;     &lt;br /&gt;If we send a message to the application (in this case TUser4), we are routed to the next available user.     &lt;br /&gt;The logic to which person to route is build in the application. &lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;a href=&quot;http://lh5.google.com/joachimfarla/R_IEnsXghqI/AAAAAAAAA60/WDNJzNq9LO0/image%5B8%5D.png&quot;&gt;&lt;img style=&quot;border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px&quot; height=&quot;240&quot; alt=&quot;image&quot; src=&quot;http://lh3.google.com/joachimfarla/R_IEoMXghrI/AAAAAAAAA68/24zyKbRxEQk/image_thumb%5B4%5D.png&quot; width=&quot;202&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;The biggest technical problems we encountered:&lt;/p&gt;  &lt;p&gt;1.&amp;#160;&amp;#160;&amp;#160; How can set the presence of the application.    &lt;br /&gt;2.&amp;#160;&amp;#160;&amp;#160; How can we get the status of the different users in the &amp;#8220;pool&amp;#8221;.     &lt;br /&gt;3.&amp;#160;&amp;#160;&amp;#160; Even better how can subscribe to the presence of the users in the &amp;#8220;pool&amp;#8221;.     &lt;br /&gt;4.&amp;#160;&amp;#160;&amp;#160; How can we refer the incoming session to a different user.     &lt;br /&gt;&lt;/p&gt;  &lt;p&gt;The solution for these problems: &lt;/p&gt;  &lt;p&gt;1.&amp;#160;&amp;#160;&amp;#160; You can set the presence using the UCMA api by creating a presence container(this is done by a &lt;em&gt;SipServiceRequest&lt;/em&gt;) , after the presence container is created you can publish the presence ( also a &lt;em&gt;SipServiceRequest&lt;/em&gt;) .&lt;a href=&quot;http://unified-communications-development.blogspot.com/2008/05/setting-presence-using-ucma.html&quot;&gt;Setting Pressence using UCMA&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;2.&amp;#160;&amp;#160;&amp;#160; If you want to get the status of a user in the &amp;#8220;pool&amp;#8221; you can send a &lt;em&gt;SipServiceRequest&lt;/em&gt; to the user from which you want to know the presence. See also &lt;a href=&quot;http://unified-communications-development.blogspot.com/2008/05/getting-presence-using-ucma.html&quot;&gt;Getting presence using UCMA&lt;/a&gt;     &lt;br /&gt;&lt;/p&gt;  &lt;p&gt;3.&amp;#160;&amp;#160;&amp;#160; Subscribing to presence was really a difficult one. In this case we used a &lt;em&gt;SipSubscription&lt;/em&gt; and a class implementing the &lt;em&gt;ISipSubscriptionProcessor&lt;/em&gt; interface.&lt;/p&gt;  &lt;p&gt;4.&amp;#160;&amp;#160;&amp;#160; At the moment you cannot refer a &lt;em&gt;SignalingSession&lt;/em&gt; to a different user(OC client doesn&amp;#8217;t support it). So there are two scenario&amp;#8217;s. Use the application to set up a session from the application and proxy Instant messages back and forth through the application. This only works for instant message and not for audio and video calls. So the other solution is that to use &lt;em&gt;TerminateWithRedirection&lt;/em&gt; on the incoming&amp;#160; &lt;em&gt;SignalingSession&lt;/em&gt; this also works with audio and video calls.     &lt;br /&gt;&lt;/p&gt;  &lt;p&gt;At this moment I cannot get deeper into the exact details of the &lt;em&gt;SipServiceRequest&lt;/em&gt; , &lt;em&gt;SipSubscription&lt;/em&gt; , &lt;em&gt;ISipSubscriptionProcessor&lt;/em&gt; we used in this application. &lt;/p&gt;  &lt;p&gt;Microsoft says that it is not possible using the UCMA to get the presence or subscribe to presence. &lt;strong&gt;But actually it is, if you know the exact protocols to use!!!! &lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;For more information contact sip:marc.wetters@e-office.com&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;div class=&quot;wlWriterSmartContent&quot; id=&quot;scid:0767317B-992E-4b12-91E0-4F059A8CECA8:5ef11636-b00b-458f-b25c-94cd508c085d&quot; style=&quot;padding-right: 0px; display: inline; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px&quot;&gt;Tags van Technorati: &lt;a href=&quot;http://technorati.com/tags/SipServiceRequest&quot; rel=&quot;tag&quot;&gt;SipServiceRequest&lt;/a&gt;,&lt;a href=&quot;http://technorati.com/tags/SipSubscription&quot; rel=&quot;tag&quot;&gt;SipSubscription&lt;/a&gt;,&lt;a href=&quot;http://technorati.com/tags/class&quot; rel=&quot;tag&quot;&gt;class&lt;/a&gt;,&lt;a href=&quot;http://technorati.com/tags/ISipSubscriptionProcessor%20interface%20SignalingSessionks&quot; rel=&quot;tag&quot;&gt;ISipSubscriptionProcessor interface SignalingSessionks&lt;/a&gt;,&lt;a href=&quot;http://technorati.com/tags/TerminateWithRedirection%20on%20the%20incoming&quot; rel=&quot;tag&quot;&gt;TerminateWithRedirection on the incoming&lt;/a&gt;,&lt;a href=&quot;http://technorati.com/tags/UCMA&quot; rel=&quot;tag&quot;&gt;UCMA&lt;/a&gt;,&lt;a href=&quot;http://technorati.com/tags/Marc%20Wetters&quot; rel=&quot;tag&quot;&gt;Marc Wetters&lt;/a&gt;&lt;/div&gt;  &lt;p&gt;&lt;/p&gt;  &lt;div class=&quot;blogger-post-footer&quot;&gt;Unified Communications&lt;/div&gt;  </description><link>http://unified-communications-development.blogspot.com/2008/05/using-ucma-to-create-custom-routing-bot.html</link><author>noreply@blogger.com (Marc Wetters)</author><thr:total>1</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-2391544828936088267.post-7556706020438347307</guid><pubDate>Fri, 23 May 2008 11:55:00 +0000</pubDate><atom:updated>2008-05-23T13:55:46.802+02:00</atom:updated><title>Setting Presence using the UCMA</title><description>&lt;p&gt;Using the UCMA there are actually 2 ways in setting the presence.&lt;/p&gt;  &lt;p&gt;The first one found in the Microsoft samples is as an automaton. This means that you tell the OCS server that your presence won&#39;t change. This is usefull for creating bots. They are normally always online.&lt;/p&gt;  &lt;p&gt;But what is your application isn&#39;t always online. What if you only want your bot to be online during business hours.&lt;/p&gt;  &lt;p&gt;So I will focus on setting the presence not as an automaton.&lt;/p&gt;  &lt;p&gt;First you have to register your end-point.&lt;/p&gt;  &lt;p&gt;Let&#39;s define some constants. The real change here is &amp;quot;expireType&amp;quot;. which is set to user and not endpoint!&lt;/p&gt;  &lt;h3&gt;Constansts&lt;/h3&gt;  &lt;p&gt;public const string CategoryPublicationContentType = &amp;quot;application/msrtc-category-publish+xml&amp;quot;;    &lt;br /&gt;public const string ContainerMemberContentType = &amp;quot;application/msrtc-setcontainermembers+xml&amp;quot;;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;public const string PresenceBlobUser = &amp;quot;&amp;lt;publish xmlns=\&amp;quot;&lt;a href=&quot;http://schemas.microsoft.com/2006/09/sip/rich-presence\&quot; ?=&quot;?&quot;&gt;http://schemas.microsoft.com/2006/09/sip/rich-presence\&amp;quot;&lt;/a&gt;&amp;gt;&amp;lt;publications uri=\&amp;quot;{0}\&amp;quot;&amp;gt;&amp;lt;publication categoryName=\&amp;quot;state\&amp;quot; instance=\&amp;quot;0\&amp;quot; container=\&amp;quot;{1}\&amp;quot; version=\&amp;quot;{2}\&amp;quot; expireType=\&amp;quot;user\&amp;quot;&amp;gt;&amp;lt;state xmlns=\&amp;quot;&lt;a href=&quot;http://schemas.microsoft.com/2006/09/sip/state\&quot; ?=&quot;?&quot;&gt;http://schemas.microsoft.com/2006/09/sip/state\&amp;quot;&lt;/a&gt; xmlns:xsi=\&amp;quot;&lt;a href=&quot;http://www.w3.org/2001/XMLSchema-instance\&quot; ?=&quot;?&quot;&gt;http://www.w3.org/2001/XMLSchema-instance\&amp;quot;&lt;/a&gt; xsi:type=\&amp;quot;aggregateState\&amp;quot;&amp;gt;&amp;lt;availability&amp;gt;{3}&amp;lt;/availability&amp;gt;&amp;lt;/state&amp;gt;&amp;lt;/publication&amp;gt;&amp;lt;/publications&amp;gt;&amp;lt;/publish&amp;gt;&amp;quot;;&lt;/p&gt;  &lt;p&gt;public const string ContainerMembership = &amp;quot;&amp;lt;setContainerMembers xmlns=\&amp;quot;&lt;a href=&quot;http://schemas.microsoft.com/2006/09/sip/container-management\&quot; ?=&quot;?&quot;&gt;http://schemas.microsoft.com/2006/09/sip/container-management\&amp;quot;&lt;/a&gt;&amp;gt;&amp;lt;container id=\&amp;quot;{0}\&amp;quot; version=\&amp;quot;{1}\&amp;quot;&amp;gt;&amp;lt;member action=\&amp;quot;add\&amp;quot; type=\&amp;quot;sameEnterprise\&amp;quot; /&amp;gt;&amp;lt;/container&amp;gt;&amp;lt;/setContainerMembers&amp;gt;&amp;quot;;&lt;/p&gt;  &lt;p&gt;public const int PresenceContainer = 7000;&lt;/p&gt;  &lt;p&gt;public enum PresenceState    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; {     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Online = 3500,     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; DoNotDisturb = 9500,     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Offline = 18500     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; }&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h3&gt;Next is setting up the presence container.&lt;/h3&gt;  &lt;p&gt;public void SetupPresenceContainer()    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; {     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; SipEndpoint endpoint = _endPoint; &lt;/p&gt;  &lt;p&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; if (endpoint != null)    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; {     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; ContentType contentType = new ContentType(Constants.ContainerMemberContentType); &lt;/p&gt;  &lt;p&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; string ContainerACL = String.Format(Constants.ContainerMembership, Constants.PresenceContainer, _presenceContainerVersion); &lt;/p&gt;  &lt;p&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; byte[] body = Encoding.UTF8.GetBytes(ContainerACL);    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; SipServiceRequest request = new SipServiceRequest(endpoint, contentType, body); &lt;/p&gt;  &lt;p&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; request.BeginService(SetupContainerCallback, request);    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }&lt;/p&gt;  &lt;p&gt;private void SetupContainerCallback(IAsyncResult ar)    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; {     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; SipServiceRequest request = ar.AsyncState as SipServiceRequest;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; try     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; {     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; request.EndService(ar);     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; catch (FailureResponseException e)     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; {     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; string s = e.ResponseData.GetMessageBodyString();     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; s.IndexOf(&amp;quot;curVersion&amp;quot;);     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; string s2 = s.Substring(s.IndexOf(&amp;quot;curVersion&amp;quot;) + 12, 10);     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; string[] array = { &amp;quot;\&amp;quot;&amp;quot; };     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; string[] s3 = s2.Split(array, 2, StringSplitOptions.None);     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; _presenceContainerVersion = int.Parse(s3[0]);     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; SetupPresenceContainer();     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; catch (RealTimeException )     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; {     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h3&gt;Now it&#39;s time to set our Presence&lt;/h3&gt;  &lt;p&gt;public void PublishPresenceState(PresenceState availability)    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; {     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; if (_endPoint != null)     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; {     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; int availabilityValue = (int)availability;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; ContentType contentType = new ContentType(Constants.CategoryPublicationContentType);     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; string presenceBlob = String.Format(Constants.PresenceBlobUser, ConnectionSettings.Uri, Constants.PresenceContainer, _presenceVersion, availabilityValue);     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; byte[] body = Encoding.UTF8.GetBytes(presenceBlob);     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; SipServiceRequest request = new SipServiceRequest(_endPoint, contentType, body);     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; request.BeginService(PublishPresenceStateCallback, request);     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;private void PublishPresenceStateCallback(IAsyncResult ar)    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; {     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; SipServiceRequest request = ar.AsyncState as SipServiceRequest; &lt;/p&gt;  &lt;p&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; try    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; {     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; request.EndService(ar);     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; catch (PublishSubscribeException e)     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; {     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; // This exception is most likely due to a version conflict. Parsing the Response body     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; // to retrieve the current version, and publish again.     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; string s = e.ResponseData.GetMessageBodyString();     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; s.IndexOf(&amp;quot;curVersion&amp;quot;);     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; string s2 = s.Substring(s.IndexOf(&amp;quot;curVersion&amp;quot;) + 12, 10);     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; string[] array = { &amp;quot;\&amp;quot;&amp;quot; };     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; string[] s3 = s2.Split(array, 2, StringSplitOptions.None);     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; _presenceVersion = int.Parse(s3[0]);     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; PublishPresenceState(_presence);     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; } &lt;/p&gt;  &lt;p&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; catch (RealTimeException)    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; {     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt; For more information contact sip:marc.wetters@e-office.com&lt;/p&gt;  &lt;div class=&quot;wlWriterSmartContent&quot; id=&quot;scid:0767317B-992E-4b12-91E0-4F059A8CECA8:acd552a6-20be-4fef-a285-f42772db110a&quot; style=&quot;padding-right: 0px; display: inline; padding-left: 0px; float: none; padding-bottom: 0px; margin: 0px; padding-top: 0px&quot;&gt;Tags van Technorati: &lt;a href=&quot;http://technorati.com/tags/Marc%20Wetters&quot; rel=&quot;tag&quot;&gt;Marc Wetters&lt;/a&gt;,&lt;a href=&quot;http://technorati.com/tags/SipServiceRequest&quot; rel=&quot;tag&quot;&gt;SipServiceRequest&lt;/a&gt;,&lt;a href=&quot;http://technorati.com/tags/Presence&quot; rel=&quot;tag&quot;&gt;Presence&lt;/a&gt;,&lt;a href=&quot;http://technorati.com/tags/UCMA&quot; rel=&quot;tag&quot;&gt;UCMA&lt;/a&gt;,&lt;a href=&quot;http://technorati.com/tags/OCS&quot; rel=&quot;tag&quot;&gt;OCS&lt;/a&gt;,&lt;a href=&quot;http://technorati.com/tags/setContainerMembers&quot; rel=&quot;tag&quot;&gt;setContainerMembers&lt;/a&gt;&lt;/div&gt;  </description><link>http://unified-communications-development.blogspot.com/2008/05/setting-presence-using-ucma.html</link><author>noreply@blogger.com (Marc Wetters)</author><thr:total>3</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-2391544828936088267.post-1120302377429993573</guid><pubDate>Mon, 19 May 2008 15:49:00 +0000</pubDate><atom:updated>2008-05-19T17:49:06.108+02:00</atom:updated><title>Unified Communications (UC) Platform Developer Metro Training</title><description>&lt;p&gt;Last week I followed this 2 day training in the Netherlands. It really gives developers a good overview where to start. If you want to start developing on the UC platform, I really recommend that you follow that training. I have been working with some of the SDKs and APIs a little longer and still learned quite a bit.    &lt;br /&gt;&lt;/p&gt;  &lt;p&gt;Main topics are:    &lt;br /&gt;&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Unified Communications: Behind the Scenes with OCS 2007, OC 2007 and Exchange 2007 &lt;/li&gt;    &lt;li&gt;Driving Contextual Collaboration with OC 2007 &lt;/li&gt;    &lt;li&gt;Building Contextual Collaboration Clients for the Web using the UC AJAX SDK &lt;/li&gt;    &lt;li&gt;Building Asynchronous Contextual Collaboration with Exchange Web Services &lt;/li&gt;    &lt;li&gt;Business Process Communication with the UCMA &lt;/li&gt;    &lt;li&gt;Anywhere Information Access with OCS 2007 Speech Server &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;Any questions/ comments please feel free to contact me.    &lt;br /&gt;Sip:Marc.Wetters@e-office.com or email:Marc.Wetters@e-office.com&lt;/p&gt;  </description><link>http://unified-communications-development.blogspot.com/2008/05/unified-communications-uc-platform.html</link><author>noreply@blogger.com (Joachim Farla)</author><thr:total>0</thr:total></item></channel></rss>