<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" version="2.0"><channel><title>&amp;lt;ChristophDotNet </title><link>http://weblogs.asp.net/cschittko/default.aspx</link><description>desc="My angle on brackets" /&gt;</description><dc:language>en</dc:language><generator>CommunityServer 2007 SP1 (Build: 20510.895)</generator><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/CTheArchitect" /><feedburner:info xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" uri="cthearchitect" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><item><title>Cloud is the Next iPhone (for IT)</title><link>http://weblogs.asp.net/cschittko/archive/2012/05/07/cloud-is-the-new-iphone-for-it.aspx</link><pubDate>Mon, 07 May 2012 14:27:00 GMT</pubDate><guid isPermaLink="false">c06e2b9d-981a-45b4-a55f-ab0d8bbfdc1c:8448610</guid><dc:creator>ChristophDotNet</dc:creator><slash:comments>0</slash:comments><wfw:commentRss>http://weblogs.asp.net/cschittko/rsscomments.aspx?PostID=8448610</wfw:commentRss><wfw:comment>http://weblogs.asp.net/cschittko/commentapi.aspx?PostID=8448610</wfw:comment><comments>http://weblogs.asp.net/cschittko/archive/2012/05/07/cloud-is-the-new-iphone-for-it.aspx#comments</comments><description>&lt;table border="0" cellSpacing="0" cellPadding="2" width="479"&gt;&lt;tbody&gt;     &lt;tr&gt;       &lt;td vAlign="top" width="102"&gt;&lt;img src="http://upload.wikimedia.org/wikipedia/commons/thumb/d/d0/Original_iPhone_docked.jpg/250px-Original_iPhone_docked.jpg" width="87" height="132" mce_src="http://upload.wikimedia.org/wikipedia/commons/thumb/d/d0/Original_iPhone_docked.jpg/250px-Original_iPhone_docked.jpg"&gt;&lt;/td&gt;        &lt;td vAlign="top" width="375"&gt;It was the year 2006. The year Google acquired YouTube for a mere $1.65B, Pavarotti opened the Winter Olympics and Germany hosted the World Cup. After successfully branching out into music players, Apple is hinting at releasing a phone. The excitement is building, but the smartphone market is dominated by Blackberry. Microsoft's Windows Mobile has been in the market for a few years and is steadily growing in popularity because it's a more accessible developer platform.          &lt;p&gt;Then on January 9th, 2007 the world changed. Not just the technology world, but the world as we knew it. Yes, Steve Jobs only showed a product, the first iPhone, but what he really showed the world what it's like to be connected and have access to the internet at all times.&lt;/p&gt;       &lt;/td&gt;     &lt;/tr&gt;   &lt;/tbody&gt;&lt;/table&gt;  &lt;table border="0" cellSpacing="0" cellPadding="2" width="479"&gt;&lt;tbody&gt;     &lt;tr&gt;       &lt;td vAlign="top" width="603"&gt;The iPhone wasn't the first of its kind. Far from it actually. Microsoft had been toying with the idea of Smartphones for almost 10 years at the time. Mobile powerhouses like Blackberry and Nokia had products in the market as well, but the iPhone had two new things going for it.          &lt;br&gt;          &lt;br&gt;1) it was beautiful and desirable and           &lt;br&gt;2) it made things that mattered easy. It was no longer about piling on features. It was about making the important things easy and hiding the complexity of common tasks.           &lt;br&gt;          &lt;br&gt;Those two factors made the iPhone an overnight success. The philosophy of beauty and simplicity was the perfect recipe to form a strong emotional connection between users and their devices.&lt;/td&gt;        &lt;td vAlign="top" width="10"&gt;&lt;iframe style="width: 91px; height: 128px;" height="319" src="https://skydrive.live.com/embed?cid=F0AB78D27EC7F9D9&amp;amp;resid=F0AB78D27EC7F9D9%21908&amp;amp;authkey=AIOgmJCFGAvd4KU" frameBorder="0" width="230" scrolling="no" mce_src="https://skydrive.live.com/embed?cid=F0AB78D27EC7F9D9&amp;amp;resid=F0AB78D27EC7F9D9%21908&amp;amp;authkey=AIOgmJCFGAvd4KU"&gt;&lt;/iframe&gt;&lt;/td&gt;     &lt;/tr&gt;   &lt;/tbody&gt;&lt;/table&gt;  &lt;p&gt;It wasn't the apps. Those came later. A year and a half later, when Apple opened the AppStore. At that point there was no holding back, the success of the iPhone seemed unstoppable. It no longer was about being cool. You simply didn't participate without one.&lt;/p&gt;  &lt;p&gt;So what about the cloud? &lt;/p&gt;  &lt;p&gt;The cloud is about the same thing. Making things that matter easy. For consumers, the cloud makes keeping things in sync easy. Keeping your appointments, your contacts and files in sync is frustrating problem that was worth solving. &lt;/p&gt;  &lt;p&gt;For the IT Crowd it's about making it easy to run apps. No longer do you have to spend time and effort on things you or, more importantly, your users(!), don't care about. The users care about how good you are at racking, stacking and cabling. They don't even want to know how much you know about maintaining and patching an OS image. You may argue that they think you're "wasting too much time" on such "unimportant" things. They care about one thing. They want their apps, fast, consistently and everywhere.&lt;/p&gt;  &lt;p&gt;The cloud makes those things easy, because they’re done in different ways that makes users not wait for things to show up. Gratification is instant. Apps show up. New features show while they're still new and exciting. They can show off their new toys before others have them … like people showed off their new iPhones. That's what forms the emotional bond, but there were good business reasons behind it.&lt;/p&gt;  &lt;p&gt;Let's look at some other aspects&lt;/p&gt;  &lt;table border="1" cellSpacing="0" cellPadding="2" width="492"&gt;&lt;tbody&gt;     &lt;tr&gt;       &lt;td vAlign="top" width="235"&gt;&lt;strong&gt;iPhone&lt;/strong&gt;&lt;/td&gt;        &lt;td vAlign="top" width="255"&gt;&lt;strong&gt;Cloud&lt;/strong&gt;&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td vAlign="top" width="235"&gt;iPhone hides complexity to accomplish the important tasks users care about&lt;/td&gt;        &lt;td vAlign="top" width="255"&gt;Cloud hides complexity to accomplish the important tasks users care about&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td vAlign="top" width="235"&gt;iPhone required upfront investment , but the investment paid off quickly in productivity gains&lt;/td&gt;        &lt;td vAlign="top" width="255"&gt;Transition to the cloud is not seamless, but adopters confirm cost savings and transformational capabilities.&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td vAlign="top" width="235"&gt;iPhone shortened timelines because access to information became ubiquitous. Information was accessible before, but the iPhone reached critical mass to drive rapid availability of mobile enabled sites.&lt;/td&gt;        &lt;td vAlign="top" width="255"&gt;Cloud shortens timelines because context becomes ubiquitous, capabilities become available instantaneously and innovation cycles become shorter because IT bottlenecks are eliminated.&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td vAlign="top" width="235"&gt;IT hated the iPhone in the enterprise because it meant change. The iPhone was neither the most secure nor the most enterprise friendly smartphone, but users had it their way. Companies who adopted early gained an edge. &lt;/td&gt;        &lt;td vAlign="top" width="255"&gt;IT hates the (public) cloud in the enterprise because it means change, ...&lt;/td&gt;     &lt;/tr&gt;   &lt;/tbody&gt;&lt;/table&gt;  &lt;p&gt;That's why I say, the cloud is the next iPhone: Trojanic, Tectonic and Transformational. In other words, it'll creep in no matter how much you think you'll keep it out, it's going to change things and it's here to stay. &lt;/p&gt;  &lt;p&gt;The ones that harness the transformational capabilities are going to have the edge because they shed baggage and thus move faster. With tectonic, transformational shifts, it’s important to have a strategy. Thoughts on strategies on harnessing the power of the cloud come in the next posts.&lt;/p&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=8448610" width="1" height="1"&gt;</description><category domain="http://weblogs.asp.net/cschittko/archive/tags/cloud/default.aspx">cloud</category></item><item><title>Silverlight 3 / Expression Lab Posted</title><link>http://weblogs.asp.net/cschittko/archive/2009/12/09/silverlight-3-expression-lab-posted.aspx</link><pubDate>Wed, 09 Dec 2009 17:09:52 GMT</pubDate><guid isPermaLink="false">c06e2b9d-981a-45b4-a55f-ab0d8bbfdc1c:7274719</guid><dc:creator>ChristophDotNet</dc:creator><slash:comments>6</slash:comments><wfw:commentRss>http://weblogs.asp.net/cschittko/rsscomments.aspx?PostID=7274719</wfw:commentRss><wfw:comment>http://weblogs.asp.net/cschittko/commentapi.aspx?PostID=7274719</wfw:comment><comments>http://weblogs.asp.net/cschittko/archive/2009/12/09/silverlight-3-expression-lab-posted.aspx#comments</comments><description>&lt;p&gt;&lt;a href="http://ux.artu.tv/?p=136"&gt;Arturo&lt;/a&gt; was kind enough to post a &lt;a href="http://www.microsoft.com/downloads/details.aspx?displaylang=en&amp;amp;FamilyID=3308511a-fe8b-43b9-840f-02abc4bf6419"&gt;hands-on lab&lt;/a&gt; I created for a training event in Dallas. &lt;/p&gt;  &lt;p&gt;It’s an introduction to &lt;a href="http://www.silverlight.net"&gt;Silverlight&lt;/a&gt;, that showcases some Silverlight 3 features, such as:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;a href="http://www.silverlightshow.net/items/Perspective-3D-in-Silverlight-3.aspx"&gt;Perspective 3D&lt;/a&gt;&lt;/li&gt;    &lt;li&gt;&lt;a href="http://weblogs.asp.net/dwahlin/archive/2009/07/13/using-element-to-element-binding-for-tooltips-in-silverlight-3.aspx"&gt;Element-to-Element Binding&lt;/a&gt;&lt;/li&gt;    &lt;li&gt;&lt;a href="http://www.wintellect.com/CS/blogs/jprosise/archive/2009/04/05/silverlight-3-s-new-out-of-browser-applications.aspx"&gt;Out-Of-Browser Applications&lt;/a&gt;&lt;/li&gt;    &lt;li&gt;&lt;a href="http://www.silverlightshow.net/items/Using-the-SaveFileDialog-in-Silverlight-3.aspx"&gt;SaveFileDialog&lt;/a&gt;&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;but it’s also written as an introduction to Silverlight with basics such as:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Working in &lt;a href="http://www.microsoft.com/expression/products/Blend_Overview.aspx"&gt;Blend&lt;/a&gt; and Visual&amp;#160; Studio&lt;/li&gt;    &lt;li&gt;&lt;a href="http://jeffblankenburg.com/2009/07/day-10-styling-silverlight-controls.aspx"&gt;Control Styling&lt;/a&gt;&lt;/li&gt;    &lt;li&gt;Animations&lt;/li&gt;    &lt;li&gt;&lt;a href="http://timheuer.com/blog/archive/2008/06/04/silverlight-introduces-visual-state-manager-vsm.aspx"&gt;Transitions with the Visual State Manager&lt;/a&gt;&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;while you build a rotating &lt;a href="http://zune.net"&gt;Zune&lt;/a&gt;. &lt;/p&gt;  &lt;p&gt;&lt;a href="http://weblogs.asp.net/blogs/cschittko/image_1B76D417.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: block; float: none; margin-left: auto; border-top: 0px; margin-right: auto; border-right: 0px" title="image" border="0" alt="image" src="http://weblogs.asp.net/blogs/cschittko/image_thumb_214151E3.png" width="244" height="224" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;The lab comes with a Lab Manual for you to work through and Visual Studio projects to keep thing simple and help you out if you get stuck.&lt;/p&gt;  &lt;p&gt;Enjoy.&lt;/p&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=7274719" width="1" height="1"&gt;</description><category domain="http://weblogs.asp.net/cschittko/archive/tags/Silverlight/default.aspx">Silverlight</category><category domain="http://weblogs.asp.net/cschittko/archive/tags/Visual+Studio/default.aspx">Visual Studio</category><category domain="http://weblogs.asp.net/cschittko/archive/tags/Expression/default.aspx">Expression</category></item><item><title>Silverlight 3 – How to access peripherals</title><link>http://weblogs.asp.net/cschittko/archive/2009/12/08/silverlight-3-how-to-access-peripherals.aspx</link><pubDate>Tue, 08 Dec 2009 17:27:00 GMT</pubDate><guid isPermaLink="false">c06e2b9d-981a-45b4-a55f-ab0d8bbfdc1c:7273891</guid><dc:creator>ChristophDotNet</dc:creator><slash:comments>13</slash:comments><wfw:commentRss>http://weblogs.asp.net/cschittko/rsscomments.aspx?PostID=7273891</wfw:commentRss><wfw:comment>http://weblogs.asp.net/cschittko/commentapi.aspx?PostID=7273891</wfw:comment><comments>http://weblogs.asp.net/cschittko/archive/2009/12/08/silverlight-3-how-to-access-peripherals.aspx#comments</comments><description>&lt;P&gt;The previous post on &lt;A title=http://weblogs.asp.net/cschittko/archive/2009/11/17/silverlight-3-for-kiosk-apps-of-course.aspx href="http://weblogs.asp.net/cschittko/archive/2009/11/17/silverlight-3-for-kiosk-apps-of-course.aspx" mce_href="http://weblogs.asp.net/cschittko/archive/2009/11/17/silverlight-3-for-kiosk-apps-of-course.aspx"&gt;Silverlight 3 for kiosk apps&lt;/A&gt; outlined some architecture options how you can build &lt;A href="http://www.silverlight.net/" mce_href="http://www.silverlight.net"&gt;Silverlight&lt;/A&gt; applications with access to peripherals. This follow up post goes into more detail on the implementation. &lt;/P&gt;
&lt;P&gt;I strongly encourage you to consider &lt;A href="http://windowsclient.net/" mce_href="http://windowsclient.net/"&gt;WPF&lt;/A&gt;, &lt;A href="http://msdn.microsoft.com/en-us/library/t71a733d(VS.80).aspx" mce_href="http://msdn.microsoft.com/en-us/library/t71a733d(VS.80).aspx"&gt;ClickOnce&lt;/A&gt; and &lt;A href="http://msdn.microsoft.com/en-us/library/ms828083(WinEmbedded.10).aspx" mce_href="http://msdn.microsoft.com/en-us/library/ms828083(WinEmbedded.10).aspx"&gt;POS for .NET&lt;/A&gt; as the foundation of your application before you go ahead building these types of applications. The major benefits of Silverlight are the small run-time and the cross-platform availability. Chances are that cross-platform is not necessary in a kiosk environment. The small runtime may not be a big advantage if you are deploying a local application, if you’re deploying, you may as well deploy the full .NET runtime. In fact, the lean runtime may be a disadvantage since it’s lacking functionality available in the .NET libraries. ClickOnce may provide similar benefits as a web deployment of Silverlight. &lt;/P&gt;
&lt;P&gt;Now … if you’re still reading, you probably determined that Silverlight is the way to go. &lt;/P&gt;
&lt;P&gt;The solution is based on several key features in Silverlight&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;Hosting Silverlight in a custom container via the hosting API – introduced with Silverlight 1 &lt;/LI&gt;
&lt;LI&gt;Scripting Silverlight applications – introduced with Silverlight 1 &lt;/LI&gt;
&lt;LI&gt;Local messaging between Silverlight applications – even across different containers, first introduced with Silverlight 3 &lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;Let’s take a look how we can string these together to build a solution that maintains the integrity and protection of the Silverlight sandbox, but also let us get to local computing resources and maintains the benefits of Silverlight development and deployment.&lt;/P&gt;
&lt;P&gt;First, you can host Silverlight applications not only in a web browser, but also in a custom application container via the &lt;A href="http://msdn.microsoft.com/en-us/library/cc296246(VS.95).aspx" mce_href="http://msdn.microsoft.com/en-us/library/cc296246(VS.95).aspx"&gt;Hosting COM API&lt;/A&gt;. You’re in for a blast from the past since some experience with C++ and COM is definitely required to get this to work. There’s a sample for &lt;A href="http://code.msdn.microsoft.com/silverlightalthost" mce_href="http://code.msdn.microsoft.com/silverlightalthost"&gt;Silverlight Alternative Hosting&lt;/A&gt; on MSDN. You save yourself a lot of time and effort compared to implementing the various COM interfaces if you just download the sample and start from there.&lt;/P&gt;
&lt;H2&gt;Custom Silverlight Hosting&lt;/H2&gt;
&lt;P&gt;First, you decide how you’re going to load the Silverlight application in the custom container. You could load a .xap from the local disk, or you could local the .xap application over the web. Loading from a URL over the web preserves some of the deployment flexibilities of a browser app, but if you’re running an application without a network connection, loading the application from a http URL may not be an option.&lt;/P&gt;
&lt;P&gt;Loading a XAP from from a URL, either a &lt;A href="file:///" mce_href="file:///"&gt;file:///&lt;/A&gt; URL or an http:// URL will work. To load the Silverlight application, you pass the URL to the application as a named Source property in the PropertyBag during control activation (I didn’t think I would ever have to write about ActiveX control activation again). The TutorialXcpHost application from the MSDN sample makes this very easy. It includes a XcpControlHost helper class with the SetSource method. You call SetSource before activating the control:&lt;/P&gt;&lt;PRE&gt;&lt;PRE style="BACKGROUND-COLOR: #fbfbfb; MARGIN: 0em; WIDTH: 100%; FONT-FAMILY: consolas,'Courier New',courier,monospace; FONT-SIZE: 13px"&gt;&lt;SPAN style="COLOR: #0000ff"&gt;int&lt;/SPAN&gt; WINAPI _tWinMain(HINSTANCE, HINSTANCE, LPTSTR lpCmdLine, &lt;SPAN style="COLOR: #0000ff"&gt;int&lt;/SPAN&gt; nShowCmd) 
&lt;/PRE&gt;&lt;PRE style="BACKGROUND-COLOR: #ffffff; MARGIN: 0em; WIDTH: 100%; FONT-FAMILY: consolas,'Courier New',courier,monospace; FONT-SIZE: 13px"&gt;{  
&lt;/PRE&gt;&lt;PRE style="BACKGROUND-COLOR: #fbfbfb; MARGIN: 0em; WIDTH: 100%; FONT-FAMILY: consolas,'Courier New',courier,monospace; FONT-SIZE: 13px"&gt;   CXcpControlHost::SetSource(L"&lt;SPAN style="COLOR: #8b0000"&gt;http://localhost/AppsComms/ClientBin/SenderApp.xap&lt;/SPAN&gt;");
&lt;/PRE&gt;&lt;PRE style="BACKGROUND-COLOR: #ffffff; MARGIN: 0em; WIDTH: 100%; FONT-FAMILY: consolas,'Courier New',courier,monospace; FONT-SIZE: 13px"&gt;   &lt;SPAN style="COLOR: #0000ff"&gt;return&lt;/SPAN&gt; _AtlModule.WinMain(nShowCmd);
&lt;/PRE&gt;&lt;PRE style="BACKGROUND-COLOR: #fbfbfb; MARGIN: 0em; WIDTH: 100%; FONT-FAMILY: consolas,'Courier New',courier,monospace; FONT-SIZE: 13px"&gt;}&lt;/PRE&gt;&lt;/PRE&gt;
&lt;P&gt;Even when running in a custom host, Silverlight is still validating zones and enforces some cross-domain security. If you’re loading additional application data or resources, then base URL and zone (&lt;A href="file:///" mce_href="file:///"&gt;file:///&lt;/A&gt; or http://) need to match. You can play some trickery by implementing the container’s &lt;A href="http://msdn.microsoft.com/en-us/library/cc296246(VS.95).aspx#IXcpControlHost_GetBaseUrl" mce_href="http://msdn.microsoft.com/en-us/library/cc296246(VS.95).aspx#IXcpControlHost_GetBaseUrl"&gt;IXcpControlHost::GetBaseUrl()&lt;/A&gt; method to return a matching zone, but it’s safer to play by the rules and comply with Silverlight’s security policies. after all, they’ve been put in place for good reasons.&lt;/P&gt;
&lt;P&gt;So far, we can load a Silverlight application into a custom container, that provides more flexibility than a browser. For example, the custom container can communicate with other local resources or devices. Next we need to enable communication between the container and the Silverlight application.&lt;/P&gt;
&lt;H2&gt;Defining an interface from Silverlight to the Custom Container&lt;/H2&gt;
&lt;P&gt;A Silverlight application can expose an interface to scripting engines to allow integration with the host. For example the javascript engine in a browser can get and set properties of a Silverlight application and invoke methods exposed to script. The Silverlight piece of the code is very simple. &lt;/P&gt;
&lt;OL&gt;
&lt;LI&gt;You define a class that represents your scripting interface and mark the class with the &lt;A href="http://msdn.microsoft.com/en-us/library/system.windows.browser.scriptabletypeattribute(VS.95).aspx" mce_href="http://msdn.microsoft.com/en-us/library/system.windows.browser.scriptabletypeattribute(VS.95).aspx"&gt;[ScriptableType]&lt;/A&gt; attribute. &lt;BR&gt;&lt;PRE&gt;&lt;PRE style="BACKGROUND-COLOR: #fbfbfb; MARGIN: 0em; WIDTH: 100%; FONT-FAMILY: consolas,'Courier New',courier,monospace; FONT-SIZE: 13px"&gt;&lt;STRONG&gt;[ScriptableType]&lt;/STRONG&gt;
&lt;/PRE&gt;&lt;PRE style="BACKGROUND-COLOR: #ffffff; MARGIN: 0em; WIDTH: 100%; FONT-FAMILY: consolas,'Courier New',courier,monospace; FONT-SIZE: 13px"&gt;&lt;SPAN style="COLOR: #0000ff"&gt;public&lt;/SPAN&gt; &lt;SPAN style="COLOR: #0000ff"&gt;class&lt;/SPAN&gt; MyScriptableObject
&lt;/PRE&gt;&lt;PRE style="BACKGROUND-COLOR: #fbfbfb; MARGIN: 0em; WIDTH: 100%; FONT-FAMILY: consolas,'Courier New',courier,monospace; FONT-SIZE: 13px"&gt;{
&lt;/PRE&gt;&lt;PRE style="BACKGROUND-COLOR: #ffffff; MARGIN: 0em; WIDTH: 100%; FONT-FAMILY: consolas,'Courier New',courier,monospace; FONT-SIZE: 13px"&gt;&lt;SPAN style="COLOR: #008000"&gt;// ... &lt;/SPAN&gt;
&lt;/PRE&gt;&lt;PRE style="BACKGROUND-COLOR: #fbfbfb; MARGIN: 0em; WIDTH: 100%; FONT-FAMILY: consolas,'Courier New',courier,monospace; FONT-SIZE: 13px"&gt;}&lt;/PRE&gt;&lt;/PRE&gt;&lt;/LI&gt;
&lt;LI&gt;In that class, you mark methods you want to expose to the scripting engine with the &lt;A href="http://msdn.microsoft.com/en-us/library/system.windows.browser.scriptablememberattribute(VS.95).aspx" mce_href="http://msdn.microsoft.com/en-us/library/system.windows.browser.scriptablememberattribute(VS.95).aspx"&gt;[ScriptableMember]&lt;/A&gt; attribute. &lt;BR&gt;&lt;PRE&gt;&lt;PRE style="BACKGROUND-COLOR: #fbfbfb; MARGIN: 0em; WIDTH: 100%; FONT-FAMILY: consolas,'Courier New',courier,monospace; FONT-SIZE: 13px"&gt;&lt;STRONG&gt;[ScriptableMember]&lt;/STRONG&gt;
&lt;/PRE&gt;&lt;PRE style="BACKGROUND-COLOR: #ffffff; MARGIN: 0em; WIDTH: 100%; FONT-FAMILY: consolas,'Courier New',courier,monospace; FONT-SIZE: 13px"&gt;&lt;SPAN style="COLOR: #0000ff"&gt;public&lt;/SPAN&gt; &lt;SPAN style="COLOR: #0000ff"&gt;void&lt;/SPAN&gt; ShowMessage()
&lt;/PRE&gt;&lt;PRE style="BACKGROUND-COLOR: #fbfbfb; MARGIN: 0em; WIDTH: 100%; FONT-FAMILY: consolas,'Courier New',courier,monospace; FONT-SIZE: 13px"&gt;{
&lt;/PRE&gt;&lt;PRE style="BACKGROUND-COLOR: #ffffff; MARGIN: 0em; WIDTH: 100%; FONT-FAMILY: consolas,'Courier New',courier,monospace; FONT-SIZE: 13px"&gt;&lt;SPAN style="COLOR: #008000"&gt;// ...&lt;/SPAN&gt;
&lt;/PRE&gt;&lt;PRE style="BACKGROUND-COLOR: #fbfbfb; MARGIN: 0em; WIDTH: 100%; FONT-FAMILY: consolas,'Courier New',courier,monospace; FONT-SIZE: 13px"&gt;}
&lt;/PRE&gt;&lt;PRE style="BACKGROUND-COLOR: #ffffff; MARGIN: 0em; WIDTH: 100%; FONT-FAMILY: consolas,'Courier New',courier,monospace; FONT-SIZE: 13px"&gt;&lt;/PRE&gt;&lt;/PRE&gt;
&lt;P&gt;Note: Properties and Methods must be public, or discovering the Method with GetIDsofNames will return E_FAIL. &lt;BR&gt;&lt;/P&gt;&lt;/LI&gt;&lt;/OL&gt;
&lt;OL&gt;
&lt;LI&gt;You register an instance of the ScriptableType with the Silverlight runtime after the application starts up by calling &lt;A href="http://msdn.microsoft.com/en-us/library/system.windows.browser.htmlpage.registerscriptableobject(VS.95).aspx" mce_href="http://msdn.microsoft.com/en-us/library/system.windows.browser.htmlpage.registerscriptableobject(VS.95).aspx"&gt;RegisterScriptableObject&lt;/A&gt;. It’s very important to note that you have to call RegisterScriptableObject after runtime and application are intialized, not during the MainPage’s constructor or in InitializeComponent(). Scripting will not work correctly if you register the object too early. &lt;BR&gt;&lt;PRE&gt;&lt;PRE style="BACKGROUND-COLOR: #fbfbfb; MARGIN: 0em; WIDTH: 100%; FONT-FAMILY: consolas,'Courier New',courier,monospace; FONT-SIZE: 13px"&gt;&lt;SPAN style="COLOR: #0000ff"&gt;private&lt;/SPAN&gt; &lt;SPAN style="COLOR: #0000ff"&gt;void&lt;/SPAN&gt; Application_Startup(&lt;SPAN style="COLOR: #0000ff"&gt;object&lt;/SPAN&gt; sender, StartupEventArgs e)
&lt;/PRE&gt;&lt;PRE style="BACKGROUND-COLOR: #ffffff; MARGIN: 0em; WIDTH: 100%; FONT-FAMILY: consolas,'Courier New',courier,monospace; FONT-SIZE: 13px"&gt;{
&lt;/PRE&gt;&lt;PRE style="BACKGROUND-COLOR: #fbfbfb; MARGIN: 0em; WIDTH: 100%; FONT-FAMILY: consolas,'Courier New',courier,monospace; FONT-SIZE: 13px"&gt;    &lt;SPAN style="COLOR: #0000ff"&gt;this&lt;/SPAN&gt;.RootVisual = &lt;SPAN style="COLOR: #0000ff"&gt;new&lt;/SPAN&gt; MainPage();
&lt;/PRE&gt;&lt;PRE style="BACKGROUND-COLOR: #ffffff; MARGIN: 0em; WIDTH: 100%; FONT-FAMILY: consolas,'Courier New',courier,monospace; FONT-SIZE: 13px"&gt;    HtmlPage.&lt;STRONG&gt;RegisterScriptableObject&lt;/STRONG&gt;("&lt;SPAN style="COLOR: #8b0000"&gt;MyReceiver&lt;/SPAN&gt;", &lt;SPAN style="COLOR: #0000ff"&gt;new&lt;/SPAN&gt; MyScriptableObject(&lt;SPAN style="COLOR: #0000ff"&gt;this&lt;/SPAN&gt;.RootVisual &lt;SPAN style="COLOR: #0000ff"&gt;as&lt;/SPAN&gt; UserControl));
&lt;/PRE&gt;&lt;PRE style="BACKGROUND-COLOR: #fbfbfb; MARGIN: 0em; WIDTH: 100%; FONT-FAMILY: consolas,'Courier New',courier,monospace; FONT-SIZE: 13px"&gt;}&lt;/PRE&gt;&lt;/PRE&gt;&lt;/LI&gt;&lt;/OL&gt;
&lt;P&gt;Now the Silverlight application exposes an interface for the container to call. Since this application is running in a custom container, the container can call into the application in response to an event from a card reader for example.&lt;/P&gt;
&lt;H2&gt;Calling the Silverlight interface&lt;/H2&gt;
&lt;P&gt;The &lt;A href="http://msdn.microsoft.com/en-us/library/cc645076(VS.95).aspx" mce_href="http://msdn.microsoft.com/en-us/library/cc645076(VS.95).aspx"&gt;HTML bridge&lt;/A&gt; is part of Silverlight to integrate with browser’s java script engines. That doesn’t mean you can’t make use of it from other containers though. We’re calling the scriptable objects from the C++ container. It’s a little bit cumbersome in our scenario since you have to deal with late bound objects through COM interfaces, but the sample code may help you out a little bit.&lt;/P&gt;
&lt;P&gt;Let’s look at the important pieces. The host for the Silverlight application must allow for access to objects that the&amp;nbsp; Silverlight application registered with the scripting bridge. &lt;A href="http://msdn.microsoft.com/en-us/library/cc296246(VS.95).aspx#IXcpControlHost_GetHostOptions" mce_href="http://msdn.microsoft.com/en-us/library/cc296246(VS.95).aspx#IXcpControlHost_GetHostOptions"&gt;IXcpControlHost::GetHostOptions()&lt;/A&gt; gets called during activation of the control by the hosted Silverlight runtime to find out which features the host allows. The options returned to Silverlight control must include &lt;A href="http://msdn.microsoft.com/en-us/library/cc296246(VS.95).aspx#IXcpHostOptions" mce_href="http://msdn.microsoft.com/en-us/library/cc296246(VS.95).aspx#IXcpHostOptions"&gt;XcpHostOption_EnableScriptableObjectAccess&lt;/A&gt;;&lt;/P&gt;&lt;PRE&gt;&lt;PRE style="BACKGROUND-COLOR: #fbfbfb; MARGIN: 0em; WIDTH: 100%; FONT-FAMILY: consolas,'Courier New',courier,monospace; FONT-SIZE: 13px"&gt;STDMETHODIMP CXcpControlHost::GetHostOptions(DWORD* pdwOptions)
&lt;/PRE&gt;&lt;PRE style="BACKGROUND-COLOR: #ffffff; MARGIN: 0em; WIDTH: 100%; FONT-FAMILY: consolas,'Courier New',courier,monospace; FONT-SIZE: 13px"&gt;{
&lt;/PRE&gt;&lt;PRE style="BACKGROUND-COLOR: #fbfbfb; MARGIN: 0em; WIDTH: 100%; FONT-FAMILY: consolas,'Courier New',courier,monospace; FONT-SIZE: 13px"&gt;  *pdwOptions = XcpHostOption_EnableCrossDomainDownloads | &lt;STRONG&gt;XcpHostOption_EnableScriptableObjectAccess&lt;/STRONG&gt;;
&lt;/PRE&gt;&lt;PRE style="BACKGROUND-COLOR: #ffffff; MARGIN: 0em; WIDTH: 100%; FONT-FAMILY: consolas,'Courier New',courier,monospace; FONT-SIZE: 13px"&gt;  &lt;SPAN style="COLOR: #0000ff"&gt;return&lt;/SPAN&gt; S_OK;
&lt;/PRE&gt;&lt;PRE style="BACKGROUND-COLOR: #fbfbfb; MARGIN: 0em; WIDTH: 100%; FONT-FAMILY: consolas,'Courier New',courier,monospace; FONT-SIZE: 13px"&gt;}&lt;/PRE&gt;&lt;/PRE&gt;
&lt;P&gt;Without the option set, attempts&amp;nbsp; by the container to obtain a reference (the DISPID as we’ll see shortly) will fail. RegisterScriptableObject, however, succeeds.&lt;/P&gt;
&lt;P&gt;Getting to the registered object requires some understanding of COM. If you never had to deal with &lt;A href="http://msdn.microsoft.com/en-us/library/ms680509(VS.85).aspx" mce_href="http://msdn.microsoft.com/en-us/library/ms680509(VS.85).aspx"&gt;IUnknown&lt;/A&gt; and &lt;A href="http://msdn.microsoft.com/en-us/library/ms221608.aspx" mce_href="http://msdn.microsoft.com/en-us/library/ms221608.aspx"&gt;IDispatch&lt;/A&gt;, you may want to take a quick look at the &lt;A href="http://msdn.microsoft.com/en-us/library/ms694363(VS.85).aspx" mce_href="http://msdn.microsoft.com/en-us/library/ms694363(VS.85).aspx"&gt;COM reference&lt;/A&gt;.&lt;/P&gt;
&lt;P&gt;The scriptable objects are a accessible from the Silverlight control’s Content Interface. Like all other late bound objects, properties and method on the Content object is available via IDispatch, which turns the inconspicuous lines of javascript:&lt;/P&gt;&lt;PRE&gt;&lt;PRE style="BACKGROUND-COLOR: #fbfbfb; MARGIN: 0em; WIDTH: 100%; FONT-FAMILY: consolas,'Courier New',courier,monospace; FONT-SIZE: 13px"&gt;slCtl  = sender.get_element();
&lt;/PRE&gt;&lt;PRE style="BACKGROUND-COLOR: #ffffff; MARGIN: 0em; WIDTH: 100%; FONT-FAMILY: consolas,'Courier New',courier,monospace; FONT-SIZE: 13px"&gt;slCtl.Content.MyReceiver.ShowMessage();
&lt;/PRE&gt;&lt;/PRE&gt;
&lt;P&gt;into the slightly more verbose C++ equivalent:&lt;/P&gt;&lt;PRE&gt;&lt;PRE style="BACKGROUND-COLOR: #fbfbfb; MARGIN: 0em; WIDTH: 100%; FONT-FAMILY: consolas,'Courier New',courier,monospace; FONT-SIZE: 13px"&gt;  _axWindow.QueryControl(IID_IXcpControl, (&lt;SPAN style="COLOR: #0000ff"&gt;void&lt;/SPAN&gt;**)&amp;amp;pxcpControl);
&lt;/PRE&gt;&lt;PRE style="BACKGROUND-COLOR: #ffffff; MARGIN: 0em; WIDTH: 100%; FONT-FAMILY: consolas,'Courier New',courier,monospace; FONT-SIZE: 13px"&gt;  HRESULT hr = pxcpControl-&amp;gt;get_Content( &amp;amp;pContentDispatch );
&lt;/PRE&gt;&lt;PRE style="BACKGROUND-COLOR: #fbfbfb; MARGIN: 0em; WIDTH: 100%; FONT-FAMILY: consolas,'Courier New',courier,monospace; FONT-SIZE: 13px"&gt;&lt;/PRE&gt;&lt;PRE style="BACKGROUND-COLOR: #ffffff; MARGIN: 0em; WIDTH: 100%; FONT-FAMILY: consolas,'Courier New',courier,monospace; FONT-SIZE: 13px"&gt;  BSTR name = L"&lt;SPAN style="COLOR: #8b0000"&gt;MyReceiver&lt;/SPAN&gt;";
&lt;/PRE&gt;&lt;PRE style="BACKGROUND-COLOR: #fbfbfb; MARGIN: 0em; WIDTH: 100%; FONT-FAMILY: consolas,'Courier New',courier,monospace; FONT-SIZE: 13px"&gt;  hr = pContentDispatch-&amp;gt;GetIDsOfNames(IID_NULL, &amp;amp;name, 1, LOCALE_SYSTEM_DEFAULT, &amp;amp;dispatchID);
&lt;/PRE&gt;&lt;PRE style="BACKGROUND-COLOR: #ffffff; MARGIN: 0em; WIDTH: 100%; FONT-FAMILY: consolas,'Courier New',courier,monospace; FONT-SIZE: 13px"&gt;  hr = pContentDispatch-&amp;gt;Invoke(dispatchID, IID_NULL, LOCALE_SYSTEM_DEFAULT, DISPATCH_PROPERTYGET, &amp;amp;params, &amp;amp;varResult, NULL, NULL);
&lt;/PRE&gt;&lt;PRE style="BACKGROUND-COLOR: #fbfbfb; MARGIN: 0em; WIDTH: 100%; FONT-FAMILY: consolas,'Courier New',courier,monospace; FONT-SIZE: 13px"&gt;&lt;/PRE&gt;&lt;PRE style="BACKGROUND-COLOR: #ffffff; MARGIN: 0em; WIDTH: 100%; FONT-FAMILY: consolas,'Courier New',courier,monospace; FONT-SIZE: 13px"&gt;  pScriptableObjectDispatch = varResult.pdispVal;
&lt;/PRE&gt;&lt;PRE style="BACKGROUND-COLOR: #fbfbfb; MARGIN: 0em; WIDTH: 100%; FONT-FAMILY: consolas,'Courier New',courier,monospace; FONT-SIZE: 13px"&gt;  name = L"&lt;SPAN style="COLOR: #8b0000"&gt;ShowMessage&lt;/SPAN&gt;";
&lt;/PRE&gt;&lt;PRE style="BACKGROUND-COLOR: #ffffff; MARGIN: 0em; WIDTH: 100%; FONT-FAMILY: consolas,'Courier New',courier,monospace; FONT-SIZE: 13px"&gt;  hr = pScriptableObjectDispatch-&amp;gt;GetIDsOfNames(IID_NULL, &amp;amp;name, 1, LOCALE_SYSTEM_DEFAULT, &amp;amp;dispatchID);
&lt;/PRE&gt;&lt;PRE style="BACKGROUND-COLOR: #fbfbfb; MARGIN: 0em; WIDTH: 100%; FONT-FAMILY: consolas,'Courier New',courier,monospace; FONT-SIZE: 13px"&gt;  hr = pScriptableObjectDispatch-&amp;gt;Invoke(dispatchID, IID_NULL, LOCALE_SYSTEM_DEFAULT, DISPATCH_METHOD, &amp;amp;params, &amp;amp;varResult, NULL, NULL);
&lt;/PRE&gt;&lt;PRE style="BACKGROUND-COLOR: #ffffff; MARGIN: 0em; WIDTH: 100%; FONT-FAMILY: consolas,'Courier New',courier,monospace; FONT-SIZE: 13px"&gt;&lt;/PRE&gt;&lt;/PRE&gt;
&lt;P&gt;Let’s examine those lines a little bit more closely. First you get a reference to the Silverlight control. From the control you go to the control’s content. There’s an implicit assumption here that you don’t access the Content until after the &lt;A href="http://msdn.microsoft.com/en-us/library/cc189034(VS.95).aspx" mce_href="http://msdn.microsoft.com/en-us/library/cc189034(VS.95).aspx"&gt;VisualTree&lt;/A&gt; is constructed.&lt;/P&gt;
&lt;P&gt;From the content, you get the ScriptableObject by the name passed to RegisterScriptableObject in the Silverlight application. Then finally, very important(!), you ask the ScriptableObject for its default dispatch interface, from where you get method or property references, which you can invoke via &lt;A href="http://msdn.microsoft.com/en-us/library/ms221479.aspx" mce_href="http://msdn.microsoft.com/en-us/library/ms221479.aspx"&gt;IDispatch::Invoke&lt;/A&gt;.&lt;/P&gt;
&lt;P&gt;Now you have everything in place to listen to events from peripherals and pass them on to a Silverlight application running inside the custom host.&lt;/P&gt;
&lt;H2&gt;Communication between Applications&lt;/H2&gt;
&lt;P&gt;If you need run the Silverlight application running in a browser, then you can build a bridge from the custom host that communicates with the browser application with the silverlight application communication feature introduced with Silverlight 3.&lt;/P&gt;
&lt;P&gt;Two applications can communicate with the LocalMessageSender and LocalMessageReceiver objects. If you need to forward local events to a browser application, then the browser application would start listening to messages.&lt;/P&gt;
&lt;P&gt;Setting up Sender and Receiver is straight forward. The receiving applications starts the listener:&lt;/P&gt;&lt;PRE&gt;&lt;PRE style="BACKGROUND-COLOR: #fbfbfb; MARGIN: 0em; WIDTH: 100%; FONT-FAMILY: consolas,'Courier New',courier,monospace; FONT-SIZE: 13px"&gt;LocalMessageReceiver receiver = &lt;SPAN style="COLOR: #0000ff"&gt;new&lt;/SPAN&gt; LocalMessageReceiver(     
&lt;/PRE&gt;&lt;PRE style="BACKGROUND-COLOR: #ffffff; MARGIN: 0em; WIDTH: 100%; FONT-FAMILY: consolas,'Courier New',courier,monospace; FONT-SIZE: 13px"&gt;    "&lt;SPAN style="COLOR: #8b0000"&gt;&lt;STRONG&gt;Receiver Name&lt;/STRONG&gt;&lt;/SPAN&gt;",    
&lt;/PRE&gt;&lt;PRE style="BACKGROUND-COLOR: #fbfbfb; MARGIN: 0em; WIDTH: 100%; FONT-FAMILY: consolas,'Courier New',courier,monospace; FONT-SIZE: 13px"&gt;    ReceiverNameScope.Global, LocalMessageReceiver.AnyDomain  );
&lt;/PRE&gt;&lt;PRE style="BACKGROUND-COLOR: #ffffff; MARGIN: 0em; WIDTH: 100%; FONT-FAMILY: consolas,'Courier New',courier,monospace; FONT-SIZE: 13px"&gt;&lt;/PRE&gt;&lt;PRE style="BACKGROUND-COLOR: #fbfbfb; MARGIN: 0em; WIDTH: 100%; FONT-FAMILY: consolas,'Courier New',courier,monospace; FONT-SIZE: 13px"&gt;receiver.MessageReceived += ( &lt;SPAN style="COLOR: #0000ff"&gt;object&lt;/SPAN&gt; sender, MessageReceivedEventArgs e ) =&amp;gt;
&lt;/PRE&gt;&lt;PRE style="BACKGROUND-COLOR: #ffffff; MARGIN: 0em; WIDTH: 100%; FONT-FAMILY: consolas,'Courier New',courier,monospace; FONT-SIZE: 13px"&gt;{
&lt;/PRE&gt;&lt;PRE style="BACKGROUND-COLOR: #fbfbfb; MARGIN: 0em; WIDTH: 100%; FONT-FAMILY: consolas,'Courier New',courier,monospace; FONT-SIZE: 13px"&gt;        items.Add( &lt;SPAN style="COLOR: #0000ff"&gt;new&lt;/SPAN&gt; ListItem() { Text= e.Message + "&lt;SPAN style="COLOR: #8b0000"&gt; &lt;/SPAN&gt;" + DateTime.Now.ToLongTimeString() } );
&lt;/PRE&gt;&lt;PRE style="BACKGROUND-COLOR: #ffffff; MARGIN: 0em; WIDTH: 100%; FONT-FAMILY: consolas,'Courier New',courier,monospace; FONT-SIZE: 13px"&gt;};
&lt;/PRE&gt;&lt;PRE style="BACKGROUND-COLOR: #fbfbfb; MARGIN: 0em; WIDTH: 100%; FONT-FAMILY: consolas,'Courier New',courier,monospace; FONT-SIZE: 13px"&gt;receiver.Listen();&lt;/PRE&gt;&lt;/PRE&gt;
&lt;P&gt;and the sending application sends to a receiver with the registered name:&lt;/P&gt;&lt;PRE&gt;&lt;PRE style="BACKGROUND-COLOR: #fbfbfb; MARGIN: 0em; WIDTH: 100%; FONT-FAMILY: consolas,'Courier New',courier,monospace; FONT-SIZE: 13px"&gt;LocalMessageSender msgsender = &lt;SPAN style="COLOR: #0000ff"&gt;new&lt;/SPAN&gt; LocalMessageSender(    
&lt;/PRE&gt;&lt;PRE style="BACKGROUND-COLOR: #ffffff; MARGIN: 0em; WIDTH: 100%; FONT-FAMILY: consolas,'Courier New',courier,monospace; FONT-SIZE: 13px"&gt;    "&lt;SPAN style="COLOR: #8b0000"&gt;&lt;STRONG&gt;Receiver Name&lt;/STRONG&gt;&lt;/SPAN&gt;",     
&lt;/PRE&gt;&lt;PRE style="BACKGROUND-COLOR: #fbfbfb; MARGIN: 0em; WIDTH: 100%; FONT-FAMILY: consolas,'Courier New',courier,monospace; FONT-SIZE: 13px"&gt;    System.Windows.Messaging.LocalMessageSender.Global );
&lt;/PRE&gt;&lt;PRE style="BACKGROUND-COLOR: #ffffff; MARGIN: 0em; WIDTH: 100%; FONT-FAMILY: consolas,'Courier New',courier,monospace; FONT-SIZE: 13px"&gt;&lt;/PRE&gt;&lt;PRE style="BACKGROUND-COLOR: #fbfbfb; MARGIN: 0em; WIDTH: 100%; FONT-FAMILY: consolas,'Courier New',courier,monospace; FONT-SIZE: 13px"&gt;msgsender.SendCompleted += ( &lt;SPAN style="COLOR: #0000ff"&gt;object&lt;/SPAN&gt; sender2, SendCompletedEventArgs e2 ) =&amp;gt;
&lt;/PRE&gt;&lt;PRE style="BACKGROUND-COLOR: #ffffff; MARGIN: 0em; WIDTH: 100%; FONT-FAMILY: consolas,'Courier New',courier,monospace; FONT-SIZE: 13px"&gt;{
&lt;/PRE&gt;&lt;PRE style="BACKGROUND-COLOR: #fbfbfb; MARGIN: 0em; WIDTH: 100%; FONT-FAMILY: consolas,'Courier New',courier,monospace; FONT-SIZE: 13px"&gt;    MessageBox.Show("&lt;SPAN style="COLOR: #8b0000"&gt;Result: &lt;/SPAN&gt;" );
&lt;/PRE&gt;&lt;PRE style="BACKGROUND-COLOR: #ffffff; MARGIN: 0em; WIDTH: 100%; FONT-FAMILY: consolas,'Courier New',courier,monospace; FONT-SIZE: 13px"&gt;};
&lt;/PRE&gt;&lt;PRE style="BACKGROUND-COLOR: #fbfbfb; MARGIN: 0em; WIDTH: 100%; FONT-FAMILY: consolas,'Courier New',courier,monospace; FONT-SIZE: 13px"&gt;&lt;/PRE&gt;&lt;PRE style="BACKGROUND-COLOR: #ffffff; MARGIN: 0em; WIDTH: 100%; FONT-FAMILY: consolas,'Courier New',courier,monospace; FONT-SIZE: 13px"&gt;msgsender.SendAsync(textBox1.Text);
&lt;/PRE&gt;&lt;/PRE&gt;
&lt;P&gt;MSDN has a &lt;A href="http://msdn.microsoft.com/en-us/library/dd833063(VS.95).aspx" mce_href="http://msdn.microsoft.com/en-us/library/dd833063(VS.95).aspx"&gt;good overview of local messaging in Silverlight&lt;/A&gt;, including some advanced features like sending complex XML messages and troubleshooting. &lt;/P&gt;
&lt;P&gt;What’s important to note, is that the BaseUrl of the sending application has to match the BaseUrl of the receiving application. Even setting the receiver options and disabling zone checks are not sufficient for the receiver to process incoming messages. You may have to play some more tricks in the host if you’re not planning on loading the sending application from the same site.&lt;/P&gt;
&lt;P&gt;For example, you could intercept the download request in &lt;A href="http://msdn.microsoft.com/en-us/library/cc296246(VS.95).aspx#IXcpControlHost_DownloadUrl" mce_href="http://msdn.microsoft.com/en-us/library/cc296246(VS.95).aspx#IXcpControlHost_DownloadUrl"&gt;IXcpControlHost::DownloadUrl()&lt;/A&gt; to load the .xap from other locations.&lt;/P&gt;
&lt;H2&gt;Closing Words&lt;/H2&gt;
&lt;P&gt;The upcoming &lt;A href="http://www.silverlight.net/getstarted/silverlight-4-beta/" mce_href="http://www.silverlight.net/getstarted/silverlight-4-beta/"&gt;Silverlight 4&lt;/A&gt; release is going to simplify the architecture for out-of-browser scenarios. &lt;A title="Silverlight 4 trusted applications" href="http://timheuer.com/blog/archive/2009/11/18/whats-new-in-silverlight-4-complete-guide-new-features.aspx#elevated" mce_href="http://timheuer.com/blog/archive/2009/11/18/whats-new-in-silverlight-4-complete-guide-new-features.aspx#elevated"&gt;Silverlight 4 trusted applications&lt;/A&gt; can communicate with COM servers directly, which eliminates the need for hosting a Silverlight application in a custom container to get access to local resources. You still need the custom container bridge if your browser application needs access to devices and other local resources. &lt;/P&gt;
&lt;P&gt;I’m planning a follow up post discussing the Silverlight 4 option. It’s going to be a little bit before SL4 ships – Scott Guthrie mentioned H1 2010 as the target timeframe during his &lt;A href="http://microsoftpdc.com/Sessions/KEY02" mce_href="http://microsoftpdc.com/Sessions/KEY02"&gt;PDC Day 2 keynote&lt;/A&gt;. It’s good to have a working option with Silverlight 3 before that.&lt;/P&gt;
&lt;P&gt;And finally, the big thank you to &lt;A href="http://nerddawg.blogspot.com/" mce_href="http://nerddawg.blogspot.com/"&gt;Ashish&lt;/A&gt;, who patiently answered my questions about the COM APIs while I was looking for the magic combination ;)&lt;/P&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=7273891" width="1" height="1"&gt;</description><category domain="http://weblogs.asp.net/cschittko/archive/tags/.NET/default.aspx">.NET</category><category domain="http://weblogs.asp.net/cschittko/archive/tags/Silverlight/default.aspx">Silverlight</category><category domain="http://weblogs.asp.net/cschittko/archive/tags/Visual+Studio/default.aspx">Visual Studio</category></item><item><title>What’s so old-school about text based programming?</title><link>http://weblogs.asp.net/cschittko/archive/2009/12/07/what-s-so-old-school-about-text-based-programming.aspx</link><pubDate>Mon, 07 Dec 2009 15:20:53 GMT</pubDate><guid isPermaLink="false">c06e2b9d-981a-45b4-a55f-ab0d8bbfdc1c:7273025</guid><dc:creator>ChristophDotNet</dc:creator><slash:comments>3</slash:comments><wfw:commentRss>http://weblogs.asp.net/cschittko/rsscomments.aspx?PostID=7273025</wfw:commentRss><wfw:comment>http://weblogs.asp.net/cschittko/commentapi.aspx?PostID=7273025</wfw:comment><comments>http://weblogs.asp.net/cschittko/archive/2009/12/07/what-s-so-old-school-about-text-based-programming.aspx#comments</comments><description>&lt;p&gt;Computerworld posted this piece that &lt;a href="http://www.computerworld.com/s/article/9141465/Microsoft_s_top_developers_prefer_old_school_coding_methods"&gt;Microsoft developers are using text editors for development&lt;/a&gt;. What’s so old-school about that? What I mean really? Coding in text editors is not a trend among the grey-hairds like &lt;a href="http://lewiscurtis.com/default.aspx"&gt;Lewis&lt;/a&gt; suggested on an internal thread. Text based tools are all the rave with the next generation of developers. I mean people that look like the Mac guy in the Apple commercials.&lt;/p&gt;  &lt;p&gt;Lots of today’s developers are all fired up about Ruby, RoR, PHP and even javascript – they’re all about text programming.&amp;#160; Those are going to be the thought-leaders for the next generation of developers and they are programming with very similar tools and dev models that many of us started with. You may say that those developer icons at Microsoft are downright on the cutting edge.&lt;/p&gt;  &lt;p&gt;Aside from that … are the development tools really the right thing to look at to judge state of development at Microsoft (or any other shop)? What about &lt;a href="http://msdn.microsoft.com/en-us/library/4dtdybt8.aspx"&gt;code quality&lt;/a&gt;? &lt;a href="http://www.officelabs.com/Pages/Envisioning.aspx"&gt;Innovation&lt;/a&gt;? Shouldn’t Microsoft developers be judged by that?&lt;/p&gt;  &lt;p&gt;Some of my personal conclusions are that the developer(!) community doesn’t crave graphical tools – maybe it’s because they favor power and flexibility over dealing with level of complexity because that’s a higher priority for the job they are doing. Architects likely that deal with multiple more dimensions, i.e. cross-system dependencies, deployment, etc. and thus like other levels of abstractions that lend themselves better to a visual representation.&lt;/p&gt;  &lt;p&gt;Furthermore, frameworks like RoR following the trends started with Java and .NET. They are raising the level of abstraction for developers – without going to graphical development models. I just spent time experimenting with some COM work. The productivity problem isn’t working with text-based languages like C++.&amp;#160; The much bigger productivity problem is that COM interfaces were designed for late bound environments and are extremely low level. That problem was solved either with graphical environments or text based environments like VB. &lt;/p&gt;  &lt;p&gt;Again, use the right tool for the job. Libraries that raise the level of abstraction have been very successful to boost productivity for developers. Enhancements to text editors to speed up development have been around since way longer than Visual Studio. Pretty much everybody had their Emacs or VI rigged with all sorts of fancy macros to keep code clean. Graphicals tools, at least today are much more helpful for visualizing architecture and the high-level flow of a program. Those are different from executable code and are intended for a different audience.&lt;/p&gt;  &lt;p&gt;What am I missing? &lt;/p&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=7273025" width="1" height="1"&gt;</description><category domain="http://weblogs.asp.net/cschittko/archive/tags/Visual+Studio/default.aspx">Visual Studio</category></item><item><title>Silverlight 3 for Kiosk Apps? Of Course!</title><link>http://weblogs.asp.net/cschittko/archive/2009/11/17/silverlight-3-for-kiosk-apps-of-course.aspx</link><pubDate>Tue, 17 Nov 2009 15:48:36 GMT</pubDate><guid isPermaLink="false">c06e2b9d-981a-45b4-a55f-ab0d8bbfdc1c:7258041</guid><dc:creator>ChristophDotNet</dc:creator><slash:comments>17</slash:comments><wfw:commentRss>http://weblogs.asp.net/cschittko/rsscomments.aspx?PostID=7258041</wfw:commentRss><wfw:comment>http://weblogs.asp.net/cschittko/commentapi.aspx?PostID=7258041</wfw:comment><comments>http://weblogs.asp.net/cschittko/archive/2009/11/17/silverlight-3-for-kiosk-apps-of-course.aspx#comments</comments><description>&lt;p&gt;Several of the customers I work with are looking to build kiosk or point-of-sale applications with &lt;a href="http://www.silverlight.net"&gt;Silverlight&lt;/a&gt;. The ease of deployment with browser-based Silverlight applications is definitely appealing. Sharing applications or components between customers’ kiosks and web sites is another appealing reasons to go with Silverlight. This post outlines the architecture decisions between Silverlight and WPF and presents architecture options for Silverlight based solutions. A follow up post will discuss the Silverlight implementation details. &lt;/p&gt;  &lt;p&gt;However, POS systems or kiosks often need integration with local peripherals, such as credit card readers, barcode scanners, printers, etc. Since Silverlight browser applications run in a sandbox access to these devices isn’t immediately available. Therefore we need to find a way to insert a bridge between the peripherals and the Silverlight application to read data from the devices and forward the data to the Silverlight app. &lt;/p&gt;  &lt;p&gt;To get started, let’s look at applications that can communicate with local peripherals. Desktop applications can communicate with local devices. Devices usually ship with C++ or .NET libraries to read data or sink events from devices. Therefore Desktop applications are usually preferred for POS systems. Microsoft has a &lt;a href="http://msdn.microsoft.com/en-us/library/ms828083.aspx"&gt;POS for .NET framework&lt;/a&gt; to simplify development of applications that need access to a wide array of peripherals. WPF offers a very compelling option to build the application UI and building the UI in WPF is a great step to share assets between the kiosk and the Web. The following table summarizes the decision points to decide between a full desktop application or a Silverlight app.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;   &lt;table border="0" cellspacing="0" cellpadding="0"&gt;&lt;tbody&gt;       &lt;tr&gt;         &lt;td valign="top" width="200"&gt;           &lt;p&gt;&lt;strong&gt;Pro&lt;/strong&gt;&lt;/p&gt;         &lt;/td&gt;          &lt;td valign="top" width="200"&gt;           &lt;p&gt;&lt;strong&gt;Con&lt;/strong&gt;&lt;/p&gt;         &lt;/td&gt;       &lt;/tr&gt;        &lt;tr&gt;         &lt;td valign="top" width="200"&gt;           &lt;p&gt;Full POS Framework for peripheral integration&lt;/p&gt;         &lt;/td&gt;          &lt;td valign="top" width="200"&gt;           &lt;p&gt;Requires high-touch deployment&lt;/p&gt;         &lt;/td&gt;       &lt;/tr&gt;        &lt;tr&gt;         &lt;td valign="top" width="200"&gt;           &lt;p&gt;Full access to local resources (files, registry, printers, peripherals)&lt;/p&gt;         &lt;/td&gt;          &lt;td valign="top" width="200"&gt;           &lt;p&gt;Some re-development to share assets between desktop and web applications&lt;/p&gt;         &lt;/td&gt;       &lt;/tr&gt;        &lt;tr&gt;         &lt;td valign="top" width="200"&gt;           &lt;p&gt;Hardware accelerated graphics&lt;/p&gt;         &lt;/td&gt;          &lt;td valign="top" width="200"&gt;           &lt;p&gt;Windows specific&lt;/p&gt;         &lt;/td&gt;       &lt;/tr&gt;        &lt;tr&gt;         &lt;td valign="top" width="200"&gt;           &lt;p&gt;Richest Graphics with WPF and XNA&lt;/p&gt;         &lt;/td&gt;          &lt;td valign="top" width="200"&gt;&amp;#160;&lt;/td&gt;       &lt;/tr&gt;        &lt;tr&gt;         &lt;td valign="top" width="200"&gt;           &lt;p&gt;Full .NET Framework (WCF, WPF, WF, SxS versioning, …)&lt;/p&gt;         &lt;/td&gt;          &lt;td valign="top" width="200"&gt;&amp;#160;&lt;/td&gt;       &lt;/tr&gt;     &lt;/tbody&gt;&lt;/table&gt; &lt;/p&gt;  &lt;p&gt;If the cons weigh too high and you really need a browser-based app, for example when you’re running in shared kiosk environments or if ease of deployment is much more important than peripheral integration, then you have a couple of options with Silverlight. &lt;/p&gt;  &lt;p&gt;First, you can simply load the Silverlight application with a control hosted in a desktop application via the &lt;a href="http://msdn.microsoft.com/en-us/library/cc296246(VS.95).aspx"&gt;COM hosting interfaces&lt;/a&gt;. The host application can &lt;a href="http://msdn.microsoft.com/en-us/library/cc296246(VS.95).aspx#IXcpControl_put_Source"&gt;load the Silverlight application&lt;/a&gt; from a web URL, i.e. once you install the host application, you can still download the Silverlight application from the web. The Silverlight hosting interfaces even allow managing the download process, customize caching of .xap files and other resources through the &lt;a href="http://msdn.microsoft.com/en-us/library/cc296246(VS.95).aspx#IXcpControlHost2"&gt;IXcpControlHost interface&lt;/a&gt;. &lt;/p&gt;  &lt;p&gt;For communication between the Silverlight app and the device manager running in the host application, the Silverlight application can expose an interface via the scriptable object bridge. That bridge is intended for communicating with the javascript engine of a web browser but it works in other containers as well. The scriptable object is accessible to the Win32 host via COM &lt;a href="http://msdn.microsoft.com/en-us/library/ms221608.aspx"&gt;IDispatch&lt;/a&gt; interfaces, which the host application can invoke to send data to the embedded Silverlight application as shown in the diagram below. &lt;/p&gt;  &lt;p&gt;&lt;a href="file:///C:\Users\cschittk\AppData\Local\Temp\WindowsLiveWriter-429641856\supfiles3B4929C5\clip_image002%5b4%5d.gif"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: block; float: none; margin-left: auto; border-top: 0px; margin-right: auto; border-right: 0px" title="clip_image001" border="0" alt="clip_image001" src="http://weblogs.asp.net/blogs/cschittko/clip_image001_7142BA76.gif" width="269" height="475" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;You may at this point decide that the custom host is all you need, but may also want to run the application in a browser, for example because the Silverlight application integrates with an existing web site or you need to comply with an industry standard like &lt;a href="http://en.wikipedia.org/wiki/Common_Use_Self_Service"&gt;CUSS&lt;/a&gt;.    &lt;table border="0" cellspacing="0" cellpadding="0"&gt;&lt;tbody&gt;       &lt;tr&gt;         &lt;td valign="top" width="200"&gt;           &lt;p&gt;&lt;strong&gt;Pro&lt;/strong&gt;&lt;/p&gt;         &lt;/td&gt;          &lt;td valign="top" width="200"&gt;           &lt;p&gt;&lt;strong&gt;Con&lt;/strong&gt;&lt;/p&gt;         &lt;/td&gt;       &lt;/tr&gt;        &lt;tr&gt;         &lt;td valign="top" width="200"&gt;           &lt;p&gt;Single Process solution&lt;/p&gt;         &lt;/td&gt;          &lt;td valign="top" width="200"&gt;           &lt;p&gt;Non-standard,&amp;#160; Windows-only container&lt;/p&gt;         &lt;/td&gt;       &lt;/tr&gt;        &lt;tr&gt;         &lt;td valign="top" width="200"&gt;&amp;#160;&lt;/td&gt;          &lt;td valign="top" width="200"&gt;           &lt;p&gt;Need to re-develop browser functionality, such as caching&lt;/p&gt;         &lt;/td&gt;       &lt;/tr&gt;        &lt;tr&gt;         &lt;td valign="top" width="200"&gt;&amp;#160;&lt;/td&gt;          &lt;td valign="top" width="200"&gt;           &lt;p&gt;Tight coupling of peripheral management and application UI&lt;/p&gt;         &lt;/td&gt;       &lt;/tr&gt;     &lt;/tbody&gt;&lt;/table&gt; &lt;/p&gt;  &lt;p&gt;In the past, applications installed a &lt;a href="http://msdn.microsoft.com/en-us/magazine/cc188791.aspx"&gt;local web server like Cassini&lt;/a&gt; which hosted a .NET component that would communicate with local resources as needed. The Silverlight application would make REST calls to the “web server” which would handle the communication with a peripheral device or other local resources. &lt;/p&gt;  &lt;p&gt;&lt;a href="file:///C:\Users\cschittk\AppData\Local\Temp\WindowsLiveWriter-429641856\supfiles3B4929C5\clip_image004%5b4%5d.gif"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: block; float: none; margin-left: auto; border-top: 0px; margin-right: auto; border-right: 0px" title="clip_image002" border="0" alt="clip_image002" src="http://weblogs.asp.net/blogs/cschittko/clip_image002_41C425DD.gif" width="575" height="410" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;However, this approach had a couple of drawbacks. First, running a local web server requires administrator privileges and is often frowned upon because of potential security risks. Second, communication always had to be initiated by the Silverlight application. The peripheral could not send notifications to the application running in the browser.   &lt;table border="0" cellspacing="0" cellpadding="0"&gt;&lt;tbody&gt;       &lt;tr&gt;         &lt;td valign="top" width="200"&gt;           &lt;p&gt;&lt;strong&gt;Pro&lt;/strong&gt;&lt;/p&gt;         &lt;/td&gt;          &lt;td valign="top" width="200"&gt;           &lt;p&gt;&lt;strong&gt;Con&lt;/strong&gt;&lt;/p&gt;         &lt;/td&gt;       &lt;/tr&gt;        &lt;tr&gt;         &lt;td valign="top" width="200"&gt;           &lt;p&gt;Potentially fully managed code implementation&lt;/p&gt;         &lt;/td&gt;          &lt;td valign="top" width="200"&gt;           &lt;p&gt;Complexity running a local web server&lt;/p&gt;         &lt;/td&gt;       &lt;/tr&gt;        &lt;tr&gt;         &lt;td valign="top" width="200"&gt;&amp;#160;&lt;/td&gt;          &lt;td valign="top" width="200"&gt;           &lt;p&gt;Communication overhead with HTTP&lt;/p&gt;         &lt;/td&gt;       &lt;/tr&gt;        &lt;tr&gt;         &lt;td valign="top" width="200"&gt;&amp;#160;&lt;/td&gt;          &lt;td valign="top" width="200"&gt;           &lt;p&gt;One-way communication. Silverlight application has to poll/&lt;/p&gt;         &lt;/td&gt;       &lt;/tr&gt;        &lt;tr&gt;         &lt;td valign="top" width="200"&gt;&amp;#160;&lt;/td&gt;          &lt;td valign="top" width="200"&gt;           &lt;p&gt;Policy restrictions for local services and sockets&lt;/p&gt;         &lt;/td&gt;       &lt;/tr&gt;        &lt;tr&gt;         &lt;td valign="top" width="200"&gt;&amp;#160;&lt;/td&gt;          &lt;td valign="top" width="200"&gt;           &lt;p&gt;Perceived security risks of local web servers&lt;/p&gt;         &lt;/td&gt;       &lt;/tr&gt;        &lt;tr&gt;         &lt;td valign="top" width="200"&gt;&amp;#160;&lt;/td&gt;          &lt;td valign="top" width="200"&gt;           &lt;p&gt;Complex deployment of local services&lt;/p&gt;         &lt;/td&gt;       &lt;/tr&gt;     &lt;/tbody&gt;&lt;/table&gt; &lt;/p&gt;  &lt;p&gt;With Silverlight 3 we have an alternative that doesn’t require a local “web server”. Silverlight 3 introduced the ability for Silverlight applications to communicate regardless what application container they are running in. One Silverlight application would send messages over a “named channel” with a &lt;a href="http://msdn.microsoft.com/en-us/library/system.windows.messaging.localmessagesender%28VS.95%29.aspx"&gt;LocalMessageSender&lt;/a&gt; object. Another Silverlight application can listen on that named channel with a &lt;a href="http://msdn.microsoft.com/en-us/library/system.windows.messaging.localmessagereceiver%28VS.95%29.aspx"&gt;LocalMessageReceiver&lt;/a&gt; object. &lt;/p&gt;  &lt;p&gt;In our case the Win32 application could be an application without a visible UI that only acts as a bridge between the peripherals and the browser application. &lt;/p&gt;  &lt;p&gt;&lt;a href="file:///C:\Users\cschittk\AppData\Local\Temp\WindowsLiveWriter-429641856\supfiles3B4929C5\clip_image006%5b4%5d.gif"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: block; float: none; margin-left: auto; border-top: 0px; margin-right: auto; border-right: 0px" title="clip_image003" border="0" alt="clip_image003" src="http://weblogs.asp.net/blogs/cschittko/clip_image003_48477FA0.gif" width="572" height="405" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;In a scenario where the need for a local peripherals is limited to a single, well-known device, the effort to write a C++ host and communicate with the device in unmanaged code isn’t a daunting task. More sophisticated POS solutions may require more than one peripheral type. They may even require supporting different device configurations, i.e. bar code readers from different vendors. These types of POS applications typically require POS abstraction frameworks like &lt;a href="http://msdn.microsoft.com/en-us/library/ms828083.aspx"&gt;POS for .NET&lt;/a&gt;. However, in that case the host application could be either a managed C++ application with C++ code to implement the COM host for the Silverlight “bridge” application and .NET code to manage peripheral interaction.    &lt;table border="0" cellspacing="0" cellpadding="0"&gt;&lt;tbody&gt;       &lt;tr&gt;         &lt;td valign="top" width="200"&gt;           &lt;p&gt;&lt;strong&gt;Pro&lt;/strong&gt;&lt;/p&gt;         &lt;/td&gt;          &lt;td valign="top" width="200"&gt;           &lt;p&gt;&lt;strong&gt;Con&lt;/strong&gt;&lt;/p&gt;         &lt;/td&gt;       &lt;/tr&gt;        &lt;tr&gt;         &lt;td valign="top" width="200"&gt;           &lt;p&gt;Loose coupling between peripheral management and UI&lt;/p&gt;         &lt;/td&gt;          &lt;td valign="top" width="200"&gt;           &lt;p&gt;Local deployment of peripheral management application required&lt;/p&gt;         &lt;/td&gt;       &lt;/tr&gt;        &lt;tr&gt;         &lt;td valign="top" width="200"&gt;           &lt;p&gt;Shareable bridge&lt;/p&gt;         &lt;/td&gt;          &lt;td valign="top" width="200"&gt;           &lt;p&gt;More complex architecture with two applications&lt;/p&gt;         &lt;/td&gt;       &lt;/tr&gt;     &lt;/tbody&gt;&lt;/table&gt; &lt;/p&gt;  &lt;p&gt;To close with some food for thought, there may be a completely browser based alternative that I haven’t tested out yet. Instead of running a Silverlight bridge in a separate Win32 application you could try to build a C++ ActiveX control to host the Silverlight “bridge” and the native device interaction code. This approach presents some security challenges that can be mitigated, but you still have to deal with the perceptions of pushing down an ActiveX control. &lt;/p&gt;  &lt;p&gt;&lt;a href="file:///C:\Users\cschittk\AppData\Local\Temp\WindowsLiveWriter-429641856\supfiles3B4929C5\clip_image008%5b6%5d.gif"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: block; float: none; margin-left: auto; border-top: 0px; margin-right: auto; border-right: 0px" title="clip_image004" border="0" alt="clip_image004" src="http://weblogs.asp.net/blogs/cschittko/clip_image004_64288ECB.gif" width="542" height="409" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;You do have the benefits of clean separation between a cross-platform application that run on any platform that supports Silverlight and the platform specific extensions that need to manage interaction with local peripherals. You also have the benefit of a fully browser-based deployment model.   &lt;table border="0" cellspacing="0" cellpadding="0"&gt;&lt;tbody&gt;       &lt;tr&gt;         &lt;td valign="top" width="200"&gt;           &lt;p&gt;&lt;strong&gt;Pro&lt;/strong&gt;&lt;/p&gt;         &lt;/td&gt;          &lt;td valign="top" width="200"&gt;           &lt;p&gt;&lt;strong&gt;Con&lt;/strong&gt;&lt;/p&gt;         &lt;/td&gt;       &lt;/tr&gt;        &lt;tr&gt;         &lt;td valign="top" width="200"&gt;           &lt;p&gt;Fully browser-based deployment model&lt;/p&gt;         &lt;/td&gt;          &lt;td valign="top" width="200"&gt;           &lt;p&gt;Native code development of ActiveX control&lt;/p&gt;         &lt;/td&gt;       &lt;/tr&gt;        &lt;tr&gt;         &lt;td valign="top" width="200"&gt;&amp;#160;&lt;/td&gt;          &lt;td valign="top" width="200"&gt;           &lt;p&gt;Policies for secure ActiveX execution required to avoid security risks&lt;/p&gt;         &lt;/td&gt;       &lt;/tr&gt;     &lt;/tbody&gt;&lt;/table&gt;&lt;/p&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=7258041" width="1" height="1"&gt;</description><category domain="http://weblogs.asp.net/cschittko/archive/tags/.NET/default.aspx">.NET</category><category domain="http://weblogs.asp.net/cschittko/archive/tags/Silverlight/default.aspx">Silverlight</category><category domain="http://weblogs.asp.net/cschittko/archive/tags/WPF/default.aspx">WPF</category></item><item><title>WcfTestClient with Windows Azure</title><link>http://weblogs.asp.net/cschittko/archive/2009/10/30/wcftestclient-with-windows-azure.aspx</link><pubDate>Fri, 30 Oct 2009 16:25:13 GMT</pubDate><guid isPermaLink="false">c06e2b9d-981a-45b4-a55f-ab0d8bbfdc1c:7243336</guid><dc:creator>ChristophDotNet</dc:creator><slash:comments>4</slash:comments><wfw:commentRss>http://weblogs.asp.net/cschittko/rsscomments.aspx?PostID=7243336</wfw:commentRss><wfw:comment>http://weblogs.asp.net/cschittko/commentapi.aspx?PostID=7243336</wfw:comment><comments>http://weblogs.asp.net/cschittko/archive/2009/10/30/wcftestclient-with-windows-azure.aspx#comments</comments><description>&lt;p&gt;One of my customers is working on an Azure WCF service. When wanted to test the service with &lt;a href="http://msdn.microsoft.com/en-us/library/bb552364.aspx"&gt;WcfTestClient&lt;/a&gt;, but we ran into some issues. We started the dev fabric and had the WebRole running on port 81. When we went to the WCF service metadata page at &lt;a href="http://mybox:5101/ProdKService.svc?wsdl"&gt;&lt;span style="font-family: &amp;#39;Courier New&amp;#39;; font-size: 10pt; mso-fareast-font-family: &amp;#39;Times New Roman&amp;#39;"&gt;http://mybox:5101/ProdKService.svc&lt;/span&gt;&lt;/a&gt;, we got the expected web page, which states:&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;To test this service, you will need to create a client and use it to call the service. You can do this using the svcutil.exe tool from the command line with the following syntax:&lt;/p&gt;    &lt;div style="border-bottom: #f0f0e0 1pt solid; border-left: #f0f0e0 1pt solid; padding-bottom: 4pt; padding-left: 4pt; padding-right: 4pt; background: #e5e5cc; border-top: #f0f0e0 1pt solid; border-right: #f0f0e0 1pt solid; padding-top: 4pt; mso-element: para-border-div; mso-border-alt: solid #f0f0e0 .75pt"&gt;     &lt;p style="border-bottom: medium none; border-left: medium none; padding-bottom: 0in; line-height: normal; padding-left: 0in; padding-right: 0in; margin-bottom: 0pt; background: #e5e5cc; border-top: medium none; border-right: medium none; padding-top: 0in; mso-border-alt: solid #f0f0e0 .75pt; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt; mso-padding-alt: 4.0pt 4.0pt 4.0pt 4.0pt" class="MsoNormal"&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;; color: black; font-size: 10pt; mso-fareast-font-family: &amp;#39;Times New Roman&amp;#39;"&gt;svcutil.exe &lt;/span&gt;&lt;a href="http://mybox:5101/ProdKService.svc?wsdl"&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;; font-size: 10pt; mso-fareast-font-family: &amp;#39;Times New Roman&amp;#39;"&gt;http://mybox:5101/ProdKService.svc?wsdl&lt;/span&gt;&lt;/a&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;; color: black; font-size: 10pt; mso-fareast-font-family: &amp;#39;Times New Roman&amp;#39;"&gt;         &lt;p&gt;&lt;/p&gt;       &lt;/span&gt;&lt;/p&gt;      &lt;br /&gt;&lt;/div&gt;    &lt;p&gt;This will generate a configuration file and a code file that contains the client class. Add the two files to your client application and use the generated client class to call the Service. &lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;Note that the instructions point you to port 5101 in the service URL. That’s the port where the &lt;em&gt;Azure instance&lt;/em&gt; is running in my local development fabric. It is not as we would expect the address of the Azure dev fabric which is running on port 81. We tried to follow the instructions and point WcfTestClient to the address on the page, but instead of testing the service, we got this not so friendly error message:&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;Error: &lt;strong&gt;Cannot obtain Metadata&lt;/strong&gt; from http://mybox:5101/ProdKService.svc If this is a Windows (R) Communication Foundation service to which you have access,&lt;strong&gt; please check that you have enabled metadata publishing at the specified address&lt;/strong&gt;. For help enabling metadata publishing, please refer to the MSDN documentation at http://go.microsoft.com/fwlink/?LinkId=65455.WS-Metadata Exchange Error URI: http://mybox:5101/ProdKService.svc Metadata contains a reference that cannot be resolved: 'http://mybox:5101/ProdKService.svc'. There was no endpoint listening at http://mybox:5101/ProdKService.svc that could accept the message. This is often caused by an incorrect address or SOAP action. See InnerException, if present, for more details. The remote server returned an error: (400) Bad Request.HTTP GET Error URI: http://mybox:5101/ProdKService.svc There was an error downloading 'http://mybox:5101/ProdKService.svc'. The request failed with HTTP status 400: Bad Request.&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Now this is weird. We know that metadata publishing is enabled, because we got the instructions for the WSDL address from the metadata page in the first place.&lt;/p&gt;  &lt;p&gt;If you look at the address line in the browser when the Azure dev fabric launches, you note that the local fabric is listening on localhost port 81, not mybox port 5101. localhost is IP address 127.0.0.1, whereas mybox is bound to the IP address on my corporate network. . Is instructed, we tried to get the WSDL with &lt;a href="http://127.0.0.1:81/ProdKService.svc?wsdl"&gt;http://127.0.0.1:81/ProdKService.svc?wsdl&lt;/a&gt; and we’re getting a different error in in WcfTestClient:&lt;/p&gt;  &lt;blockquote&gt;   &lt;p class="MsoNormal"&gt;Error: &lt;strong&gt;Cannot obtain Metadata from http://mybox:5101/ProdKService.svc&lt;/strong&gt; If this is a Windows (R) Communication Foundation service to which you have access, please check that you have enabled metadata publishing at the specified address.&lt;span style="mso-spacerun: yes"&gt;&amp;#160; &lt;/span&gt;For help enabling metadata publishing, please refer to the MSDN documentation at http://go.microsoft.com/fwlink/?LinkId=65455.WS-Metadata Exchange Error&lt;span style="mso-spacerun: yes"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;URI: http://mybox:5101/ProdKService.svc&lt;span style="mso-spacerun: yes"&gt;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;#160;&lt;/span&gt;&lt;span style="background: yellow; mso-highlight: yellow"&gt;Metadata contains a reference that cannot be resolved: 'http://mybox:5101/ProdKService.svc'.&lt;span style="mso-spacerun: yes"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;Could not connect to http://mybox:5101/ProdKService.svc&lt;/span&gt;. TCP error code 10061: No connection could be made because the target machine actively refused it 127.0.0.1:5101.&lt;span style="mso-spacerun: yes"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;Unable to connect to the remote server&lt;span style="mso-spacerun: yes"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;No connection could be made because the target machine actively refused it 127.0.0.1:5101HTTP GET Error&lt;span style="mso-spacerun: yes"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;URI: http://mybox:5101/ProdKService.svc&lt;span style="mso-spacerun: yes"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;There was an error downloading 'http://mybox:5101/ProdKService.svc'.&lt;span style="mso-spacerun: yes"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;Unable to connect to the remote server&lt;span style="mso-spacerun: yes"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;No connection could be made because the target machine actively refused it 127.0.0.1:5101&lt;/p&gt; &lt;/blockquote&gt;  &lt;p class="MsoNormal"&gt;   &lt;p&gt;It took a little bit to figure this one out since the error message is so similar to the first one. The difference is only in the InnerException and you have to look at the WSDL at &lt;a href="http://mybox:5101/ProdKService.svc?wsdl"&gt;&lt;span style="font-family: &amp;#39;Courier New&amp;#39;; font-size: 10pt; mso-fareast-font-family: &amp;#39;Times New Roman&amp;#39;"&gt;http://mybox:5101/ProdKService.svc?wsdl&lt;/span&gt;&lt;/a&gt;to understand the error. &lt;/p&gt; &lt;/p&gt;  &lt;p&gt;The culprit for this error is the schemaLocation reference in the WSDL:&lt;/p&gt;  &lt;p&gt;&amp;lt;xsd:import schemaLocation=&amp;quot;&lt;b&gt;http://mybox:5101/ProdKService.svc?xsd=xsd0&lt;/b&gt;&amp;quot; namespace=&amp;quot;&lt;b&gt;http://tempuri.org/&lt;/b&gt;&amp;quot; /&amp;gt;&lt;/p&gt;  &lt;p&gt;Even though we retrieved the WSDL from the localhost address, the WSDL generator in WCF generates a reference to the other network address.&lt;/p&gt;  &lt;p&gt;Since there’s no easy way to configure the Metadata generator in WCF to switch the hostname for the schemaLocation, I added the hostname to my C:\Windows\System32\drivers\etc\hosts &lt;/p&gt;  &lt;p&gt;127.0.0.1 mybox&lt;/p&gt;  &lt;p&gt;After restarting the Azure dev fabric, WcfTestClient was able to read the MEX metadata for the service. &lt;/p&gt;  &lt;p&gt;I also tried another work-around since not everybody modifying the hosts file may not be possible (although you also need admin rights for running the dev fabric). There is still &lt;a href="http://blogs.thinktecture.com/cweyer"&gt;Christian&lt;/a&gt;’s old &lt;a href="http://blogs.thinktecture.com/cweyer/archive/2007/05/10/414840.aspx"&gt;FlatWsdl&lt;/a&gt; trick.&lt;/p&gt;  &lt;p&gt;Adding the FlatWsdl extension and configuring the ServiceHost Factory in the Services’ s .svc file got WcfTestClient to work, too.&lt;/p&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=7243336" width="1" height="1"&gt;</description><category domain="http://weblogs.asp.net/cschittko/archive/tags/.NET/default.aspx">.NET</category><category domain="http://weblogs.asp.net/cschittko/archive/tags/Visual+Studio/default.aspx">Visual Studio</category><category domain="http://weblogs.asp.net/cschittko/archive/tags/Azure/default.aspx">Azure</category><category domain="http://weblogs.asp.net/cschittko/archive/tags/WCF/default.aspx">WCF</category></item><item><title>Need Help Migrating to SQL Azure?</title><link>http://weblogs.asp.net/cschittko/archive/2009/10/20/need-help-migrating-to-sql-azure.aspx</link><pubDate>Tue, 20 Oct 2009 21:47:21 GMT</pubDate><guid isPermaLink="false">c06e2b9d-981a-45b4-a55f-ab0d8bbfdc1c:7234200</guid><dc:creator>ChristophDotNet</dc:creator><slash:comments>0</slash:comments><wfw:commentRss>http://weblogs.asp.net/cschittko/rsscomments.aspx?PostID=7234200</wfw:commentRss><wfw:comment>http://weblogs.asp.net/cschittko/commentapi.aspx?PostID=7234200</wfw:comment><comments>http://weblogs.asp.net/cschittko/archive/2009/10/20/need-help-migrating-to-sql-azure.aspx#comments</comments><description>&lt;p&gt;Migrating an existing SQL Server database to &lt;a href="http://msdn.microsoft.com/en-us/library/ee336279.aspx"&gt;SQL Azure&lt;/a&gt; is a compelling story, but it’s not a trivial task … unless you start with the SQL Azure migration wizard put together by my team mates &lt;a href="http://www.facebook.com/people/George-Huey/1551153966"&gt;George&lt;/a&gt; and &lt;a href="http://blog.wadewegner.com"&gt;Wade&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;They just updated the wizard to support &lt;a href="http://blogs.msdn.com/ssds/archive/2009/10/14/9907238.aspx"&gt;SQL Azure CTP 2&lt;/a&gt;. Details at: &lt;a href="http://blog.wadewegner.com/index.php/2009/10/15/the-sql-azure-migration-wizard-will-now-migrate-your-data/"&gt;http://blog.wadewegner.com/index.php/2009/10/15/the-sql-azure-migration-wizard-will-now-migrate-your-data/&lt;/a&gt;&lt;/p&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=7234200" width="1" height="1"&gt;</description><category domain="http://weblogs.asp.net/cschittko/archive/tags/Azure/default.aspx">Azure</category></item><item><title>WinMo App Store Questions? I got answers</title><link>http://weblogs.asp.net/cschittko/archive/2009/10/05/winmo-app-store-questions-i-got-answers.aspx</link><pubDate>Mon, 05 Oct 2009 18:09:37 GMT</pubDate><guid isPermaLink="false">c06e2b9d-981a-45b4-a55f-ab0d8bbfdc1c:7223731</guid><dc:creator>ChristophDotNet</dc:creator><slash:comments>10</slash:comments><wfw:commentRss>http://weblogs.asp.net/cschittko/rsscomments.aspx?PostID=7223731</wfw:commentRss><wfw:comment>http://weblogs.asp.net/cschittko/commentapi.aspx?PostID=7223731</wfw:comment><comments>http://weblogs.asp.net/cschittko/archive/2009/10/05/winmo-app-store-questions-i-got-answers.aspx#comments</comments><description>&lt;p&gt;The Windows Mobile app store is about to launch. The team launched a number of videos on the &lt;a href="http://www.youtube.com/user/WindowsMobileDev"&gt;Windows Mobile Dev Channel on YouTube&lt;/a&gt; to walk you through the submission process for your application, but as I’m working with the team over at &lt;a href="http://www.tripcase.com"&gt;TripCase&lt;/a&gt;, we had a few more questions that we got answered over the past weeks. I thought they worth sharing:&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Q: My app runs on Windows Phone Standard (i.e. SmartPhone, SP, no-touch) and Windows Phone Professional (Pocket PC, PPC, with touch screen). The application is packaged in a single cab file. The AppStore submission UI doesn’t let me select both platforms. How do I make sure I reach both groups of users&lt;/p&gt;  &lt;p&gt;A: Submit the app twice. Once for Standard, once for Professional. You can submit with the same name.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Q: I want to make an update to my application to fix a bug or a spelling error, change the description, etc. What do I do?&lt;/p&gt;  &lt;p&gt;A: Fix your cab, don’t change the version number of the application. Re-submit – it’s free.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Q: I’m getting an error: Unable to enable shim engine on device when running the AppVerifier. Help! How do I fix this?&lt;/p&gt;  &lt;p&gt;A: Most commonly, the &lt;a href="http://www.microsoft.com/downloads/details.aspx?FamilyId=40B7CEDB-DC8B-4503-8DC9-E75F8E8496C1&amp;amp;displaylang=en"&gt;Windows CE 5.0 Test Kit&lt;/a&gt; is missing on your machine or you haven’t replaced the libraries as outlined in the release docs. &lt;b&gt;Replace the Application verifier binaries in the processor folder for the device type. For example, replace C:\Program Files\Windows CE platform builder\5.00\CEPB\wcetk\DDTK\ARMV4I with C:\Program Files\Application Verifier for Mobile 5.0\Armv4i.      &lt;br /&gt;&lt;/b&gt;&lt;/p&gt;  &lt;p&gt;If you’re testing with retail devices, then you also need to sign Privileged Certificate. Make sure your app meets the &lt;a href="http://blogs.msdn.com/windowsmobile/articles/248967.aspx"&gt;requirements&lt;/a&gt; for the cert.&lt;/p&gt;  &lt;p&gt;&lt;b&gt;     &lt;br /&gt;&lt;/b&gt;Steve has more &lt;a href="http://blogs.msdn.com/hegenderfer/archive/2009/08/24/application-verifier-tip-enableshimengine.aspx"&gt;details&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Q: Do my customers need to install .NET CF Versions that my application needs?&lt;/p&gt;  &lt;p&gt;A: No. The Marketplace client takes care of installing the required version of the Compact Framework.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Q: I want to distribute my application through other channels than the Windows Mobile Marketplace. Can I distribute the certified and signed cab from Marketplace?&lt;/p&gt;  &lt;p&gt;A: No: You need to sign the &lt;a href="http://msdn.microsoft.com/en-us/windowsmobile/dd569931.aspx"&gt;cab with your own certificate&lt;/a&gt;. Applications signed with the Marketplace certificate can only be distributed from Marketplace.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Looking forward lots of cool WinMo apps on Marketplace.&lt;/p&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=7223731" width="1" height="1"&gt;</description><category domain="http://weblogs.asp.net/cschittko/archive/tags/Windows+Mobile/default.aspx">Windows Mobile</category></item><item><title>Win7 Multi-touch. Why wait until WPF4?</title><link>http://weblogs.asp.net/cschittko/archive/2009/09/23/win7-multi-touch-why-wait-until-wpf4.aspx</link><pubDate>Wed, 23 Sep 2009 13:30:23 GMT</pubDate><guid isPermaLink="false">c06e2b9d-981a-45b4-a55f-ab0d8bbfdc1c:7214865</guid><dc:creator>ChristophDotNet</dc:creator><slash:comments>0</slash:comments><wfw:commentRss>http://weblogs.asp.net/cschittko/rsscomments.aspx?PostID=7214865</wfw:commentRss><wfw:comment>http://weblogs.asp.net/cschittko/commentapi.aspx?PostID=7214865</wfw:comment><comments>http://weblogs.asp.net/cschittko/archive/2009/09/23/win7-multi-touch-why-wait-until-wpf4.aspx#comments</comments><description>&lt;p&gt;WPF 4 is going to fully integrate Win 7’s multi-touch capabilities. with Windows 7 being RTM, you don’t have to wait for WPF 4 to be released for developing multi-touch demos. You can get started today with the &lt;a href="http://msdn.microsoft.com/en-us/library/dd562197(VS.85).aspx"&gt;native Win7 APIs&lt;/a&gt;, or with the &lt;a href="http://code.msdn.microsoft.com/WindowsTouch"&gt;WindowsTouch&lt;/a&gt; library for .NET 3.5SP1. The .NET library is much easier to work with since the native APIs are rather low level and based on the existing tablet APIs.&lt;/p&gt;  &lt;p&gt;Check out the link to the Win 7 .NET Interop Sample or the Channel9 video: &lt;a href="http://channel9.msdn.com/shows/Continuum/MultitouchLibraryWin7/"&gt;http://channel9.msdn.com/shows/Continuum/MultitouchLibraryWin7/&lt;/a&gt;.&amp;#160; &lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/socaldevgal"&gt;Lynn&lt;/a&gt;’s blog post discusses the question on multi-touch with .NET 3.5 or 4.0: &lt;a href="http://blogs.msdn.com/socaldevgal/archive/2009/06/15/socaldevgal-wishes-to-decide-net-3-5-or-net-4-0-for-windows-7-multi-touch-application-development.aspx"&gt;http://blogs.msdn.com/socaldevgal/archive/2009/06/15/socaldevgal-wishes-to-decide-net-3-5-or-net-4-0-for-windows-7-multi-touch-application-development.aspx&lt;/a&gt;. It’s got more useful links to multi-touch development on Win7 resources as well.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;At least until WPF4 ships, there is a viable option to build production apps with multi-touch. There are some differences how WindowsTouch and WPF4 implement things, and you’re probably encountering a little bit of re-work, but both options are based on WPF and most of your UI and you code-behind should stay the same and you learn the &lt;a href="http://msdn.microsoft.com/en-us/library/cc872774.aspx"&gt;UI Design Guidelines for Touch&lt;/a&gt; right away.&lt;/p&gt;  &lt;p&gt;Enjoy.&lt;/p&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=7214865" width="1" height="1"&gt;</description><category domain="http://weblogs.asp.net/cschittko/archive/tags/Tablet+PC/default.aspx">Tablet PC</category><category domain="http://weblogs.asp.net/cschittko/archive/tags/WPF/default.aspx">WPF</category><category domain="http://weblogs.asp.net/cschittko/archive/tags/Windows+7/default.aspx">Windows 7</category></item><item><title>Seadragon Mobile for the iPhone</title><link>http://weblogs.asp.net/cschittko/archive/2008/12/14/seadragon-mobile-for-the-iphone.aspx</link><pubDate>Sun, 14 Dec 2008 18:46:25 GMT</pubDate><guid isPermaLink="false">c06e2b9d-981a-45b4-a55f-ab0d8bbfdc1c:6784557</guid><dc:creator>ChristophDotNet</dc:creator><slash:comments>0</slash:comments><wfw:commentRss>http://weblogs.asp.net/cschittko/rsscomments.aspx?PostID=6784557</wfw:commentRss><wfw:comment>http://weblogs.asp.net/cschittko/commentapi.aspx?PostID=6784557</wfw:comment><comments>http://weblogs.asp.net/cschittko/archive/2008/12/14/seadragon-mobile-for-the-iphone.aspx#comments</comments><description>&lt;p&gt;The iPhone always reminds me of &lt;a href="http://www.moviesoundclips.net/movies1/findingnemo/pledge.mp3"&gt;Finding Nemo (iPhones, they think they’re so cute. Oh, look at me, I’m a flicky little iPhone, let me flick for you. )&lt;/a&gt;. Yesterday, Bill Crow from &lt;a href="http://www.livelabs.com"&gt;Live Labs&lt;/a&gt; just &lt;a href="http://livelabs.com/blog/seadragon-goes-mobile/"&gt;posted&lt;/a&gt; about an app that makes the iPhone even cooler – and yes, it’s from Microsoft! That’s the coolest part of it&lt;/p&gt;  &lt;p&gt;If you have an iPhone, then check it out. DeepZoom is one of the best features in Silverlight 2 that’s behind the &lt;a href="http://www.hardrock.com/memorabilia"&gt;Hard Rock Cafe Memorabilia app&lt;/a&gt; or my &lt;a href="http://silverlight.services.live.com/invoke/71954/innovation2/iframe.html"&gt;Innovation Tips &amp;amp; Tricks “Deck”&lt;/a&gt; and now &lt;a href="http://www.itunes.com/app/seadragonmobile"&gt;SeaDragon Mobile&lt;/a&gt; is available for free on the iPhone, too&lt;/p&gt;  &lt;p&gt;And for those of you that' don’t have an iPhone and don’t run Silverlight. You can now run &lt;a href="http://livelabs.com/seadragon-ajax/"&gt;SeaDragon Ajax&lt;/a&gt;, purely browser based, without an add-on.&lt;/p&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=6784557" width="1" height="1"&gt;</description></item><item><title>Resolving Errors - Moving to Silverlight2 RTW</title><link>http://weblogs.asp.net/cschittko/archive/2008/10/12/resolving-errors-moving-to-silverlight2-rtw.aspx</link><pubDate>Sun, 12 Oct 2008 21:16:00 GMT</pubDate><guid isPermaLink="false">c06e2b9d-981a-45b4-a55f-ab0d8bbfdc1c:6675235</guid><dc:creator>ChristophDotNet</dc:creator><slash:comments>2</slash:comments><wfw:commentRss>http://weblogs.asp.net/cschittko/rsscomments.aspx?PostID=6675235</wfw:commentRss><wfw:comment>http://weblogs.asp.net/cschittko/commentapi.aspx?PostID=6675235</wfw:comment><comments>http://weblogs.asp.net/cschittko/archive/2008/10/12/resolving-errors-moving-to-silverlight2-rtw.aspx#comments</comments><description>&lt;p&gt;Following Jesse’s and &lt;a href="http://community.irritatedvowel.com/blogs/pete_browns_blog/archive/2008/09/26/Silverlight-2-RC0-_1320_-Developer_2D00_Only-RTW-Prep-Release.aspx"&gt;Pete’s&lt;/a&gt; excellent posts on porting Silverlight2 apps from Beta 2 to the final release bits I thought I add just a little more information. &lt;/p&gt;  &lt;p&gt;As I worked with one of my customers that’s featured in the launch press release through their code, I thought it would be nice to understand the error you’re getting as you port. &lt;/p&gt;  &lt;h3&gt;1. The new app type. This is a &lt;a href="http://blogs.msdn.com/webnext/archive/2008/10/09/why-don-t-beta-2-sites-work-on-rc0-question-of-the-day.aspx"&gt;well documented first step&lt;/a&gt; you need to take to see more than the “download silverlight” badge.&lt;/h3&gt;  &lt;p&gt;&lt;a href="http://weblogs.asp.net/blogs/cschittko/image_45A56D57.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://weblogs.asp.net/blogs/cschittko/image_thumb_530B805D.png" width="244" height="84" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;div&gt;The fix is easy. Change the &amp;lt;object&amp;gt; tag from&lt;/div&gt;  &lt;div&gt;&amp;#160;&lt;/div&gt;  &lt;div&gt;   &lt;div style="border-bottom-style: none; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; padding-left: 0px; width: 100%; padding-right: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;     &lt;pre style="border-bottom-style: none; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&amp;lt;&lt;span style="color: #0000ff"&gt;object&lt;/span&gt; &lt;strong&gt;data=&lt;span style="color: #006080"&gt;&amp;quot;data:application/x-silverlight,&amp;quot;&lt;/span&gt;&lt;/strong&gt; type=&lt;span style="color: #006080"&gt;&amp;quot;&lt;strong&gt;application/x-silverlight-2-b2&lt;/strong&gt;&amp;quot; …&lt;/span&gt;&amp;gt;&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;to&lt;/p&gt;

&lt;div&gt;
  &lt;div style="border-bottom-style: none; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; padding-left: 0px; width: 100%; padding-right: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;
    &lt;pre style="border-bottom-style: none; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&amp;lt;&lt;span style="color: #0000ff"&gt;object&lt;/span&gt; &lt;strong&gt;data=&lt;span style="color: #006080"&gt;&amp;quot;data:application/x-silverlight-2,&amp;quot;&lt;/span&gt; type=&lt;span style="color: #006080"&gt;&amp;quot;application/x-silverlight-2&amp;quot;&lt;/span&gt;&lt;/strong&gt; … &amp;gt;&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;h3&gt;2. Fix your references to the vsm namespace (xmlns:vsm=&amp;quot;clr-namespace:System.Windows;assembly=System.Windows&amp;quot;)&lt;/h3&gt;

&lt;p&gt;Those result in XamlParseException with error code AG_E_RUNTIME_MANAGED_UNKNOWN_ERROR. Curiously enough those exceptions occur on the LoadComponent call that’s loading and parsing Xaml from the .xap (as &lt;a href="http://www.silverlightshow.net/items/Reading-Silverlight-Embedded-XAML.aspx"&gt;explained by Shawn&lt;/a&gt;), but the exception details don’t give you much details what you need to get rid of them. For example, your code may reference the vsm namespace in the Application.Resources element in the App.xaml:&lt;/p&gt;

&lt;div&gt;
  &lt;pre style="border-bottom-style: none; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&amp;lt;vsm:Application.Resources&amp;gt;&lt;/pre&gt;
&lt;/div&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;If that’s the case,&amp;#160; the exception will occur when parsing the first child of &amp;lt;vsm:Application.Resources&amp;gt;. In my case, that was the line with the closing tag of a ContentPresenter (which has other issues (see below)). Unfortunately, that inconsistency is not caught by the Xaml validator in Visual Studio. Simply changing the Application.Resources element to:&lt;/p&gt;

&lt;div&gt;
  &lt;pre style="border-bottom-style: none; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&amp;lt;Application.Resources&amp;gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;&lt;/p&gt;

&lt;p&gt;will get rid of this exception.&lt;/p&gt;

&lt;h3&gt;3. The next class of errors is another XamlParseException with the error code: AG_E_PARSER_PROPERTY_NOT_FOUND.&lt;/h3&gt;

&lt;p&gt;The culprit is again the namespace reference to the System.Windows namespace, often referenced with the vsm prefix. Again, you will see this exception not on the element that’s actually causing the problem. In my case it was again &amp;lt;/ContentPresenter&amp;gt;.&lt;/p&gt;

&lt;p&gt;Search and Replace of vsm:Setter and vsm:Setter.Value with the “Entire Solution” option gets rid of these errors pretty quickly. While you’re at it, replace vsm:Style with Style.&lt;/p&gt;

&lt;p align="center"&gt;&lt;a href="http://weblogs.asp.net/blogs/cschittko/image_3DADCAF5.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://weblogs.asp.net/blogs/cschittko/image_thumb_236D61D1.png" width="264" height="426" /&gt;&lt;/a&gt; &lt;/p&gt;

&lt;h3&gt;4. ScrollViewer and other ContentControl derived classes no longer have Text* properties. &lt;/h3&gt;

&lt;p&gt;You’ll get validation errors when the parameters are set explicitly in code, but you get a XamlParseException: Invalid attribute value TextAlignment for property Property.&lt;/p&gt;

&lt;p&gt;when you define a Style that would set TextAlignment and TextWrapping properties. &lt;/p&gt;

&lt;div&gt;
  &lt;div style="border-bottom-style: none; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; padding-left: 0px; width: 100%; padding-right: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;
    &lt;pre style="border-bottom-style: none; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&amp;lt;Style x:Key=&lt;span style="color: #006080"&gt;&amp;quot;RightScrollbarScrollerTemplate&amp;quot;&lt;/span&gt; TargetType=&lt;span style="color: #006080"&gt;&amp;quot;ScrollViewer&amp;quot;&lt;/span&gt;&amp;gt;&lt;/pre&gt;

    &lt;pre style="border-bottom-style: none; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;    &amp;lt;Setter Property=&lt;span style="color: #006080"&gt;&amp;quot;TextAlignment&amp;quot;&lt;/span&gt; Value=&lt;span style="color: #006080"&gt;&amp;quot;Left&amp;quot;&lt;/span&gt;/&amp;gt;&lt;/pre&gt;

    &lt;pre style="border-bottom-style: none; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;    &amp;lt;Setter Property=&lt;span style="color: #006080"&gt;&amp;quot;TextWrapping&amp;quot;&lt;/span&gt; Value=&lt;span style="color: #006080"&gt;&amp;quot;NoWrap&amp;quot;&lt;/span&gt;/&amp;gt;&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;&lt;/p&gt;

&lt;p&gt;Those properties were removed for compatibility with WPF. You now have to make sure that the ContentControl’s container sets Text* properties correctly – either explicitly or via &amp;lt;Style&amp;gt;&lt;/p&gt;

&lt;h3&gt;5. ContentPresenter no longer derives from Control, thus it’s missing a number of properties that could be set in code or in XAML.&lt;/h3&gt;

&lt;p&gt;Jesse &lt;a href="http://silverlight.net/blogs/jesseliberty/archive/2008/09/28/rc0-amp-contentpresenter.aspx"&gt;posted about solving these issues at length&lt;/a&gt;. The good news is that you can catch this issue at design time through Visual Studio warnings: &lt;/p&gt;

&lt;p&gt;The property 'Foreground' does not exist on the type 'ContentPresenter' in the XML namespace '&lt;a href="http://schemas.microsoft.com/winfx/2006/xaml/presentation'"&gt;http://schemas.microsoft.com/winfx/2006/xaml/presentation'&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;and at run time with XamlParseExceptions when launching the app: XamlParseException: Unknown attribute Foreground on element ContentPresenter. &lt;/p&gt;

&lt;h3&gt;6. The name of the Duration property on Visual Transition changed to GeneratedDuration.effects you’ll see are:&lt;/h3&gt;

&lt;p&gt;Compiler errors:&lt;/p&gt;

&lt;p&gt;The property 'Duration' was not found in type 'VisualTransition'.&amp;#160;&amp;#160;&amp;#160; &lt;/p&gt;

&lt;p&gt;and Validation warnings:&lt;/p&gt;

&lt;p&gt;The property 'Duration' does not exist on the type 'VisualTransition' in the XML namespace 'clr-namespace:System.Windows;assembly=System.Windows'.&amp;#160;&amp;#160;&amp;#160; &lt;/p&gt;

&lt;p&gt;Follow &lt;a href="http://silverlight.net/blogs/jesseliberty/archive/2008/09/28/rc0-amp-contentpresenter.aspx"&gt;Jesse’s instructions&lt;/a&gt; to fix it.&lt;/p&gt;

&lt;p&gt;&amp;#160;&lt;/p&gt;

&lt;p&gt;For other issues check the breaking changes documentation or start with &lt;a href="http://silverlight.net/blogs/msnow/archive/2008/09/25/silverlight-version-2-rc0-release.aspx"&gt;Mike’s post&lt;/a&gt;&lt;/p&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=6675235" width="1" height="1"&gt;</description></item><item><title>Mobile Client Software Factory on VS 2008? Sure!</title><link>http://weblogs.asp.net/cschittko/archive/2008/09/25/mobile-client-software-factory-on-vs-2008-sure.aspx</link><pubDate>Thu, 25 Sep 2008 13:21:23 GMT</pubDate><guid isPermaLink="false">c06e2b9d-981a-45b4-a55f-ab0d8bbfdc1c:6641430</guid><dc:creator>ChristophDotNet</dc:creator><slash:comments>2</slash:comments><wfw:commentRss>http://weblogs.asp.net/cschittko/rsscomments.aspx?PostID=6641430</wfw:commentRss><wfw:comment>http://weblogs.asp.net/cschittko/commentapi.aspx?PostID=6641430</wfw:comment><comments>http://weblogs.asp.net/cschittko/archive/2008/09/25/mobile-client-software-factory-on-vs-2008-sure.aspx#comments</comments><description>&lt;p&gt;One of my customers was interested in some of the cool features of the &lt;a href="http://msdn.microsoft.com/en-us/library/aa480471.aspx"&gt;Mobile Client Software Factory&lt;/a&gt;, but they wanted to develop on Visual Studio 2008. The original version from &lt;a href="http://msdn.microsoft.com/en-us/practices/default.aspx"&gt;p&amp;amp;p&lt;/a&gt; wasn’t updated to VS 2008, but &lt;a href="http://blogs.msdn.com/gblock/"&gt;Glenn Block&lt;/a&gt; has a &lt;a href="http://blogs.msdn.com/gblock/archive/2008/04/22/porting-mobile-client-software-factory-to-visual-studio-2008.aspx#8877189"&gt;post that describes how to get MSCF to run in VS 2008&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;We had some initial problems getting it to work.If you do, too, here are some things to check:&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Make sure you have v.1.4 of GAT/GAX installed: &lt;/li&gt; &lt;/ul&gt;  &lt;blockquote&gt;   &lt;p&gt;1) GAX February 2008 Release&lt;/p&gt;    &lt;p&gt;&lt;a href="http://www.microsoft.com/Downloads/details.aspx?familyid=DF79C099-4753-4A59-91E3-5020D9714E4E&amp;amp;displaylang=en"&gt;http://www.microsoft.com/Downloads/details.aspx?familyid=DF79C099-4753-4A59-91E3-5020D9714E4E&amp;amp;displaylang=en&lt;/a&gt;&lt;/p&gt;    &lt;p&gt;2) GAT &lt;b&gt;&lt;u&gt;for VS2008&lt;/u&gt;&lt;/b&gt; - February 2008 Release&lt;/p&gt;    &lt;p&gt;&lt;a href="http://www.microsoft.com/Downloads/details.aspx?familyid=B91066B3-D1D6-4990-A45F-34CF8DBDC60C&amp;amp;displaylang=en"&gt;http://www.microsoft.com/Downloads/details.aspx?familyid=B91066B3-D1D6-4990-A45F-34CF8DBDC60C&amp;amp;displaylang=en&lt;/a&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;ul&gt;   &lt;li&gt;You may need also to change the GATRegistry value to “Installer\Products\A741EEBC995A0984782CC041A01336F3”. &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;Additionally, the MSCF MSI performs checks for ActiveSync 4.5 and Windows Mobile Pocket PC 5.0 SDK.&lt;/p&gt;  &lt;p&gt;For ActiveSync on WinXP you need:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.microsoft.com/windowsmobile/en-us/downloads/eulas/eula_activesync45_1033.mspx?ProductID=76"&gt;http://www.microsoft.com/windowsmobile/en-us/downloads/eulas/eula_activesync45_1033.mspx?ProductID=76&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;On Vista you don’t have ActiveSync but you need WMDC:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.microsoft.com/downloads/details.aspx?FamilyId=46F72DF1-E46A-4A5F-A791-09F07AAA1914&amp;amp;displaylang=en"&gt;http://www.microsoft.com/downloads/details.aspx?FamilyId=46F72DF1-E46A-4A5F-A791-09F07AAA1914&amp;amp;displaylang=en&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Once you have ActiveSync or WMDC you can install WM5.0 Pocket PC SDK.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.microsoft.com/downloads/details.aspx?familyid=83A52AF2-F524-4EC5-9155-717CBE5D25ED&amp;amp;displaylang=en"&gt;http://www.microsoft.com/downloads/details.aspx?familyid=83A52AF2-F524-4EC5-9155-717CBE5D25ED&amp;amp;displaylang=en&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Also note, that if you’re after the Orientation Aware Control from the mobile composite UI block, Clarius has a &lt;a href="http://www.orientationaware.net"&gt;newer version for VS 2008&lt;/a&gt;&lt;/p&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=6641430" width="1" height="1"&gt;</description><category domain="http://weblogs.asp.net/cschittko/archive/tags/.NET/default.aspx">.NET</category><category domain="http://weblogs.asp.net/cschittko/archive/tags/Visual+Studio/default.aspx">Visual Studio</category><category domain="http://weblogs.asp.net/cschittko/archive/tags/Windows+Mobile/default.aspx">Windows Mobile</category></item><item><title>Apple ... Puhleeeeeeeeeze ...</title><link>http://weblogs.asp.net/cschittko/archive/2008/09/06/apple-puhleeeeeeeeeze.aspx</link><pubDate>Sun, 07 Sep 2008 02:36:28 GMT</pubDate><guid isPermaLink="false">c06e2b9d-981a-45b4-a55f-ab0d8bbfdc1c:6606212</guid><dc:creator>ChristophDotNet</dc:creator><slash:comments>0</slash:comments><wfw:commentRss>http://weblogs.asp.net/cschittko/rsscomments.aspx?PostID=6606212</wfw:commentRss><wfw:comment>http://weblogs.asp.net/cschittko/commentapi.aspx?PostID=6606212</wfw:comment><comments>http://weblogs.asp.net/cschittko/archive/2008/09/06/apple-puhleeeeeeeeeze.aspx#comments</comments><description>&lt;p&gt;Apple is the new Microsoft? Right ... they sneak Safari and MobileMe onto my system - without me asking. That's the kind of stuff Microsoft got in trouble for back in the mid 90s. Isn't it?&lt;/p&gt; &lt;p&gt;Now they are fast approaching being the new Netscape:&lt;/p&gt; &lt;p&gt;&lt;a href="http://weblogs.asp.net/blogs/cschittko/WindowsLiveWriter/Apple...Puhleeeeeeeeeze_12D81/image_2.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; border-top: 0px; border-right: 0px" border="0" alt="image" src="http://weblogs.asp.net/blogs/cschittko/WindowsLiveWriter/Apple...Puhleeeeeeeeeze_12D81/image_thumb.png" width="302" height="389"&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;C'mon, can't you guys write software that doesn't crash when I don't want to install your products? (but hey, at least you asked me this time).&lt;/p&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=6606212" width="1" height="1"&gt;</description></item><item><title>Presentation Canvas - Not Your Average PowerPoint</title><link>http://weblogs.asp.net/cschittko/archive/2008/08/15/presentation-canvas-not-your-average-powerpoint.aspx</link><pubDate>Fri, 15 Aug 2008 23:55:20 GMT</pubDate><guid isPermaLink="false">c06e2b9d-981a-45b4-a55f-ab0d8bbfdc1c:6524681</guid><dc:creator>ChristophDotNet</dc:creator><slash:comments>0</slash:comments><wfw:commentRss>http://weblogs.asp.net/cschittko/rsscomments.aspx?PostID=6524681</wfw:commentRss><wfw:comment>http://weblogs.asp.net/cschittko/commentapi.aspx?PostID=6524681</wfw:comment><comments>http://weblogs.asp.net/cschittko/archive/2008/08/15/presentation-canvas-not-your-average-powerpoint.aspx#comments</comments><description>The linear style forced by PowerPoint and the metaphor of a slide may have reached their limits. At least support for other styles is on its way ... of course also from the Office team. The innovation team in &lt;a href="http://www.officelabs.com"&gt;Office Labs&lt;/a&gt; to be exact.  &lt;p&gt;If you've seen my &lt;a href="http://weblogs.asp.net/cschittko/archive/2008/08/07/innovation-explore-the-interactive-deck-from-teched-2008.aspx"&gt;&amp;quot;interactive deck&amp;quot; from TechEd&lt;/a&gt; or the some recent Bill Gates demos then or the cool TouchWall demo for example, both showed the concept of a single canvas that you explore during a presentation instead of flipping from one slide to the next.&lt;/p&gt;  &lt;p&gt;The concept is very cool and promising, especially when you want to keep around all the information you collect as you build up a presentation. I tend to collect quotes, images, web pages, screenshots, all sorts of stuff that may or may not make it into the presentation. I have tons of OneNote books just filled information I collected for presentations. &lt;/p&gt;  &lt;p&gt;Of course, there's always this one guy in the audience that asks questions about things I didn't include in the deck.&lt;/p&gt;  &lt;p&gt;With the new tool from Office Labs, &lt;a href="http://www.officelabs.com/projects/pptPlex/Pages/default.aspx"&gt;pptPlex&lt;/a&gt; you get a PowerPoint add-in to build these single canvas presentations in PowerPoint. &lt;/p&gt;  &lt;p&gt;&lt;a href="http://weblogs.asp.net/blogs/cschittko/WindowsLiveWriter/PresentationCanvasNotYourAveragePowerPoi_10A37/image_2.png"&gt;&lt;img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="102" alt="image" src="http://weblogs.asp.net/blogs/cschittko/WindowsLiveWriter/PresentationCanvasNotYourAveragePowerPoi_10A37/image_thumb.png" width="493" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;It's way easier to use than my rather manual process for my DeepZoom app, which is build the image with DeepZoom&amp;#160; composer, then add various types of hotspots with a little Silverlight app.&lt;/p&gt;  &lt;p&gt;Have fun with the app.&lt;/p&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=6524681" width="1" height="1"&gt;</description><category domain="http://weblogs.asp.net/cschittko/archive/tags/Silverlight/default.aspx">Silverlight</category><category domain="http://weblogs.asp.net/cschittko/archive/tags/VSTO/default.aspx">VSTO</category><category domain="http://weblogs.asp.net/cschittko/archive/tags/Innovation/default.aspx">Innovation</category></item><item><title>Innovation - Explore the Interactive Deck from TechEd 2008</title><link>http://weblogs.asp.net/cschittko/archive/2008/08/07/innovation-explore-the-interactive-deck-from-teched-2008.aspx</link><pubDate>Thu, 07 Aug 2008 14:45:45 GMT</pubDate><guid isPermaLink="false">c06e2b9d-981a-45b4-a55f-ab0d8bbfdc1c:6494931</guid><dc:creator>ChristophDotNet</dc:creator><slash:comments>1</slash:comments><wfw:commentRss>http://weblogs.asp.net/cschittko/rsscomments.aspx?PostID=6494931</wfw:commentRss><wfw:comment>http://weblogs.asp.net/cschittko/commentapi.aspx?PostID=6494931</wfw:comment><comments>http://weblogs.asp.net/cschittko/archive/2008/08/07/innovation-explore-the-interactive-deck-from-teched-2008.aspx#comments</comments><description>&lt;p&gt;As promised at my TechEd 2008 chalk talk &lt;strong&gt;Innovation 101: Tips &amp;amp; Tricks for Architects &amp;amp; Developers to Drive Innovation&lt;/strong&gt;, here's a slightly evolved version of my interactive deck. I had thought that a talk on innovation should innovate on the presentation tools and technique and here's what came out.&lt;/p&gt; &lt;p&gt;&lt;a href="http://silverlight.services.live.com/invoke/71954/innovation2/iframe.html"&gt;&lt;img style="border-right-width: 0px; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" border="0" alt="image" src="http://weblogs.asp.net/blogs/cschittko/WindowsLiveWriter/ab32d3000d70_FCB9/image_3.png" width="856" height="299"&gt;&lt;/a&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;Click on the image to launch the application and start exploring the presentation canvas by panning downward &lt;a href="http://labs.live.com/Silverlight+2+Deep+Zoom.aspx"&gt;DeepZoom&lt;/a&gt; style.&lt;/p&gt; &lt;p&gt;You can jump between chapters with the '+' and '-' keys on the number pad. The chapters in this deck are:&lt;/p&gt; &lt;ol&gt; &lt;li&gt;Title Slide  &lt;li&gt;Why Innovation Matters and how to get started  &lt;li&gt;Processes, Styles and Ingredients of Successful Innovation  &lt;li&gt;Fail-Fast Pilot &amp;amp; Pitch  &lt;li&gt;Tools (Software and Motivational)  &lt;li&gt;Case Study: Microsoft's &lt;a href="http://www.realinnovation.com/commentary/archive/microsoft_national_innovation_forum_part_iii_innovation_practices.html"&gt;IdeAgency&lt;/a&gt;&amp;nbsp; &lt;li&gt;Case Study: Dell's &lt;a href="http://www.ideastorm.com/"&gt;IdeaStorm&lt;/a&gt;  &lt;li&gt;Myths and Gotchas  &lt;li&gt;Go and Innovate&lt;/li&gt;&lt;/ol&gt; &lt;p&gt;Additional Navigation Aids are:&lt;/p&gt; &lt;ul&gt; &lt;li&gt;&amp;lt;Home&amp;gt; - Zoom Out to show the entire canvas  &lt;li&gt;&amp;lt;Backspace&amp;gt; - Previous zoom level  &lt;li&gt;&amp;lt;Arrow Keys&amp;gt; - pan around the canvas  &lt;li&gt;&amp;lt;Mouse Wheel&amp;gt; - DeepZoom in and out&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;The idea for this presentation was borrowed from the Office Live team. They are they guys behind the &lt;a href="http://on10.net/blogs/sarahintampa/Bill-Gates-Demos-TouchWall-Like-Surface-for-the-Office/"&gt;TouchWall&lt;/a&gt; demo Bill Gates gave earlier this year and the &lt;a href="http://news.cnet.com/8301-10784_3-9950674-7.html"&gt;LaserTouch&lt;/a&gt; shown at the &lt;a href="http://news.cnet.com/8301-10784_3-9950631-7.html?tag=mncol;txt"&gt;Microsoft Research Roadshow&lt;/a&gt;. They just didn't have anything ready for me to show this summer. Fortunately, I still had some Silverlight DeepZoom code for a navigation hotspot framework laying around that I had written for a proof-of-concept earlier this year, which allowed me to pretty quickly build my own presentation app and a tool that helps with authoring the hotspots. Next time, I'll take more advantage of the framework's features with video, nested DeepZoom and others.&lt;/p&gt; &lt;p&gt;I hope you enjoy exploring the presentation adn please drop me a note if you're interested in the further conversations.&lt;/p&gt; &lt;p&gt;Much Thanks to Randy and the IdeAgency, Office Labs, &lt;a href="http://blogs.msdn.com/asehmi"&gt;Arvindra&lt;/a&gt; for being brave enough to present with the tool already, &lt;a href="http://blogs.msdn.com/benwilli/"&gt;Ben Williams&lt;/a&gt; for his help with &lt;a href="http://silverlight.live.com/"&gt;Silverlight Streaming&lt;/a&gt; to host the &lt;a href="http://silverlight.services.live.com/invoke/71954/innovation2/iframe.html"&gt;app&lt;/a&gt;.&lt;/p&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=6494931" width="1" height="1"&gt;</description><category domain="http://weblogs.asp.net/cschittko/archive/tags/Silverlight/default.aspx">Silverlight</category><category domain="http://weblogs.asp.net/cschittko/archive/tags/Innovation/default.aspx">Innovation</category></item></channel></rss>

