<?xml version="1.0" encoding="utf-8"?>
<rss xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:pingback="http://madskills.com/public/xml/rss/module/pingback/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:dc="http://purl.org/dc/elements/1.1/" version="2.0">
  <channel>
    <title>Thoughts on Software Development</title>
    <link>http://www.reliablesoftware.com/DasBlog/</link>
    <description>"Publication - is the Auction Of the Mind of Man" Emily Dickinson</description>
    <language>en-us</language>
    <copyright>Reliable Software, Inc.</copyright>
    <lastBuildDate>Wed, 25 Jul 2012 23:25:02 GMT</lastBuildDate>
    <generator>newtelligence dasBlog 1.8.5223.1</generator>
    <managingEditor>weblogcomments@reliablesoftware.com</managingEditor>
    <webMaster>weblogcomments@reliablesoftware.com</webMaster>
    <item>
      <trackback:ping>http://www.reliablesoftware.com/DasBlog/Trackback.aspx?guid=20798af1-6bf6-4c98-9a7a-eb103dc87efb</trackback:ping>
      <pingback:server>http://www.reliablesoftware.com/DasBlog/pingback.aspx</pingback:server>
      <pingback:target>http://www.reliablesoftware.com/DasBlog/PermaLink,guid,20798af1-6bf6-4c98-9a7a-eb103dc87efb.aspx</pingback:target>
      <dc:creator>weblogcomments@reliablesoftware.com (Michael Stiefel)</dc:creator>
      <wfw:commentRss>http://www.reliablesoftware.com/DasBlog/SyndicationService.asmx/GetEntryCommentsRss?guid=20798af1-6bf6-4c98-9a7a-eb103dc87efb</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <font size="3" face="Arial" />
        <p>
      In order to build robust cloud applications, a client that calls a service has to
      handle four scenarios: 
   </p>
        <br />
   Complete Success 
   <br />
   Partial Success (Success with conditions) 
   <br />
   Transient Failure 
   <br />
   Resource Failure 
   <p>
      A partial success occurs when a service only accomplishes part of a requested task.
      This might be a query where you ask for the last 100 transactions, and only the last
      50 are returned. Or the service only creates an order entry, but does not submit the
      order. Usually a reason is supplied with the partial success. Based on that reason
      the client has to decide what to do next. 
   </p><p>
      Transient failures occur when some resource (like a network connection) is temporarily
      unavailable. You might see this as a timeout, or some sort of error information indicating
      what occurred. <a href="http://www.reliablesoftware.com/DasBlog/PermaLink,guid,16eada5e-7b4d-4ec2-8e1b-a13b6d0da962.aspx"> As
      discussed in a previous post</a> , continually retrying to connect to a transient
      resource impedes scalability because resources a being held on to while the retries
      are occurring. Better to retry a few times and if you cannot access the resource,
      treat it as a complete failure. 
   </p><p>
      With failure, you might try another strategy before you treat the resource access
      as a failure. You might relax some conditions, and then achieve partial success. You
      might access another resource that might be able to accomplish the same task (say
      obtain a credit rating) albeit at greater cost. In any case all failures should be
      reported to the client. You can summarize this responsibility in this diagram: 
   </p><img border="0" src="http://www.reliablesoftware.com/DasBlog/content/binary/ClientFailureDiagram.bmp" /><p><a href="http://blog.codingoutloud.com/bio)"> Bill Wilder</a> helped me formulate
      these thoughts. 
   </p><img width="0" height="0" src="http://www.reliablesoftware.com/DasBlog/aggbug.ashx?id=20798af1-6bf6-4c98-9a7a-eb103dc87efb" /></body>
      <title>Client Side Failure Handling</title>
      <guid>http://www.reliablesoftware.com/DasBlog/PermaLink,guid,20798af1-6bf6-4c98-9a7a-eb103dc87efb.aspx</guid>
      <link>http://www.reliablesoftware.com/DasBlog/PermaLink,guid,20798af1-6bf6-4c98-9a7a-eb103dc87efb.aspx</link>
      <pubDate>Wed, 25 Jul 2012 23:25:02 GMT</pubDate>
      <description>&lt;font size="3" face="Arial" /&gt; 
&lt;p&gt;
   In order to build robust cloud applications, a client that calls a service has to
   handle four scenarios: 
&lt;/p&gt;
&lt;br&gt;
Complete Success 
&lt;br&gt;
Partial Success (Success with conditions) 
&lt;br&gt;
Transient Failure 
&lt;br&gt;
Resource Failure 
&lt;p&gt;
   A partial success occurs when a service only accomplishes part of a requested task.
   This might be a query where you ask for the last 100 transactions, and only the last
   50 are returned. Or the service only creates an order entry, but does not submit the
   order. Usually a reason is supplied with the partial success. Based on that reason
   the client has to decide what to do next. 
&lt;/p&gt;
&lt;p&gt;
   Transient failures occur when some resource (like a network connection) is temporarily
   unavailable. You might see this as a timeout, or some sort of error information indicating
   what occurred. &lt;a href="http://www.reliablesoftware.com/DasBlog/PermaLink,guid,16eada5e-7b4d-4ec2-8e1b-a13b6d0da962.aspx"&gt; As
   discussed in a previous post&lt;/a&gt; , continually retrying to connect to a transient
   resource impedes scalability because resources a being held on to while the retries
   are occurring. Better to retry a few times and if you cannot access the resource,
   treat it as a complete failure. 
&lt;/p&gt;
&lt;p&gt;
   With failure, you might try another strategy before you treat the resource access
   as a failure. You might relax some conditions, and then achieve partial success. You
   might access another resource that might be able to accomplish the same task (say
   obtain a credit rating) albeit at greater cost. In any case all failures should be
   reported to the client. You can summarize this responsibility in this diagram: 
&lt;/p&gt;
&lt;img border="0" src="http://www.reliablesoftware.com/DasBlog/content/binary/ClientFailureDiagram.bmp"&gt; 
&lt;p&gt;
   &lt;a href="http://blog.codingoutloud.com/bio)"&gt; Bill Wilder&lt;/a&gt; helped me formulate
   these thoughts. 
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.reliablesoftware.com/DasBlog/aggbug.ashx?id=20798af1-6bf6-4c98-9a7a-eb103dc87efb" /&gt;</description>
      <comments>http://www.reliablesoftware.com/DasBlog/CommentView,guid,20798af1-6bf6-4c98-9a7a-eb103dc87efb.aspx</comments>
      <category>All;Cloud Computing;Microsoft .NET;SOA;Software Development</category>
    </item>
    <item>
      <trackback:ping>http://www.reliablesoftware.com/DasBlog/Trackback.aspx?guid=55dcee5a-c7f1-46c5-a183-f0a40d3fbb50</trackback:ping>
      <pingback:server>http://www.reliablesoftware.com/DasBlog/pingback.aspx</pingback:server>
      <pingback:target>http://www.reliablesoftware.com/DasBlog/PermaLink,guid,55dcee5a-c7f1-46c5-a183-f0a40d3fbb50.aspx</pingback:target>
      <dc:creator>weblogcomments@reliablesoftware.com (Michael Stiefel)</dc:creator>
      <wfw:commentRss>http://www.reliablesoftware.com/DasBlog/SyndicationService.asmx/GetEntryCommentsRss?guid=55dcee5a-c7f1-46c5-a183-f0a40d3fbb50</wfw:commentRss>
      <slash:comments>1</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <font size="3" face="Arial"> InformIt has
   published my article on <a href="http://www.informit.com/articles/article.aspx?p=1747366" target="_blank">Azure
   Diagnostics</a>. I explain how to use Azure diagnostics to audit, log, and monitor
   the health of your applications.<br /><img width="0" height="0" src="http://www.reliablesoftware.com/DasBlog/aggbug.ashx?id=55dcee5a-c7f1-46c5-a183-f0a40d3fbb50" /></font>
      </body>
      <title>Article on Azure Diagnostics Published</title>
      <guid>http://www.reliablesoftware.com/DasBlog/PermaLink,guid,55dcee5a-c7f1-46c5-a183-f0a40d3fbb50.aspx</guid>
      <link>http://www.reliablesoftware.com/DasBlog/PermaLink,guid,55dcee5a-c7f1-46c5-a183-f0a40d3fbb50.aspx</link>
      <pubDate>Thu, 27 Oct 2011 19:54:23 GMT</pubDate>
      <description>&lt;font size="3" face="Arial"&gt; InformIt has published my article on &lt;a href="http://www.informit.com/articles/article.aspx?p=1747366" target=_blank&gt;Azure
Diagnostics&lt;/a&gt;. I explain how to use Azure diagnostics to audit, log, and monitor
the health of your applications.&lt;br&gt;
&lt;img width="0" height="0" src="http://www.reliablesoftware.com/DasBlog/aggbug.ashx?id=55dcee5a-c7f1-46c5-a183-f0a40d3fbb50" /&gt;</description>
      <comments>http://www.reliablesoftware.com/DasBlog/CommentView,guid,55dcee5a-c7f1-46c5-a183-f0a40d3fbb50.aspx</comments>
      <category>Cloud Computing;Microsoft .NET;Software Development</category>
    </item>
    <item>
      <trackback:ping>http://www.reliablesoftware.com/DasBlog/Trackback.aspx?guid=064cde07-c5fd-402a-ac86-adb338f50e81</trackback:ping>
      <pingback:server>http://www.reliablesoftware.com/DasBlog/pingback.aspx</pingback:server>
      <pingback:target>http://www.reliablesoftware.com/DasBlog/PermaLink,guid,064cde07-c5fd-402a-ac86-adb338f50e81.aspx</pingback:target>
      <dc:creator>weblogcomments@reliablesoftware.com (Michael Stiefel)</dc:creator>
      <wfw:commentRss>http://www.reliablesoftware.com/DasBlog/SyndicationService.asmx/GetEntryCommentsRss?guid=064cde07-c5fd-402a-ac86-adb338f50e81</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <font size="3" face="Arial">
          <p>
      Windows Azure provides two storage mechanisms: SQL Azure and Azure Storage tables.
      Which one should you use? 
   </p>
          <p>
          </p>
          <h2>
      Can Relational Databases Scale? 
   </h2>
          <p>
      SQL Azure is basically SQL Server in the cloud. To get meaningful results from a query,
      you need a consistent set of data. 
   </p>
          <p>
      Transactions allow for data to be inserted according to the ACID principle: all related
      information is changed together. The longer the database lock manager keeps locks,
      the higher the likelihood two transactions will modify the same data. As transactions
      wait for locks to clear, transactions will either be slower to complete, or transactions
      will time out and must be abandoned or retried. Data availability decreases. 
   </p>
          <p>
      Content distribution networks enable read-only data to be delivered quickly to overcome
      the speed of light boundary. They are useless for modifiable data. The laws of physics
      drive a set of diminishing economic returns on bandwidth. You can only move so much
      data so fast. 
   </p>
          <p>
      Jim Gray pointed out years ago that computational power gets cheaper faster than network
      bandwidth. It makes more economic sense to compute where the data is rather than moving
      it to a computing center. Data is often naturally distributed. Is connectivity to
      that data always possible? Some people believe that connectivity will be always available.
      Cell phone connectivity problems, data center outages, equipment upgrades, and last
      mile problems indicate that is never going to happen. 
   </p>
          <p>
      Computing in multiple places leads to increased latency. Latency means longer lock
      retention. Increased locked retention means decreased availability. 
   </p>
          <p>
      Most people think of scaling in terms of large number of users: Amazon, Facebook,
      or Google. Latency also leads to scalability based on geographic distribution of users,
      transmission of a large quantity of data, or any bottleneck that lengthens the time
      of a database transaction. 
   </p>
          <p>
      The economics of distributed computing argue in favor of many small machines, rather
      than one large machine. Google does not handle its search system with one large machine,
      but many commodity processors. If you have one large database, scaling up to a new
      machine can cost hours or days. 
   </p>
          <h2>
      The CAP Theorem 
   </h2>
          <p>
      Eric Brewer’s CAP Theorem summarizes the discussion. Given the constraints of consistency,
      availability, and partitioning, you can only have two of the three. We are comfortable
      with the world of single database/database cluster with minimal latency where we have
      consistency and availability. 
   </p>
          <h2>
      Partitioning Data 
   </h2>
          <p>
      If we are forced to partition our data should we give up on availability or consistency?
      Let us first look at the best way to partition, and then ask whether we want consistency
      or availability. What is the best way to partition? 
   </p>
          <p>
      If economics, the laws of physics, and current technology limits argue in favor of
      partitioning, what is the best way to partition? Distributed objects, whether by DCOM,
      CORBA, or RMI failed for many reasons . The RPC model increases latencies that inhibit
      scalability. You cannot ignore the existence of the network. Distributed transactions
      fail as well because once you get beyond a local network the latencies with two-phase
      commit impede scalability. Two better alternatives exist: a key value/type store such
      as Azure Storage Services, or partitioning data across relational databases without
      distributed transactions. 
   </p>
          <p>
      Storage Services allow multiple partitions of tables with entries. Only CRUD operations
      exist: no foreign key relations, no joins, no constraints, and no schemas. Consistency
      must be handled programmatically. This model works well with tens of hundreds of commoity
      processors, and can achieve massive scalability. One can partition SQL Azure horizontally
      or vertically. With horizontal partitioning we divide table rows across the database.
      With vertical partitioning we divide table columns across databases. Within the databases
      you have transactional consistency, but there are no transactions across databases. 
   </p>
          <p>
      Horizontal partitioning works especially well when the data divides naturally: company
      subsidiaries that are geographically separate, historical analysis, or of different
      functional areas such as user feedback and active orders. Vertical partitioning works
      well when updates and queries use different pieces of data. In all these cases we
      have to deal with data that might be stale or inconsistent. 
   </p>
          <h2>
      Consistency or Availability? 
   </h2>
          <p>
      Ask a simple question: What is the cost of an apology? The number of available books
      in Amazon is a cached value, not guaranteed to be correct. If Amazon ran a distributed
      transaction over all your shopping cart orders, the book inventory system, and the
      shipping system, they could never build a massively scalable front end user interface.
      Transactions would be dependent on user interactions that could range from 5 seconds
      to hours, assuming the shopping cart is not abandoned. It is impractical to keep database
      locks that long. Since most of the time you get your book, availability is a better
      choice that consistency. 
   </p>
          <p>
      Airline reservation systems are similar. A database used for read-only flight shopping
      is updated periodically. Another database is for reservations. Occasionally, you cannot
      get the price or flight you wanted. Using one database to achieve consistency would
      make searching for fares. or making reservations take forever. 
   </p>
          <p>
      Both cases have an ultimate source of truth: the inventory database, or the reservations
      database. Businesses have to be prepared to apologize anyway. Checks bounce, the last
      book in the inventory turns out to be defective, or the vendor drops the last crystal
      vase. We often have to make records and reality consistent. 
   </p>
          <h2>
      Software State is not the State of the World 
   </h2>
          <p>
      We have fostered a myth that the state of the software has to be always identical
      to the state of the world. This often makes software applications difficult to use,
      or impossible to write. Deciding what the cost of getting it absolutely right is a
      business decision. As Amazon and the airlines illustrate, the cost of lost business
      and convenience sometimes offsets the occasional problems of inconsistent data. You
      must then design for eventual consistency. 
   </p>
          <h2>
      Summary 
   </h2>
          <p>
      Scalability is based on the constraints of your application, the volume of data transmitted,
      or the number and geographic distribution of your users. 
   </p>
          <p>
      Need absolute consistency? Use the relational model. Need high availability? Use Azure
      tables, or the partitioned relational model. Availability is a subjective measure.
      You might partition and still get consistency. If the nature of your world changes,
      however, it is not easy to shift from the relational model to a partitioned model. 
   </p>
          <img width="0" height="0" src="http://www.reliablesoftware.com/DasBlog/aggbug.ashx?id=064cde07-c5fd-402a-ac86-adb338f50e81" />
        </font>
      </body>
      <title>SQL Azure or Azure Storage Tables?</title>
      <guid>http://www.reliablesoftware.com/DasBlog/PermaLink,guid,064cde07-c5fd-402a-ac86-adb338f50e81.aspx</guid>
      <link>http://www.reliablesoftware.com/DasBlog/PermaLink,guid,064cde07-c5fd-402a-ac86-adb338f50e81.aspx</link>
      <pubDate>Wed, 15 Dec 2010 00:23:32 GMT</pubDate>
      <description>&lt;font size="3" face="Arial"&gt; 
&lt;p&gt;
   Windows Azure provides two storage mechanisms: SQL Azure and Azure Storage tables.
   Which one should you use? 
&lt;p&gt;
&lt;h2&gt;
   Can Relational Databases Scale? 
&lt;/h2&gt;
&lt;p&gt;
   SQL Azure is basically SQL Server in the cloud. To get meaningful results from a query,
   you need a consistent set of data. 
&lt;/p&gt;
&lt;p&gt;
   Transactions allow for data to be inserted according to the ACID principle: all related
   information is changed together. The longer the database lock manager keeps locks,
   the higher the likelihood two transactions will modify the same data. As transactions
   wait for locks to clear, transactions will either be slower to complete, or transactions
   will time out and must be abandoned or retried. Data availability decreases. 
&lt;/p&gt;
&lt;p&gt;
   Content distribution networks enable read-only data to be delivered quickly to overcome
   the speed of light boundary. They are useless for modifiable data. The laws of physics
   drive a set of diminishing economic returns on bandwidth. You can only move so much
   data so fast. 
&lt;/p&gt;
&lt;p&gt;
   Jim Gray pointed out years ago that computational power gets cheaper faster than network
   bandwidth. It makes more economic sense to compute where the data is rather than moving
   it to a computing center. Data is often naturally distributed. Is connectivity to
   that data always possible? Some people believe that connectivity will be always available.
   Cell phone connectivity problems, data center outages, equipment upgrades, and last
   mile problems indicate that is never going to happen. 
&lt;/p&gt;
&lt;p&gt;
   Computing in multiple places leads to increased latency. Latency means longer lock
   retention. Increased locked retention means decreased availability. 
&lt;/p&gt;
&lt;p&gt;
   Most people think of scaling in terms of large number of users: Amazon, Facebook,
   or Google. Latency also leads to scalability based on geographic distribution of users,
   transmission of a large quantity of data, or any bottleneck that lengthens the time
   of a database transaction. 
&lt;/p&gt;
&lt;p&gt;
   The economics of distributed computing argue in favor of many small machines, rather
   than one large machine. Google does not handle its search system with one large machine,
   but many commodity processors. If you have one large database, scaling up to a new
   machine can cost hours or days. 
&lt;/p&gt;
&lt;h2&gt;
   The CAP Theorem 
&lt;/h2&gt;
&lt;p&gt;
   Eric Brewer’s CAP Theorem summarizes the discussion. Given the constraints of consistency,
   availability, and partitioning, you can only have two of the three. We are comfortable
   with the world of single database/database cluster with minimal latency where we have
   consistency and availability. 
&lt;/p&gt;
&lt;h2&gt;
   Partitioning Data 
&lt;/h2&gt;
&lt;p&gt;
   If we are forced to partition our data should we give up on availability or consistency?
   Let us first look at the best way to partition, and then ask whether we want consistency
   or availability. What is the best way to partition? 
&lt;/p&gt;
&lt;p&gt;
   If economics, the laws of physics, and current technology limits argue in favor of
   partitioning, what is the best way to partition? Distributed objects, whether by DCOM,
   CORBA, or RMI failed for many reasons . The RPC model increases latencies that inhibit
   scalability. You cannot ignore the existence of the network. Distributed transactions
   fail as well because once you get beyond a local network the latencies with two-phase
   commit impede scalability. Two better alternatives exist: a key value/type store such
   as Azure Storage Services, or partitioning data across relational databases without
   distributed transactions. 
&lt;/p&gt;
&lt;p&gt;
   Storage Services allow multiple partitions of tables with entries. Only CRUD operations
   exist: no foreign key relations, no joins, no constraints, and no schemas. Consistency
   must be handled programmatically. This model works well with tens of hundreds of commoity
   processors, and can achieve massive scalability. One can partition SQL Azure horizontally
   or vertically. With horizontal partitioning we divide table rows across the database.
   With vertical partitioning we divide table columns across databases. Within the databases
   you have transactional consistency, but there are no transactions across databases. 
&lt;/p&gt;
&lt;p&gt;
   Horizontal partitioning works especially well when the data divides naturally: company
   subsidiaries that are geographically separate, historical analysis, or of different
   functional areas such as user feedback and active orders. Vertical partitioning works
   well when updates and queries use different pieces of data. In all these cases we
   have to deal with data that might be stale or inconsistent. 
&lt;/p&gt;
&lt;h2&gt;
   Consistency or Availability? 
&lt;/h2&gt;
&lt;p&gt;
   Ask a simple question: What is the cost of an apology? The number of available books
   in Amazon is a cached value, not guaranteed to be correct. If Amazon ran a distributed
   transaction over all your shopping cart orders, the book inventory system, and the
   shipping system, they could never build a massively scalable front end user interface.
   Transactions would be dependent on user interactions that could range from 5 seconds
   to hours, assuming the shopping cart is not abandoned. It is impractical to keep database
   locks that long. Since most of the time you get your book, availability is a better
   choice that consistency. 
&lt;/p&gt;
&lt;p&gt;
   Airline reservation systems are similar. A database used for read-only flight shopping
   is updated periodically. Another database is for reservations. Occasionally, you cannot
   get the price or flight you wanted. Using one database to achieve consistency would
   make searching for fares. or making reservations take forever. 
&lt;/p&gt;
&lt;p&gt;
   Both cases have an ultimate source of truth: the inventory database, or the reservations
   database. Businesses have to be prepared to apologize anyway. Checks bounce, the last
   book in the inventory turns out to be defective, or the vendor drops the last crystal
   vase. We often have to make records and reality consistent. 
&lt;/p&gt;
&lt;h2&gt;
   Software State is not the State of the World 
&lt;/h2&gt;
&lt;p&gt;
   We have fostered a myth that the state of the software has to be always identical
   to the state of the world. This often makes software applications difficult to use,
   or impossible to write. Deciding what the cost of getting it absolutely right is a
   business decision. As Amazon and the airlines illustrate, the cost of lost business
   and convenience sometimes offsets the occasional problems of inconsistent data. You
   must then design for eventual consistency. 
&lt;/p&gt;
&lt;h2&gt;
   Summary 
&lt;/h2&gt;
&lt;p&gt;
   Scalability is based on the constraints of your application, the volume of data transmitted,
   or the number and geographic distribution of your users. 
&lt;/p&gt;
&lt;p&gt;
   Need absolute consistency? Use the relational model. Need high availability? Use Azure
   tables, or the partitioned relational model. Availability is a subjective measure.
   You might partition and still get consistency. If the nature of your world changes,
   however, it is not easy to shift from the relational model to a partitioned model. 
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.reliablesoftware.com/DasBlog/aggbug.ashx?id=064cde07-c5fd-402a-ac86-adb338f50e81" /&gt;</description>
      <comments>http://www.reliablesoftware.com/DasBlog/CommentView,guid,064cde07-c5fd-402a-ac86-adb338f50e81.aspx</comments>
      <category>All;Cloud Computing;Microsoft .NET;Software Development</category>
    </item>
    <item>
      <trackback:ping>http://www.reliablesoftware.com/DasBlog/Trackback.aspx?guid=9dada6df-26b0-44e9-aa37-c390fa008994</trackback:ping>
      <pingback:server>http://www.reliablesoftware.com/DasBlog/pingback.aspx</pingback:server>
      <pingback:target>http://www.reliablesoftware.com/DasBlog/PermaLink,guid,9dada6df-26b0-44e9-aa37-c390fa008994.aspx</pingback:target>
      <dc:creator>weblogcomments@reliablesoftware.com (Michael Stiefel)</dc:creator>
      <wfw:commentRss>http://www.reliablesoftware.com/DasBlog/SyndicationService.asmx/GetEntryCommentsRss?guid=9dada6df-26b0-44e9-aa37-c390fa008994</wfw:commentRss>
      <slash:comments>1</slash:comments>
      <title>Partitioning Azure Table Storage</title>
      <guid>http://www.reliablesoftware.com/DasBlog/PermaLink,guid,9dada6df-26b0-44e9-aa37-c390fa008994.aspx</guid>
      <link>http://www.reliablesoftware.com/DasBlog/PermaLink,guid,9dada6df-26b0-44e9-aa37-c390fa008994.aspx</link>
      <pubDate>Mon, 22 Nov 2010 16:58:14 GMT</pubDate>
      <description>&lt;font size="3" face="Arial"&gt; 
&lt;p&gt;
   Determining how to divide your Azure table storage into multiple partitions is based
   on how your data is accessed. Here is an example of how to partition data assuming
   that reads predominate over writes.
&lt;/p&gt;
&lt;p&gt;
   Consider an application that sells tickets to various events. Typical questions and
   the attributes accessed for the queries are:
&lt;/p&gt;
&lt;br&gt;
&lt;table cellspacing=0 cellpadding=0 class="style1"&gt;
   &lt;tr&gt;
      &lt;td style="width: 330px"&gt;
         How many tickets are left for an event?&gt;&lt;/td&gt;
      &lt;td&gt;
         date, location, event&lt;o:p&gt;&lt;/o:p&gt;
         &gt;&gt;&lt;/td&gt;
   &lt;/tr&gt;
   &lt;tr&gt;
      &lt;td style="width: 330px"&gt;
         &lt;p&gt;
            &lt;span style='mso-bidi-font-weight:bold'&gt;What events occur on which date?&lt;/span&gt;
         &lt;/p&gt;
      &lt;/td&gt;
      &lt;td&gt;
         date, artist, location&lt;o:p&gt;&lt;/o:p&gt;
         &gt;&gt;&lt;/td&gt;
   &lt;/tr&gt;
   &lt;tr&gt;
      &lt;td style="width: 330px"&gt;
         &lt;p&gt;
            &lt;span style='mso-bidi-font-weight:bold'&gt;When is a particular artist coming to town?&lt;/span&gt;
         &lt;/p&gt;
      &lt;/td&gt;
      &lt;td&gt;
         artist, location&lt;o:p&gt;&lt;/o:p&gt;
         &gt;&gt;&lt;/td&gt;
   &lt;/tr&gt;
   &lt;tr&gt;
      &lt;td style="width: 330px"&gt;
         &lt;p&gt;
            &lt;span style='mso-bidi-font-weight:bold'&gt;When can I get a ticket for a type of event?&lt;/span&gt;
         &lt;/p&gt;
      &lt;/td&gt;
      &lt;td &gt;
         &lt;p&gt;
            &lt;span style='mso-bidi-font-weight:bold'&gt;genre&lt;o:p&gt;&lt;/o:p&gt;
            &lt;/span&gt;&gt;
         &lt;/p&gt;
      &lt;/td&gt;
   &lt;/tr&gt;
   &lt;tr&gt;
      &lt;td style="width: 330px"&gt;
         &lt;p&gt;
            &lt;span style='mso-bidi-font-weight:bold'&gt;Which artists are coming to town?&lt;o:p&gt;&lt;/o:p&gt;
            &lt;/span&gt;
         &lt;/p&gt;
      &lt;/td&gt;
      &lt;td&gt;
         artist, location&gt;&gt;&lt;/td&gt;
   &lt;/tr&gt;
&lt;/table&gt;
&lt;br&gt;
&lt;p&gt;
   The queries are listed in frequency order. The most common query is about how many
   tickets are available for an event.
&lt;/p&gt;
&lt;p&gt;
   The most common combination of attributes is artist or date for a given location.
   The most common query uses event, date, and location.
&lt;/p&gt;
&lt;p&gt;
   With Azure tables you only have two keys: partition and row. The fastest query is
   always the one based on the partition key.
&lt;/p&gt;
&lt;p&gt;
   This leads us to the suggestion that the partition key should be location since it
   is involved with all but one of the queries. The row key should be date concatenated
   with event. This gives a quick result for the most common query. The remaining queries
   require table scans. All but one are helped by the partitioning scheme. In reality,
   that query is probably location based as well.
&lt;/p&gt;
&lt;p&gt;
   The added bonus of this arrangement is that it allows for geographic distribution
   to data centers closest to the customers.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.reliablesoftware.com/DasBlog/aggbug.ashx?id=9dada6df-26b0-44e9-aa37-c390fa008994" /&gt;</description>
      <comments>http://www.reliablesoftware.com/DasBlog/CommentView,guid,9dada6df-26b0-44e9-aa37-c390fa008994.aspx</comments>
      <category>All;Cloud Computing;Microsoft .NET;Software Development</category>
    </item>
    <item>
      <trackback:ping>http://www.reliablesoftware.com/DasBlog/Trackback.aspx?guid=233a8fba-11f0-426e-8097-b4e6347a0d23</trackback:ping>
      <pingback:server>http://www.reliablesoftware.com/DasBlog/pingback.aspx</pingback:server>
      <pingback:target>http://www.reliablesoftware.com/DasBlog/PermaLink,guid,233a8fba-11f0-426e-8097-b4e6347a0d23.aspx</pingback:target>
      <dc:creator>weblogcomments@reliablesoftware.com (Michael Stiefel)</dc:creator>
      <wfw:commentRss>http://www.reliablesoftware.com/DasBlog/SyndicationService.asmx/GetEntryCommentsRss?guid=233a8fba-11f0-426e-8097-b4e6347a0d23</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <font size="3" face="Arial">
          <p>
            <i> "Government, without popular information, or the means of acquiring it, is but
      a Prologue to a Farce or a Tragedy; or, perhaps both. Knowledge will forever govern
      ignorance." </i> James Madison 
   </p>
          <br />
          <b>What is it?</b>
          <br />
          <p>
      Control over information is a societal danger similar to control over economic resources
      or political power. Representative government will not survive without the information
      to help us create meaningful policies. Otherwise, advocates will too easily lead us
      to the conclusion they want us to support. 
   </p>
          <p>
      How does one get access to this data?
   </p>
          <p>
      Right now, it is not easy to get access to authoritative data. If you have money you
      search for it, purchase it, or do the research to obtain it. Often, you have to negotiate
      licensing and payment terms. Why can’t we shop for data the same way we find food,
      clothing, shelter, or leisure activities? None of these activities requires extensive
      searches or complex legal negotiations. 
   </p>
          <p>
      Why can’t we have a marketplace for data?
   </p>
          <p>
      Microsoft Dallas is a marketplace for data. It provides a standard way to purchase,
      license, and download data. Currently it is a CTP, and no doubt will undergo a name
      change, but the idea will not. 
   </p>
          <p>
      The data providers could be commercial or private. Right now, they range from government
      agencies such as NASA or the UN to private concerns such as Info USA and NAVTEQ. You
      can easily find out their reputations so you know how authoritative they are. 
   </p>
          <p>
      As a CTP there is no charge, but the product offering will have either transaction/query
      or subscription based pricing. Microsoft has promised “easy to understand licensing”. 
   </p>
          <br />
          <b>What are the opportunities?</b>
          <br />
          <p>
      There is one billing relationship in the marketplace because Microsoft will handle
      the payment mechanisms. Content Providers will not have to bill individual users.
      They will not have to write a licensing agreement for each user. Large provider organizations
      can deal with businesses or individuals that in other circumstances would not have
      provided a reasonable economic return. Small data providers can offer their data where
      it would have previously been economically unfeasible. Content Users would then be
      able to easily find data that would have been difficult to find or otherwise unavailable.
      The licensing terms will be very clear, avoiding another potential legal headache.
      Small businesses can create new business opportunities. 
   </p>
          <p>
      The marketplace itself is scalable because it runs on Microsoft Azure. 
   </p>
          <p>
      For application developers, Dallas is about your imagination. What kind of business
      combinations can you imagine? 
   </p>
          <br />
          <b>How do you access the data?</b>
          <br />
          <p>
      Dallas will use the standard OData API. Hence Dallas data can be used from Java, PHP,
      or on an IPhone. The data itself can be structured or unstructured. 
   </p>
          <p>
      An example of unstructured data is the Mars rover pictures. The Associated Press uses
      both structured and unstructured data. The news articles are just text, but there
      are relationships between various story categories. 
   </p>
          <p>
      Dallas can integrate with the Azure AppFabric Access Control Service. 
   </p>
          <br />
          <b>Your imagination is the limit.</b>
          <br />
          <p>
      The standard API is very simple. The only real limit is your imagining the possibilities
      for combining data together. 
   </p>
          <p>
      What kind of combinations can you think of? 
   </p>
          <img width="0" height="0" src="http://www.reliablesoftware.com/DasBlog/aggbug.ashx?id=233a8fba-11f0-426e-8097-b4e6347a0d23" />
        </font>
      </body>
      <title>Imagineering for Data: What is Microsoft Dallas?</title>
      <guid>http://www.reliablesoftware.com/DasBlog/PermaLink,guid,233a8fba-11f0-426e-8097-b4e6347a0d23.aspx</guid>
      <link>http://www.reliablesoftware.com/DasBlog/PermaLink,guid,233a8fba-11f0-426e-8097-b4e6347a0d23.aspx</link>
      <pubDate>Wed, 15 Sep 2010 13:18:59 GMT</pubDate>
      <description>&lt;font size="3" face="Arial"&gt; 
&lt;p&gt;
   &lt;i&gt; "Government, without popular information, or the means of acquiring it, is but
   a Prologue to a Farce or a Tragedy; or, perhaps both. Knowledge will forever govern
   ignorance." &lt;/i&gt; James Madison 
&lt;/p&gt;
&lt;br&gt;
&lt;b&gt;What is it?&lt;/b&gt; 
&lt;br&gt;
&lt;p&gt;
   Control over information is a societal danger similar to control over economic resources
   or political power. Representative government will not survive without the information
   to help us create meaningful policies. Otherwise, advocates will too easily lead us
   to the conclusion they want us to support. 
&lt;/p&gt;
&lt;p&gt;
   How does one get access to this data?
&lt;/p&gt;
&lt;p&gt;
   Right now, it is not easy to get access to authoritative data. If you have money you
   search for it, purchase it, or do the research to obtain it. Often, you have to negotiate
   licensing and payment terms. Why can’t we shop for data the same way we find food,
   clothing, shelter, or leisure activities? None of these activities requires extensive
   searches or complex legal negotiations. 
&lt;/p&gt;
&lt;p&gt;
   Why can’t we have a marketplace for data?
&lt;/p&gt;
&lt;p&gt;
   Microsoft Dallas is a marketplace for data. It provides a standard way to purchase,
   license, and download data. Currently it is a CTP, and no doubt will undergo a name
   change, but the idea will not. 
&lt;/p&gt;
&lt;p&gt;
   The data providers could be commercial or private. Right now, they range from government
   agencies such as NASA or the UN to private concerns such as Info USA and NAVTEQ. You
   can easily find out their reputations so you know how authoritative they are. 
&lt;/p&gt;
&lt;p&gt;
   As a CTP there is no charge, but the product offering will have either transaction/query
   or subscription based pricing. Microsoft has promised “easy to understand licensing”. 
&lt;/p&gt;
&lt;br&gt;
&lt;b&gt;What are the opportunities?&lt;/b&gt; 
&lt;br&gt;
&lt;p&gt;
   There is one billing relationship in the marketplace because Microsoft will handle
   the payment mechanisms. Content Providers will not have to bill individual users.
   They will not have to write a licensing agreement for each user. Large provider organizations
   can deal with businesses or individuals that in other circumstances would not have
   provided a reasonable economic return. Small data providers can offer their data where
   it would have previously been economically unfeasible. Content Users would then be
   able to easily find data that would have been difficult to find or otherwise unavailable.
   The licensing terms will be very clear, avoiding another potential legal headache.
   Small businesses can create new business opportunities. 
&lt;/p&gt;
&lt;p&gt;
   The marketplace itself is scalable because it runs on Microsoft Azure. 
&lt;/p&gt;
&lt;p&gt;
   For application developers, Dallas is about your imagination. What kind of business
   combinations can you imagine? 
&lt;/p&gt;
&lt;br&gt;
&lt;b&gt;How do you access the data?&lt;/b&gt; 
&lt;br&gt;
&lt;p&gt;
   Dallas will use the standard OData API. Hence Dallas data can be used from Java, PHP,
   or on an IPhone. The data itself can be structured or unstructured. 
&lt;/p&gt;
&lt;p&gt;
   An example of unstructured data is the Mars rover pictures. The Associated Press uses
   both structured and unstructured data. The news articles are just text, but there
   are relationships between various story categories. 
&lt;/p&gt;
&lt;p&gt;
   Dallas can integrate with the Azure AppFabric Access Control Service. 
&lt;/p&gt;
&lt;br&gt;
&lt;b&gt;Your imagination is the limit.&lt;/b&gt; 
&lt;br&gt;
&lt;p&gt;
   The standard API is very simple. The only real limit is your imagining the possibilities
   for combining data together. 
&lt;/p&gt;
&lt;p&gt;
   What kind of combinations can you think of? 
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.reliablesoftware.com/DasBlog/aggbug.ashx?id=233a8fba-11f0-426e-8097-b4e6347a0d23" /&gt;</description>
      <comments>http://www.reliablesoftware.com/DasBlog/CommentView,guid,233a8fba-11f0-426e-8097-b4e6347a0d23.aspx</comments>
      <category>All;Cloud Computing;Microsoft .NET;SOA;Software Development</category>
    </item>
    <item>
      <trackback:ping>http://www.reliablesoftware.com/DasBlog/Trackback.aspx?guid=5510bebe-e06a-4445-bb88-42ec438d07b0</trackback:ping>
      <pingback:server>http://www.reliablesoftware.com/DasBlog/pingback.aspx</pingback:server>
      <pingback:target>http://www.reliablesoftware.com/DasBlog/PermaLink,guid,5510bebe-e06a-4445-bb88-42ec438d07b0.aspx</pingback:target>
      <dc:creator>weblogcomments@reliablesoftware.com (Michael Stiefel)</dc:creator>
      <wfw:commentRss>http://www.reliablesoftware.com/DasBlog/SyndicationService.asmx/GetEntryCommentsRss?guid=5510bebe-e06a-4445-bb88-42ec438d07b0</wfw:commentRss>
      <slash:comments>3</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
      Microsoft has published my five part introduction to the basics of partitioning and
      layering a software application. While there is a great deal of discussion about it
      in the literature on intermediate and advanced topics on software development, I have
      never found a good introduction that discusses the essentials. So I wrote one. 
   </p>
        <p>
      You can find it on the <a href="http://msdn.microsoft.com/en-us/vcsharp/gg675183" target="_blank">Microsoft's
      Visual C# Developer Center.</a></p>
        <img width="0" height="0" src="http://www.reliablesoftware.com/DasBlog/aggbug.ashx?id=5510bebe-e06a-4445-bb88-42ec438d07b0" />
      </body>
      <title>Partitioning and Layering a Software Application</title>
      <guid>http://www.reliablesoftware.com/DasBlog/PermaLink,guid,5510bebe-e06a-4445-bb88-42ec438d07b0.aspx</guid>
      <link>http://www.reliablesoftware.com/DasBlog/PermaLink,guid,5510bebe-e06a-4445-bb88-42ec438d07b0.aspx</link>
      <pubDate>Wed, 18 Aug 2010 14:28:54 GMT</pubDate>
      <description>&lt;p&gt;
   Microsoft has published my five part introduction to the basics of partitioning and
   layering a software application. While there is a great deal of discussion about it
   in the literature on intermediate and advanced topics on software development, I have
   never found a good introduction that discusses the essentials. So I wrote one. 
&lt;/p&gt;
&lt;p&gt;
   You can find it on the &lt;a href="http://msdn.microsoft.com/en-us/vcsharp/gg675183" target="_blank"&gt;Microsoft's
   Visual C# Developer Center.&lt;/a&gt; 
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.reliablesoftware.com/DasBlog/aggbug.ashx?id=5510bebe-e06a-4445-bb88-42ec438d07b0" /&gt;</description>
      <comments>http://www.reliablesoftware.com/DasBlog/CommentView,guid,5510bebe-e06a-4445-bb88-42ec438d07b0.aspx</comments>
      <category>All;Microsoft .NET;Software Development</category>
    </item>
    <item>
      <trackback:ping>http://www.reliablesoftware.com/DasBlog/Trackback.aspx?guid=a6c91fb7-46bb-4e0d-8804-e61838500a80</trackback:ping>
      <pingback:server>http://www.reliablesoftware.com/DasBlog/pingback.aspx</pingback:server>
      <pingback:target>http://www.reliablesoftware.com/DasBlog/PermaLink,guid,a6c91fb7-46bb-4e0d-8804-e61838500a80.aspx</pingback:target>
      <dc:creator>weblogcomments@reliablesoftware.com (Michael Stiefel)</dc:creator>
      <wfw:commentRss>http://www.reliablesoftware.com/DasBlog/SyndicationService.asmx/GetEntryCommentsRss?guid=a6c91fb7-46bb-4e0d-8804-e61838500a80</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
      Commodity hardware has gotten very cheap. Hence it often makes more economic sense
      to spread the load in the cloud over several cheap, commodity servers, rather than
      one large expensive server. 
   </p>
        <p>
      Microsoft's Azure data pricing makes this very clear. One Gigabyte of SQL Azure costs
      about $10 per month. Azure table storage costs $0.15 per GB per month. 
   </p>
        <p>
      The data transfer costs are the same for both. With Azure table storage you pay $0.01
      for each 10,000 storage transactions. 
   </p>
        <p>
      To break even with the SQL Azure price you can get about 9,850,000 storage transactions
      per month. That is a lot of bandwidth! 
   </p>
        <p>
      Another way to look at the cost is to suppose you need only 2,600,000 storage transactions
      a month (1 a second assuming an equal time distribution over the day). That would
      cost you only $2.60. That means you could store almost 50 GB worth of data. To store
      50 GB worth of data in SQL Azure would cost about $500 / month. 
   </p>
        <p>
      If you don't need the relational model, it is a lot cheaper to use table or blob storage. 
   </p>
        <img width="0" height="0" src="http://www.reliablesoftware.com/DasBlog/aggbug.ashx?id=a6c91fb7-46bb-4e0d-8804-e61838500a80" />
      </body>
      <title>Scaling Up vs. Scaling Out</title>
      <guid>http://www.reliablesoftware.com/DasBlog/PermaLink,guid,a6c91fb7-46bb-4e0d-8804-e61838500a80.aspx</guid>
      <link>http://www.reliablesoftware.com/DasBlog/PermaLink,guid,a6c91fb7-46bb-4e0d-8804-e61838500a80.aspx</link>
      <pubDate>Sun, 11 Jul 2010 19:49:12 GMT</pubDate>
      <description>&lt;p&gt;
   Commodity hardware has gotten very cheap. Hence it often makes more economic sense
   to spread the load in the cloud over several cheap, commodity servers, rather than
   one large expensive server. 
&lt;/p&gt;
&lt;p&gt;
   Microsoft's Azure data pricing makes this very clear. One Gigabyte of SQL Azure costs
   about $10 per month. Azure table storage costs $0.15 per GB per month. 
&lt;/p&gt;
&lt;p&gt;
   The data transfer costs are the same for both. With Azure table storage you pay $0.01
   for each 10,000 storage transactions. 
&lt;/p&gt;
&lt;p&gt;
   To break even with the SQL Azure price you can get about 9,850,000 storage transactions
   per month. That is a lot of bandwidth! 
&lt;/p&gt;
&lt;p&gt;
   Another way to look at the cost is to suppose you need only 2,600,000 storage transactions
   a month (1 a second assuming an equal time distribution over the day). That would
   cost you only $2.60. That means you could store almost 50 GB worth of data. To store
   50 GB worth of data in SQL Azure would cost about $500 / month. 
&lt;/p&gt;
&lt;p&gt;
   If you don't need the relational model, it is a lot cheaper to use table or blob storage. 
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.reliablesoftware.com/DasBlog/aggbug.ashx?id=a6c91fb7-46bb-4e0d-8804-e61838500a80" /&gt;</description>
      <comments>http://www.reliablesoftware.com/DasBlog/CommentView,guid,a6c91fb7-46bb-4e0d-8804-e61838500a80.aspx</comments>
      <category>All;Cloud Computing;Microsoft .NET;SOA;Software Development</category>
    </item>
    <item>
      <trackback:ping>http://www.reliablesoftware.com/DasBlog/Trackback.aspx?guid=e03414c3-c0ff-44ea-b6f9-6aefce2887ea</trackback:ping>
      <pingback:server>http://www.reliablesoftware.com/DasBlog/pingback.aspx</pingback:server>
      <pingback:target>http://www.reliablesoftware.com/DasBlog/PermaLink,guid,e03414c3-c0ff-44ea-b6f9-6aefce2887ea.aspx</pingback:target>
      <dc:creator>weblogcomments@reliablesoftware.com (Michael Stiefel)</dc:creator>
      <wfw:commentRss>http://www.reliablesoftware.com/DasBlog/SyndicationService.asmx/GetEntryCommentsRss?guid=e03414c3-c0ff-44ea-b6f9-6aefce2887ea</wfw:commentRss>
      <slash:comments>1</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p style="margin: 0in; font-family: Calibri; font-size: 11pt;">
          <font color="#000000" size="3" face="Arial"> One way to approach the different architectural
      implications is to look at the various vendor offering and see how they match to the
      various application types. 
      <br /><br />
      You can divide the cloud vendors into four categories, although one vendor might have
      offerings in more than one category: 
      <br /><br />
      Platform as a Service providers 
      <br />
      Software as a Service providers 
      <br />
      Application as a Service providers 
      <br />
      Cloud Appliance Vendors 
      <br /><br />
      The Platform as a Service providers attempt to provide a cloud operating system for
      users to build an application on. An operating system serves two basic functions:
      it abstracts the underlying hardware and manages the platform resources for each process
      or user. Google App Engine, Amazon EC2, Microsoft Azure, and Force.com are examples
      of platform providers. 
      <br /><br />
      The most restrictive platform is the Google App Engine because you program to the
      Google API which makes it difficult to port to another platform. One the other hand,
      precisely because you program to a specific API, Google can scale your application
      and provide recovery for a failed application. 
      <br /><br />
      At the other extreme is Amazon. Amazon gives you a virtual machine which with you
      can program directly against the native OS installed on the virtual machine. This
      freedom comes with a price. Since the Amazon virtual machine has no knowledge about
      the application you are running, it cannot provide recovery or scaling for you. You
      are responsible for doing that. You can use third party software, but that is just
      a means of fulfilling your responsibility. 
      <br /><br />
      Microsoft tries to achieve a balance between these two approaches. By using .NET you
      have a greater degree of portability than the Google API. You could move your application
      to an Amazon VM or even your own servers. By using metadata to describe your application
      to the cloud fabric, the Azure infrastructure can provide recovery and scalability. 
      <br /><br />
      The first architectural dimension (ignoring for a moment the relative econonmics which
      will be explored in another post) then is how much responsibility you want to take
      for scaling and recovery vs. the degrees of programming freedom you want to have.
      Of course the choice between the Google API and Microsoft Azure might come down to
      the skill set of your developers, but in my opinion, for any significant application,
      the architectural implications of the platform choice should be the more important
      factor. 
      </font>
        </p>
        <img width="0" height="0" src="http://www.reliablesoftware.com/DasBlog/aggbug.ashx?id=e03414c3-c0ff-44ea-b6f9-6aefce2887ea" />
      </body>
      <title> Why should you consider Cloud Computing? : Part 3</title>
      <guid>http://www.reliablesoftware.com/DasBlog/PermaLink,guid,e03414c3-c0ff-44ea-b6f9-6aefce2887ea.aspx</guid>
      <link>http://www.reliablesoftware.com/DasBlog/PermaLink,guid,e03414c3-c0ff-44ea-b6f9-6aefce2887ea.aspx</link>
      <pubDate>Sun, 27 Dec 2009 16:05:16 GMT</pubDate>
      <description>&lt;p style="margin: 0in; font-family: Calibri; font-size: 11pt;"&gt;
   &lt;font color="#000000" size="3" face="Arial"&gt; One way to approach the different architectural
   implications is to look at the various vendor offering and see how they match to the
   various application types. 
   &lt;br&gt;
   &lt;br&gt;
   You can divide the cloud vendors into four categories, although one vendor might have
   offerings in more than one category: 
   &lt;br&gt;
   &lt;br&gt;
   Platform as a Service providers 
   &lt;br&gt;
   Software as a Service providers 
   &lt;br&gt;
   Application as a Service providers 
   &lt;br&gt;
   Cloud Appliance Vendors 
   &lt;br&gt;
   &lt;br&gt;
   The Platform as a Service providers attempt to provide a cloud operating system for
   users to build an application on. An operating system serves two basic functions:
   it abstracts the underlying hardware and manages the platform resources for each process
   or user. Google App Engine, Amazon EC2, Microsoft Azure, and Force.com are examples
   of platform providers. 
   &lt;br&gt;
   &lt;br&gt;
   The most restrictive platform is the Google App Engine because you program to the
   Google API which makes it difficult to port to another platform. One the other hand,
   precisely because you program to a specific API, Google can scale your application
   and provide recovery for a failed application. 
   &lt;br&gt;
   &lt;br&gt;
   At the other extreme is Amazon. Amazon gives you a virtual machine which with you
   can program directly against the native OS installed on the virtual machine. This
   freedom comes with a price. Since the Amazon virtual machine has no knowledge about
   the application you are running, it cannot provide recovery or scaling for you. You
   are responsible for doing that. You can use third party software, but that is just
   a means of fulfilling your responsibility. 
   &lt;br&gt;
   &lt;br&gt;
   Microsoft tries to achieve a balance between these two approaches. By using .NET you
   have a greater degree of portability than the Google API. You could move your application
   to an Amazon VM or even your own servers. By using metadata to describe your application
   to the cloud fabric, the Azure infrastructure can provide recovery and scalability. 
   &lt;br&gt;
   &lt;br&gt;
   The first architectural dimension (ignoring for a moment the relative econonmics which
   will be explored in another post) then is how much responsibility you want to take
   for scaling and recovery vs. the degrees of programming freedom you want to have.
   Of course the choice between the Google API and Microsoft Azure might come down to
   the skill set of your developers, but in my opinion, for any significant application,
   the architectural implications of the platform choice should be the more important
   factor. 
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.reliablesoftware.com/DasBlog/aggbug.ashx?id=e03414c3-c0ff-44ea-b6f9-6aefce2887ea" /&gt;</description>
      <comments>http://www.reliablesoftware.com/DasBlog/CommentView,guid,e03414c3-c0ff-44ea-b6f9-6aefce2887ea.aspx</comments>
      <category>All;Cloud Computing;Microsoft .NET;SOA</category>
    </item>
    <item>
      <trackback:ping>http://www.reliablesoftware.com/DasBlog/Trackback.aspx?guid=83d3b9fa-1247-4949-aeeb-25899d24252e</trackback:ping>
      <pingback:server>http://www.reliablesoftware.com/DasBlog/pingback.aspx</pingback:server>
      <pingback:target>http://www.reliablesoftware.com/DasBlog/PermaLink,guid,83d3b9fa-1247-4949-aeeb-25899d24252e.aspx</pingback:target>
      <dc:creator>weblogcomments@reliablesoftware.com (Michael Stiefel)</dc:creator>
      <wfw:commentRss>http://www.reliablesoftware.com/DasBlog/SyndicationService.asmx/GetEntryCommentsRss?guid=83d3b9fa-1247-4949-aeeb-25899d24252e</wfw:commentRss>
      <title>Architect's Cafe Webcast</title>
      <guid>http://www.reliablesoftware.com/DasBlog/PermaLink,guid,83d3b9fa-1247-4949-aeeb-25899d24252e.aspx</guid>
      <link>http://www.reliablesoftware.com/DasBlog/PermaLink,guid,83d3b9fa-1247-4949-aeeb-25899d24252e.aspx</link>
      <pubDate>Wed, 07 Oct 2009 00:55:51 GMT</pubDate>
      <description>&lt;font color="#000000" size="3" face="Arial"&gt;Here is a webcast on Software as a Service
that I did for Microsoft's Architect's Cafe:&lt;br&gt;
&lt;br&gt;
&lt;/font&gt;
&lt;meta http-equiv="Content-Type" content="text/html; charset=utf-8"&gt;
&lt;meta name="ProgId" content="Word.Document"&gt;
&lt;meta name="Generator" content="Microsoft Word 12"&gt;
&lt;meta name="Originator" content="Microsoft Word 12"&gt;
&lt;link rel="File-List" href="file:///C:%5CDOCUME%7E1%5Cmds%5CLOCALS%7E1%5CTemp%5Cmsohtmlclip1%5C01%5Cclip_filelist.xml"&gt;
&lt;link rel="themeData" href="file:///C:%5CDOCUME%7E1%5Cmds%5CLOCALS%7E1%5CTemp%5Cmsohtmlclip1%5C01%5Cclip_themedata.thmx"&gt;
&lt;link rel="colorSchemeMapping" href="file:///C:%5CDOCUME%7E1%5Cmds%5CLOCALS%7E1%5CTemp%5Cmsohtmlclip1%5C01%5Cclip_colorschememapping.xml"&gt;
&lt;!--[if gte mso 9]&gt;&lt;xml&gt;
 &lt;w:WordDocument&gt;
  &lt;w:View&gt;Normal&lt;/w:View&gt;
  &lt;w:Zoom&gt;0&lt;/w:Zoom&gt;
  &lt;w:TrackMoves/&gt;
  &lt;w:TrackFormatting/&gt;
  &lt;w:PunctuationKerning/&gt;
  &lt;w:ValidateAgainstSchemas/&gt;
  &lt;w:SaveIfXMLInvalid&gt;false&lt;/w:SaveIfXMLInvalid&gt;
  &lt;w:IgnoreMixedContent&gt;false&lt;/w:IgnoreMixedContent&gt;
  &lt;w:AlwaysShowPlaceholderText&gt;false&lt;/w:AlwaysShowPlaceholderText&gt;
  &lt;w:DoNotPromoteQF/&gt;
  &lt;w:LidThemeOther&gt;EN-US&lt;/w:LidThemeOther&gt;
  &lt;w:LidThemeAsian&gt;X-NONE&lt;/w:LidThemeAsian&gt;
  &lt;w:LidThemeComplexScript&gt;X-NONE&lt;/w:LidThemeComplexScript&gt;
  &lt;w:Compatibility&gt;
   &lt;w:BreakWrappedTables/&gt;
   &lt;w:SnapToGridInCell/&gt;
   &lt;w:WrapTextWithPunct/&gt;
   &lt;w:UseAsianBreakRules/&gt;
   &lt;w:DontGrowAutofit/&gt;
   &lt;w:SplitPgBreakAndParaMark/&gt;
   &lt;w:DontVertAlignCellWithSp/&gt;
   &lt;w:DontBreakConstrainedForcedTables/&gt;
   &lt;w:DontVertAlignInTxbx/&gt;
   &lt;w:Word11KerningPairs/&gt;
   &lt;w:CachedColBalance/&gt;
  &lt;/w:Compatibility&gt;
  &lt;w:BrowserLevel&gt;MicrosoftInternetExplorer4&lt;/w:BrowserLevel&gt;
  &lt;m:mathPr&gt;
   &lt;m:mathFont m:val="Cambria Math"/&gt;
   &lt;m:brkBin m:val="before"/&gt;
   &lt;m:brkBinSub m:val="--"/&gt;
   &lt;m:smallFrac m:val="off"/&gt;
   &lt;m:dispDef/&gt;
   &lt;m:lMargin m:val="0"/&gt;
   &lt;m:rMargin m:val="0"/&gt;
   &lt;m:defJc m:val="centerGroup"/&gt;
   &lt;m:wrapIndent m:val="1440"/&gt;
   &lt;m:intLim m:val="subSup"/&gt;
   &lt;m:naryLim m:val="undOvr"/&gt;
  &lt;/m:mathPr&gt;&lt;/w:WordDocument&gt;
&lt;/xml&gt;&lt;![endif]--&gt;
&lt;!--[if gte mso 9]&gt;&lt;xml&gt;
 &lt;w:LatentStyles DefLockedState="false" DefUnhideWhenUsed="true"
  DefSemiHidden="true" DefQFormat="false" DefPriority="99"
  LatentStyleCount="267"&gt;
  &lt;w:LsdException Locked="false" Priority="0" SemiHidden="false"
   UnhideWhenUsed="false" QFormat="true" Name="Normal"/&gt;
  &lt;w:LsdException Locked="false" Priority="9" SemiHidden="false"
   UnhideWhenUsed="false" QFormat="true" Name="heading 1"/&gt;
  &lt;w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 2"/&gt;
  &lt;w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 3"/&gt;
  &lt;w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 4"/&gt;
  &lt;w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 5"/&gt;
  &lt;w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 6"/&gt;
  &lt;w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 7"/&gt;
  &lt;w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 8"/&gt;
  &lt;w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 9"/&gt;
  &lt;w:LsdException Locked="false" Priority="39" Name="toc 1"/&gt;
  &lt;w:LsdException Locked="false" Priority="39" Name="toc 2"/&gt;
  &lt;w:LsdException Locked="false" Priority="39" Name="toc 3"/&gt;
  &lt;w:LsdException Locked="false" Priority="39" Name="toc 4"/&gt;
  &lt;w:LsdException Locked="false" Priority="39" Name="toc 5"/&gt;
  &lt;w:LsdException Locked="false" Priority="39" Name="toc 6"/&gt;
  &lt;w:LsdException Locked="false" Priority="39" Name="toc 7"/&gt;
  &lt;w:LsdException Locked="false" Priority="39" Name="toc 8"/&gt;
  &lt;w:LsdException Locked="false" Priority="39" Name="toc 9"/&gt;
  &lt;w:LsdException Locked="false" Priority="35" QFormat="true" Name="caption"/&gt;
  &lt;w:LsdException Locked="false" Priority="10" SemiHidden="false"
   UnhideWhenUsed="false" QFormat="true" Name="Title"/&gt;
  &lt;w:LsdException Locked="false" Priority="1" Name="Default Paragraph Font"/&gt;
  &lt;w:LsdException Locked="false" Priority="11" SemiHidden="false"
   UnhideWhenUsed="false" QFormat="true" Name="Subtitle"/&gt;
  &lt;w:LsdException Locked="false" Priority="22" SemiHidden="false"
   UnhideWhenUsed="false" QFormat="true" Name="Strong"/&gt;
  &lt;w:LsdException Locked="false" Priority="20" SemiHidden="false"
   UnhideWhenUsed="false" QFormat="true" Name="Emphasis"/&gt;
  &lt;w:LsdException Locked="false" Priority="59" SemiHidden="false"
   UnhideWhenUsed="false" Name="Table Grid"/&gt;
  &lt;w:LsdException Locked="false" UnhideWhenUsed="false" Name="Placeholder Text"/&gt;
  &lt;w:LsdException Locked="false" Priority="1" SemiHidden="false"
   UnhideWhenUsed="false" QFormat="true" Name="No Spacing"/&gt;
  &lt;w:LsdException Locked="false" Priority="60" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light Shading"/&gt;
  &lt;w:LsdException Locked="false" Priority="61" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light List"/&gt;
  &lt;w:LsdException Locked="false" Priority="62" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light Grid"/&gt;
  &lt;w:LsdException Locked="false" Priority="63" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Shading 1"/&gt;
  &lt;w:LsdException Locked="false" Priority="64" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Shading 2"/&gt;
  &lt;w:LsdException Locked="false" Priority="65" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium List 1"/&gt;
  &lt;w:LsdException Locked="false" Priority="66" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium List 2"/&gt;
  &lt;w:LsdException Locked="false" Priority="67" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 1"/&gt;
  &lt;w:LsdException Locked="false" Priority="68" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 2"/&gt;
  &lt;w:LsdException Locked="false" Priority="69" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 3"/&gt;
  &lt;w:LsdException Locked="false" Priority="70" SemiHidden="false"
   UnhideWhenUsed="false" Name="Dark List"/&gt;
  &lt;w:LsdException Locked="false" Priority="71" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful Shading"/&gt;
  &lt;w:LsdException Locked="false" Priority="72" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful List"/&gt;
  &lt;w:LsdException Locked="false" Priority="73" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful Grid"/&gt;
  &lt;w:LsdException Locked="false" Priority="60" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light Shading Accent 1"/&gt;
  &lt;w:LsdException Locked="false" Priority="61" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light List Accent 1"/&gt;
  &lt;w:LsdException Locked="false" Priority="62" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light Grid Accent 1"/&gt;
  &lt;w:LsdException Locked="false" Priority="63" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Shading 1 Accent 1"/&gt;
  &lt;w:LsdException Locked="false" Priority="64" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Shading 2 Accent 1"/&gt;
  &lt;w:LsdException Locked="false" Priority="65" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium List 1 Accent 1"/&gt;
  &lt;w:LsdException Locked="false" UnhideWhenUsed="false" Name="Revision"/&gt;
  &lt;w:LsdException Locked="false" Priority="34" SemiHidden="false"
   UnhideWhenUsed="false" QFormat="true" Name="List Paragraph"/&gt;
  &lt;w:LsdException Locked="false" Priority="29" SemiHidden="false"
   UnhideWhenUsed="false" QFormat="true" Name="Quote"/&gt;
  &lt;w:LsdException Locked="false" Priority="30" SemiHidden="false"
   UnhideWhenUsed="false" QFormat="true" Name="Intense Quote"/&gt;
  &lt;w:LsdException Locked="false" Priority="66" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium List 2 Accent 1"/&gt;
  &lt;w:LsdException Locked="false" Priority="67" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 1 Accent 1"/&gt;
  &lt;w:LsdException Locked="false" Priority="68" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 2 Accent 1"/&gt;
  &lt;w:LsdException Locked="false" Priority="69" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 3 Accent 1"/&gt;
  &lt;w:LsdException Locked="false" Priority="70" SemiHidden="false"
   UnhideWhenUsed="false" Name="Dark List Accent 1"/&gt;
  &lt;w:LsdException Locked="false" Priority="71" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful Shading Accent 1"/&gt;
  &lt;w:LsdException Locked="false" Priority="72" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful List Accent 1"/&gt;
  &lt;w:LsdException Locked="false" Priority="73" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful Grid Accent 1"/&gt;
  &lt;w:LsdException Locked="false" Priority="60" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light Shading Accent 2"/&gt;
  &lt;w:LsdException Locked="false" Priority="61" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light List Accent 2"/&gt;
  &lt;w:LsdException Locked="false" Priority="62" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light Grid Accent 2"/&gt;
  &lt;w:LsdException Locked="false" Priority="63" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Shading 1 Accent 2"/&gt;
  &lt;w:LsdException Locked="false" Priority="64" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Shading 2 Accent 2"/&gt;
  &lt;w:LsdException Locked="false" Priority="65" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium List 1 Accent 2"/&gt;
  &lt;w:LsdException Locked="false" Priority="66" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium List 2 Accent 2"/&gt;
  &lt;w:LsdException Locked="false" Priority="67" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 1 Accent 2"/&gt;
  &lt;w:LsdException Locked="false" Priority="68" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 2 Accent 2"/&gt;
  &lt;w:LsdException Locked="false" Priority="69" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 3 Accent 2"/&gt;
  &lt;w:LsdException Locked="false" Priority="70" SemiHidden="false"
   UnhideWhenUsed="false" Name="Dark List Accent 2"/&gt;
  &lt;w:LsdException Locked="false" Priority="71" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful Shading Accent 2"/&gt;
  &lt;w:LsdException Locked="false" Priority="72" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful List Accent 2"/&gt;
  &lt;w:LsdException Locked="false" Priority="73" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful Grid Accent 2"/&gt;
  &lt;w:LsdException Locked="false" Priority="60" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light Shading Accent 3"/&gt;
  &lt;w:LsdException Locked="false" Priority="61" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light List Accent 3"/&gt;
  &lt;w:LsdException Locked="false" Priority="62" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light Grid Accent 3"/&gt;
  &lt;w:LsdException Locked="false" Priority="63" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Shading 1 Accent 3"/&gt;
  &lt;w:LsdException Locked="false" Priority="64" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Shading 2 Accent 3"/&gt;
  &lt;w:LsdException Locked="false" Priority="65" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium List 1 Accent 3"/&gt;
  &lt;w:LsdException Locked="false" Priority="66" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium List 2 Accent 3"/&gt;
  &lt;w:LsdException Locked="false" Priority="67" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 1 Accent 3"/&gt;
  &lt;w:LsdException Locked="false" Priority="68" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 2 Accent 3"/&gt;
  &lt;w:LsdException Locked="false" Priority="69" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 3 Accent 3"/&gt;
  &lt;w:LsdException Locked="false" Priority="70" SemiHidden="false"
   UnhideWhenUsed="false" Name="Dark List Accent 3"/&gt;
  &lt;w:LsdException Locked="false" Priority="71" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful Shading Accent 3"/&gt;
  &lt;w:LsdException Locked="false" Priority="72" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful List Accent 3"/&gt;
  &lt;w:LsdException Locked="false" Priority="73" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful Grid Accent 3"/&gt;
  &lt;w:LsdException Locked="false" Priority="60" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light Shading Accent 4"/&gt;
  &lt;w:LsdException Locked="false" Priority="61" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light List Accent 4"/&gt;
  &lt;w:LsdException Locked="false" Priority="62" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light Grid Accent 4"/&gt;
  &lt;w:LsdException Locked="false" Priority="63" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Shading 1 Accent 4"/&gt;
  &lt;w:LsdException Locked="false" Priority="64" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Shading 2 Accent 4"/&gt;
  &lt;w:LsdException Locked="false" Priority="65" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium List 1 Accent 4"/&gt;
  &lt;w:LsdException Locked="false" Priority="66" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium List 2 Accent 4"/&gt;
  &lt;w:LsdException Locked="false" Priority="67" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 1 Accent 4"/&gt;
  &lt;w:LsdException Locked="false" Priority="68" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 2 Accent 4"/&gt;
  &lt;w:LsdException Locked="false" Priority="69" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 3 Accent 4"/&gt;
  &lt;w:LsdException Locked="false" Priority="70" SemiHidden="false"
   UnhideWhenUsed="false" Name="Dark List Accent 4"/&gt;
  &lt;w:LsdException Locked="false" Priority="71" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful Shading Accent 4"/&gt;
  &lt;w:LsdException Locked="false" Priority="72" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful List Accent 4"/&gt;
  &lt;w:LsdException Locked="false" Priority="73" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful Grid Accent 4"/&gt;
  &lt;w:LsdException Locked="false" Priority="60" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light Shading Accent 5"/&gt;
  &lt;w:LsdException Locked="false" Priority="61" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light List Accent 5"/&gt;
  &lt;w:LsdException Locked="false" Priority="62" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light Grid Accent 5"/&gt;
  &lt;w:LsdException Locked="false" Priority="63" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Shading 1 Accent 5"/&gt;
  &lt;w:LsdException Locked="false" Priority="64" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Shading 2 Accent 5"/&gt;
  &lt;w:LsdException Locked="false" Priority="65" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium List 1 Accent 5"/&gt;
  &lt;w:LsdException Locked="false" Priority="66" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium List 2 Accent 5"/&gt;
  &lt;w:LsdException Locked="false" Priority="67" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 1 Accent 5"/&gt;
  &lt;w:LsdException Locked="false" Priority="68" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 2 Accent 5"/&gt;
  &lt;w:LsdException Locked="false" Priority="69" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 3 Accent 5"/&gt;
  &lt;w:LsdException Locked="false" Priority="70" SemiHidden="false"
   UnhideWhenUsed="false" Name="Dark List Accent 5"/&gt;
  &lt;w:LsdException Locked="false" Priority="71" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful Shading Accent 5"/&gt;
  &lt;w:LsdException Locked="false" Priority="72" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful List Accent 5"/&gt;
  &lt;w:LsdException Locked="false" Priority="73" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful Grid Accent 5"/&gt;
  &lt;w:LsdException Locked="false" Priority="60" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light Shading Accent 6"/&gt;
  &lt;w:LsdException Locked="false" Priority="61" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light List Accent 6"/&gt;
  &lt;w:LsdException Locked="false" Priority="62" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light Grid Accent 6"/&gt;
  &lt;w:LsdException Locked="false" Priority="63" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Shading 1 Accent 6"/&gt;
  &lt;w:LsdException Locked="false" Priority="64" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Shading 2 Accent 6"/&gt;
  &lt;w:LsdException Locked="false" Priority="65" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium List 1 Accent 6"/&gt;
  &lt;w:LsdException Locked="false" Priority="66" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium List 2 Accent 6"/&gt;
  &lt;w:LsdException Locked="false" Priority="67" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 1 Accent 6"/&gt;
  &lt;w:LsdException Locked="false" Priority="68" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 2 Accent 6"/&gt;
  &lt;w:LsdException Locked="false" Priority="69" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 3 Accent 6"/&gt;
  &lt;w:LsdException Locked="false" Priority="70" SemiHidden="false"
   UnhideWhenUsed="false" Name="Dark List Accent 6"/&gt;
  &lt;w:LsdException Locked="false" Priority="71" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful Shading Accent 6"/&gt;
  &lt;w:LsdException Locked="false" Priority="72" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful List Accent 6"/&gt;
  &lt;w:LsdException Locked="false" Priority="73" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful Grid Accent 6"/&gt;
  &lt;w:LsdException Locked="false" Priority="19" SemiHidden="false"
   UnhideWhenUsed="false" QFormat="true" Name="Subtle Emphasis"/&gt;
  &lt;w:LsdException Locked="false" Priority="21" SemiHidden="false"
   UnhideWhenUsed="false" QFormat="true" Name="Intense Emphasis"/&gt;
  &lt;w:LsdException Locked="false" Priority="31" SemiHidden="false"
   UnhideWhenUsed="false" QFormat="true" Name="Subtle Reference"/&gt;
  &lt;w:LsdException Locked="false" Priority="32" SemiHidden="false"
   UnhideWhenUsed="false" QFormat="true" Name="Intense Reference"/&gt;
  &lt;w:LsdException Locked="false" Priority="33" SemiHidden="false"
   UnhideWhenUsed="false" QFormat="true" Name="Book Title"/&gt;
  &lt;w:LsdException Locked="false" Priority="37" Name="Bibliography"/&gt;
  &lt;w:LsdException Locked="false" Priority="39" QFormat="true" Name="TOC Heading"/&gt;
 &lt;/w:LatentStyles&gt;
&lt;/xml&gt;&lt;![endif]--&gt;&lt;style&gt;
&lt;!--
 /* Font Definitions */
 @font-face
	{font-family:"Cambria Math";
	panose-1:2 4 5 3 5 4 6 3 2 4;
	mso-font-charset:1;
	mso-generic-font-family:roman;
	mso-font-format:other;
	mso-font-pitch:variable;
	mso-font-signature:0 0 0 0 0 0;}
@font-face
	{font-family:Calibri;
	panose-1:2 15 5 2 2 2 4 3 2 4;
	mso-font-charset:0;
	mso-generic-font-family:swiss;
	mso-font-pitch:variable;
	mso-font-signature:-1610611985 1073750139 0 0 159 0;}
 /* Style Definitions */
 p.MsoNormal, li.MsoNormal, div.MsoNormal
	{mso-style-unhide:no;
	mso-style-qformat:yes;
	mso-style-parent:"";
	margin:0in;
	margin-bottom:.0001pt;
	mso-pagination:widow-orphan;
	font-size:12.0pt;
	font-family:"Times New Roman","serif";
	mso-fareast-font-family:Calibri;
	mso-fareast-theme-font:minor-latin;}
a:link, span.MsoHyperlink
	{mso-style-noshow:yes;
	mso-style-priority:99;
	color:blue;
	text-decoration:underline;
	text-underline:single;}
a:visited, span.MsoHyperlinkFollowed
	{mso-style-noshow:yes;
	mso-style-priority:99;
	color:purple;
	mso-themecolor:followedhyperlink;
	text-decoration:underline;
	text-underline:single;}
.MsoChpDefault
	{mso-style-type:export-only;
	mso-default-props:yes;
	font-size:10.0pt;
	mso-ansi-font-size:10.0pt;
	mso-bidi-font-size:10.0pt;}
@page Section1
	{size:8.5in 11.0in;
	margin:1.0in 1.0in 1.0in 1.0in;
	mso-header-margin:.5in;
	mso-footer-margin:.5in;
	mso-paper-source:0;}
div.Section1
	{page:Section1;}
--&gt;
&lt;/style&gt;
&lt;!--[if gte mso 10]&gt;
&lt;style&gt;
 /* Style Definitions */
 table.MsoNormalTable
	{mso-style-name:"Table Normal";
	mso-tstyle-rowband-size:0;
	mso-tstyle-colband-size:0;
	mso-style-noshow:yes;
	mso-style-priority:99;
	mso-style-qformat:yes;
	mso-style-parent:"";
	mso-padding-alt:0in 5.4pt 0in 5.4pt;
	mso-para-margin:0in;
	mso-para-margin-bottom:.0001pt;
	mso-pagination:widow-orphan;
	font-size:11.0pt;
	font-family:"Calibri","sans-serif";
	mso-ascii-font-family:Calibri;
	mso-ascii-theme-font:minor-latin;
	mso-fareast-font-family:"Times New Roman";
	mso-fareast-theme-font:minor-fareast;
	mso-hansi-font-family:Calibri;
	mso-hansi-theme-font:minor-latin;
	mso-bidi-font-family:"Times New Roman";
	mso-bidi-theme-font:minor-bidi;}
&lt;/style&gt;
&lt;![endif]--&gt;
&lt;p class="MsoNormal"&gt;
   &lt;span style="font-size: 11pt; font-family: "Calibri","sans-serif"; color: rgb(31, 73, 125);"&gt;&lt;font color="#000000" size="3" face="Arial"&gt;&lt;a href="https://www112.livemeeting.com/cc/microsoft/view?id=M7GT9D"&gt;https://www112.livemeeting.com/cc/microsoft/view?id=M7GT9D&lt;/a&gt;&lt;/font&gt;
   &lt;o:p&gt;&lt;/o:p&gt;
   &lt;/span&gt;
&lt;/p&gt;
&lt;br&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.reliablesoftware.com/DasBlog/aggbug.ashx?id=83d3b9fa-1247-4949-aeeb-25899d24252e" /&gt;</description>
      <comments>http://www.reliablesoftware.com/DasBlog/CommentView,guid,83d3b9fa-1247-4949-aeeb-25899d24252e.aspx</comments>
      <category>All;Cloud Computing;Microsoft .NET;SOA;Software Development</category>
    </item>
    <item>
      <trackback:ping>http://www.reliablesoftware.com/DasBlog/Trackback.aspx?guid=2b6f5683-640f-422b-a138-aea8c20ac24c</trackback:ping>
      <pingback:server>http://www.reliablesoftware.com/DasBlog/pingback.aspx</pingback:server>
      <pingback:target>http://www.reliablesoftware.com/DasBlog/PermaLink,guid,2b6f5683-640f-422b-a138-aea8c20ac24c.aspx</pingback:target>
      <dc:creator>weblogcomments@reliablesoftware.com (Michael Stiefel)</dc:creator>
      <wfw:commentRss>http://www.reliablesoftware.com/DasBlog/SyndicationService.asmx/GetEntryCommentsRss?guid=2b6f5683-640f-422b-a138-aea8c20ac24c</wfw:commentRss>
      <slash:comments>1</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
      I just did an interview on .NET rocks about <a href="http://www.dotnetrocks.com/default.aspx?showNum=459" target="_blank">cloud
      computing</a>.
   </p>
        <p>
      We covered a whole bunch of topics including:<br />
      what is cloud computing<br />
      comparing the various offering of Google, Force.com, Amazon, and Microsoft<br />
      the social and economic environment required for cloud computing<br />
      the implications for transactional computing and the relational model<br />
      the importance of price and SLA for Microsoft whose offerring is different from Amazon
      and Google<br />
      the need for rich clients even in the world of cloud computing.
   </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
          <a href="http://www.dotnetrocks.com/default.aspx?showNum=459">
          </a>
        </p>
        <img width="0" height="0" src="http://www.reliablesoftware.com/DasBlog/aggbug.ashx?id=2b6f5683-640f-422b-a138-aea8c20ac24c" />
      </body>
      <title>. NET Rocks Interview</title>
      <guid>http://www.reliablesoftware.com/DasBlog/PermaLink,guid,2b6f5683-640f-422b-a138-aea8c20ac24c.aspx</guid>
      <link>http://www.reliablesoftware.com/DasBlog/PermaLink,guid,2b6f5683-640f-422b-a138-aea8c20ac24c.aspx</link>
      <pubDate>Mon, 06 Jul 2009 00:53:02 GMT</pubDate>
      <description>&lt;p&gt;
   I just did an interview on .NET rocks about &lt;a href="http://www.dotnetrocks.com/default.aspx?showNum=459" target=_blank&gt;cloud
   computing&lt;/a&gt;.
&lt;/p&gt;
&lt;p&gt;
   We covered a whole bunch of topics including:&lt;br&gt;
   what is cloud computing&lt;br&gt;
   comparing the various offering of Google, Force.com, Amazon, and Microsoft&lt;br&gt;
   the social and economic environment required for cloud computing&lt;br&gt;
   the implications for transactional computing and the relational model&lt;br&gt;
   the importance of price and SLA for Microsoft whose offerring is different from Amazon
   and Google&lt;br&gt;
   the need for rich clients even in the world of cloud computing.
&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;a href="http://www.dotnetrocks.com/default.aspx?showNum=459"&gt;&lt;/a&gt; 
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.reliablesoftware.com/DasBlog/aggbug.ashx?id=2b6f5683-640f-422b-a138-aea8c20ac24c" /&gt;</description>
      <comments>http://www.reliablesoftware.com/DasBlog/CommentView,guid,2b6f5683-640f-422b-a138-aea8c20ac24c.aspx</comments>
      <category>All;Cloud Computing;Microsoft .NET;SOA;Software Development</category>
    </item>
    <item>
      <trackback:ping>http://www.reliablesoftware.com/DasBlog/Trackback.aspx?guid=53155187-fea1-4eee-8318-6e2de064a1e8</trackback:ping>
      <pingback:server>http://www.reliablesoftware.com/DasBlog/pingback.aspx</pingback:server>
      <pingback:target>http://www.reliablesoftware.com/DasBlog/PermaLink,guid,53155187-fea1-4eee-8318-6e2de064a1e8.aspx</pingback:target>
      <dc:creator>weblogcomments@reliablesoftware.com (Michael Stiefel)</dc:creator>
      <wfw:commentRss>http://www.reliablesoftware.com/DasBlog/SyndicationService.asmx/GetEntryCommentsRss?guid=53155187-fea1-4eee-8318-6e2de064a1e8</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
      It's time for me to be interviewed on .NET Rocks again!
   </p>
        <p>
      Carl and Richard will interview me about Cloud Computing. The interview will be published
      on June 30 at <a href="http://www.dotnetrocks.com/" target="_blank">http://www.dotnetrocks.com/</a>.
   </p>
        <p>
      Based on my previous show (and related DNR TV segments) it will be a lot of fun to
      do and to listen to.
   </p>
        <p>
        </p>
        <img width="0" height="0" src="http://www.reliablesoftware.com/DasBlog/aggbug.ashx?id=53155187-fea1-4eee-8318-6e2de064a1e8" />
      </body>
      <title>My interview on .NET Rocks about Cloud Computing</title>
      <guid>http://www.reliablesoftware.com/DasBlog/PermaLink,guid,53155187-fea1-4eee-8318-6e2de064a1e8.aspx</guid>
      <link>http://www.reliablesoftware.com/DasBlog/PermaLink,guid,53155187-fea1-4eee-8318-6e2de064a1e8.aspx</link>
      <pubDate>Tue, 23 Jun 2009 14:48:08 GMT</pubDate>
      <description>&lt;p&gt;
   It's time for me to be interviewed on .NET Rocks again!
&lt;/p&gt;
&lt;p&gt;
   Carl and Richard will interview me about Cloud Computing. The interview will be published
   on June 30 at &lt;a href="http://www.dotnetrocks.com/" target=_blank&gt;http://www.dotnetrocks.com/&lt;/a&gt;.
&lt;/p&gt;
&lt;p&gt;
   Based on my previous show (and related DNR TV segments) it will be a lot of fun to
   do and to listen to.
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.reliablesoftware.com/DasBlog/aggbug.ashx?id=53155187-fea1-4eee-8318-6e2de064a1e8" /&gt;</description>
      <comments>http://www.reliablesoftware.com/DasBlog/CommentView,guid,53155187-fea1-4eee-8318-6e2de064a1e8.aspx</comments>
      <category>All;Cloud Computing;Microsoft .NET;SOA;Software Development</category>
    </item>
    <item>
      <trackback:ping>http://www.reliablesoftware.com/DasBlog/Trackback.aspx?guid=e1b56cb0-c0d6-4fd0-a38c-3c8bfedecc9e</trackback:ping>
      <pingback:server>http://www.reliablesoftware.com/DasBlog/pingback.aspx</pingback:server>
      <pingback:target>http://www.reliablesoftware.com/DasBlog/PermaLink,guid,e1b56cb0-c0d6-4fd0-a38c-3c8bfedecc9e.aspx</pingback:target>
      <dc:creator>weblogcomments@reliablesoftware.com (Michael Stiefel)</dc:creator>
      <wfw:commentRss>http://www.reliablesoftware.com/DasBlog/SyndicationService.asmx/GetEntryCommentsRss?guid=e1b56cb0-c0d6-4fd0-a38c-3c8bfedecc9e</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
      I have uploaded the slides and code for my <a target="_blank" href="http://www.reliablesoftware.com/presentations.html#Cloud">talk</a> on
      Windows Azure at the <a target="_blank" href="http://www.msdndevcon.com/Pages/Boston.aspx">Microsoft
      MSDN day</a> in Boston on January 22.
   </p>
        <p>
      The talk was a combination of slides from several PDC talks with some of my own additions.
      I went through the fundamental architecture of the Azure cloud operating system and
      the basic elements of the Azure cloud services (i.e. Identity, Workflow, Live, SQL
      Data Services).
   </p>
        <p>
      I did two demos. The first was a simple thumbnail generator. It illustrated a simple,
      scalable architecture using web roles and worker roles that used the primitive Azure
      operating system storage for blobs and queues. It also demonstrated how you model
      and configure a cloud application. The second, using the SQL Data Services, demonstrated
      how to integrate a non-cloud application (on a desktop or server) with the cloud.
      The app used a variety of industry standard mechanisms (WS*, REST, HTTP Get) to create
      and query data.
   </p>
        <p>
        </p>
        <p>
        </p>
        <img width="0" height="0" src="http://www.reliablesoftware.com/DasBlog/aggbug.ashx?id=e1b56cb0-c0d6-4fd0-a38c-3c8bfedecc9e" />
      </body>
      <title>Lap Around Windows Azure and the Azure Platform</title>
      <guid>http://www.reliablesoftware.com/DasBlog/PermaLink,guid,e1b56cb0-c0d6-4fd0-a38c-3c8bfedecc9e.aspx</guid>
      <link>http://www.reliablesoftware.com/DasBlog/PermaLink,guid,e1b56cb0-c0d6-4fd0-a38c-3c8bfedecc9e.aspx</link>
      <pubDate>Sun, 25 Jan 2009 16:20:05 GMT</pubDate>
      <description>&lt;p&gt;
   I have uploaded the slides and code for my &lt;a target="_blank" href="http://www.reliablesoftware.com/presentations.html#Cloud"&gt;talk&lt;/a&gt; on
   Windows Azure at the &lt;a target="_blank" href="http://www.msdndevcon.com/Pages/Boston.aspx"&gt;Microsoft
   MSDN day&lt;/a&gt; in Boston on January 22.
&lt;/p&gt;
&lt;p&gt;
   The talk was a combination of slides from several PDC talks with some of my own additions.
   I went through the fundamental architecture of the Azure cloud operating system and
   the basic elements of the Azure cloud services (i.e. Identity, Workflow, Live, SQL
   Data Services).
&lt;/p&gt;
&lt;p&gt;
   I did two demos. The first was a simple thumbnail generator. It illustrated a simple,
   scalable architecture using web roles and worker roles that used the primitive Azure
   operating system storage for blobs and queues. It also demonstrated how you model
   and configure a cloud application. The second, using the SQL Data Services, demonstrated
   how to integrate a non-cloud application (on a desktop or server) with the cloud.
   The app used a variety of industry standard mechanisms (WS*, REST, HTTP Get) to create
   and query data.
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.reliablesoftware.com/DasBlog/aggbug.ashx?id=e1b56cb0-c0d6-4fd0-a38c-3c8bfedecc9e" /&gt;</description>
      <comments>http://www.reliablesoftware.com/DasBlog/CommentView,guid,e1b56cb0-c0d6-4fd0-a38c-3c8bfedecc9e.aspx</comments>
      <category>Cloud Computing;Microsoft .NET;SOA</category>
    </item>
    <item>
      <trackback:ping>http://www.reliablesoftware.com/DasBlog/Trackback.aspx?guid=a92a6fe1-b5d8-4a3c-8ff1-ebb0e5587a16</trackback:ping>
      <pingback:server>http://www.reliablesoftware.com/DasBlog/pingback.aspx</pingback:server>
      <pingback:target>http://www.reliablesoftware.com/DasBlog/PermaLink,guid,a92a6fe1-b5d8-4a3c-8ff1-ebb0e5587a16.aspx</pingback:target>
      <dc:creator>weblogcomments@reliablesoftware.com (Michael Stiefel)</dc:creator>
      <wfw:commentRss>http://www.reliablesoftware.com/DasBlog/SyndicationService.asmx/GetEntryCommentsRss?guid=a92a6fe1-b5d8-4a3c-8ff1-ebb0e5587a16</wfw:commentRss>
      <slash:comments>1</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
      I will be speaking at VSLive! San Francisco on February 25 on <a target="_blank" href="http://vslive.com/2009/sf/distributedsystems.aspx#VW22">"Advanced
      Topics in Windows Workflow Foundation"</a>.
   </p>
        <p>
      The conference will be at the Hyatt Regency Embarcadero from February 23-27. Workshops
      are offered on Feb 23 and 27. The conference sessions are on Feb 24, 25 and 26. If
      you register with promo code NS9F20 you will receive a $500 discount off the price.
      The event web site is <a target="_blank" href="http://vslive.com/2009/sf">vslive.com/2009/sf</a>.
   </p>
        <p>
      There is some great content that covers ALM and Development Tools, .NET, Data Management,
      Infrastructure, Rich Clients, Distributed Systems, and Web Development. I hope to
      see you there.
   </p>
        <p>
          <img src="http://www.reliablesoftware.com/DasBlog/content/binary/VSLLogo_SFDates .gif" border="0" />
        </p>
        <img width="0" height="0" src="http://www.reliablesoftware.com/DasBlog/aggbug.ashx?id=a92a6fe1-b5d8-4a3c-8ff1-ebb0e5587a16" />
      </body>
      <title>Speaking at VSLive! San Francisco</title>
      <guid>http://www.reliablesoftware.com/DasBlog/PermaLink,guid,a92a6fe1-b5d8-4a3c-8ff1-ebb0e5587a16.aspx</guid>
      <link>http://www.reliablesoftware.com/DasBlog/PermaLink,guid,a92a6fe1-b5d8-4a3c-8ff1-ebb0e5587a16.aspx</link>
      <pubDate>Fri, 23 Jan 2009 23:03:16 GMT</pubDate>
      <description>&lt;p&gt;
   I will be speaking at VSLive! San Francisco on February 25 on &lt;a target=_blank href="http://vslive.com/2009/sf/distributedsystems.aspx#VW22"&gt;"Advanced
   Topics in Windows Workflow Foundation"&lt;/a&gt;.
&lt;/p&gt;
&lt;p&gt;
   The conference will be at the Hyatt Regency Embarcadero from February 23-27. Workshops
   are offered on Feb 23 and 27. The conference sessions are on Feb 24, 25 and 26. If
   you register with promo code NS9F20 you will receive a $500 discount off the price.
   The event web site is &lt;a target=_blank href="http://vslive.com/2009/sf"&gt;vslive.com/2009/sf&lt;/a&gt;.
&lt;/p&gt;
&lt;p&gt;
   There is some great content that covers ALM and Development Tools, .NET, Data Management,
   Infrastructure, Rich Clients, Distributed Systems, and Web Development. I hope to
   see you there.
&lt;/p&gt;
&lt;p&gt;
   &lt;img src="http://www.reliablesoftware.com/DasBlog/content/binary/VSLLogo_SFDates .gif" border=0&gt;
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.reliablesoftware.com/DasBlog/aggbug.ashx?id=a92a6fe1-b5d8-4a3c-8ff1-ebb0e5587a16" /&gt;</description>
      <comments>http://www.reliablesoftware.com/DasBlog/CommentView,guid,a92a6fe1-b5d8-4a3c-8ff1-ebb0e5587a16.aspx</comments>
      <category>Cloud Computing;Microsoft .NET;Software Development;Workflow</category>
    </item>
    <item>
      <trackback:ping>http://www.reliablesoftware.com/DasBlog/Trackback.aspx?guid=560ad329-a24c-414b-88d8-49bacf5429d7</trackback:ping>
      <pingback:server>http://www.reliablesoftware.com/DasBlog/pingback.aspx</pingback:server>
      <pingback:target>http://www.reliablesoftware.com/DasBlog/PermaLink,guid,560ad329-a24c-414b-88d8-49bacf5429d7.aspx</pingback:target>
      <dc:creator>weblogcomments@reliablesoftware.com (Michael Stiefel)</dc:creator>
      <wfw:commentRss>http://www.reliablesoftware.com/DasBlog/SyndicationService.asmx/GetEntryCommentsRss?guid=560ad329-a24c-414b-88d8-49bacf5429d7</wfw:commentRss>
      <slash:comments>1</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
          <font face="Times New Roman" size="3">At the PDC Microsoft announced its answer to
      Amazon and Google's cloud computing services.<br /></font>
          <font face="Times New Roman">
            <br />
          </font>
        </p>
        <p>
          <font face="Times New Roman" size="3">This answer has two parts: the Azure platform
      and hosted applications.<span style="mso-spacerun: yes"></span>Unfortunately people
      confuse these two aspects of cloud computing although they do have some features in
      common.</font>
        </p>
        <p style="FONT-SIZE: 11pt; MARGIN: 0in; FONT-FAMILY: Calibri">
          <font face="Times New Roman">The idea behind Azure is to have a hosted operating systems
      platform.<span style="mso-spacerun: yes"></span>Companies and individuals will be
      able to build applications that run on infrastructure inside one of Microsoft's data
      centers.<span style="mso-spacerun: yes"></span>Hosted services are applications that
      companies and individuals will use instead of running them on their own computers.</font>
        </p>
        <p style="FONT-SIZE: 11pt; MARGIN: 0in; FONT-FAMILY: Calibri">
          <font face="Times New Roman">
          </font>
        </p>
        <p style="FONT-SIZE: 11pt; MARGIN: 0in; FONT-FAMILY: Calibri">
          <font face="Times New Roman">For example,<span style="mso-spacerun: yes"></span>a<span style="mso-spacerun: yes"></span>company
      wants to build a document approval system. It can outsource the infrastructure on
      which it runs by building the application on top of a cloud computing platform such
      as Azure.<span style="mso-spacerun: yes"></span>My web site and blog do not run on
      my own servers, I use a hosting company. That is an example of using a hosted application.</font>
        </p>
        <p style="FONT-SIZE: 11pt; MARGIN: 0in; FONT-FAMILY: Calibri">
          <font face="Times New Roman">
          </font>
        </p>
        <p style="FONT-SIZE: 11pt; MARGIN: 0in; FONT-FAMILY: Calibri">
          <font face="Times New Roman">As people get more sophisticated about cloud computing
      we will see these two types as endpoints on a continuum. Right now as you start to
      think about cloud computing and where it makes sense,<span style="mso-spacerun: yes"></span>it
      is easier to treat these as distinct approaches. </font>
        </p>
        <p style="FONT-SIZE: 11pt; MARGIN: 0in; FONT-FAMILY: Calibri">
          <font face="Times New Roman">
          </font>
        </p>
        <p style="FONT-SIZE: 11pt; MARGIN: 0in; FONT-FAMILY: Calibri">
          <font face="Times New Roman">The economics of outsourcing your computing infrastructure
      and certain applications is compelling as Nicholas Carr has argued.<span style="mso-spacerun: yes"></span></font>
        </p>
        <p style="FONT-SIZE: 11pt; MARGIN: 0in; FONT-FAMILY: Calibri">
          <font face="Times New Roman">
          </font>
        </p>
        <p style="FONT-SIZE: 11pt; MARGIN: 0in; FONT-FAMILY: Calibri">
          <font face="Times New Roman">Companies will be able to vary capacity as needed. They
      can focus scarce economic resources on building the software the<span style="mso-spacerun: yes"></span>organization
      needs, as opposed to the specialized skills needed to run computing infrastructure.<span style="mso-spacerun: yes"></span>Many
      small and mid-sized companies already using hosting companies to run their applications.
      The next logical step is for hosting on an operating system in the cloud. </font>
        </p>
        <p style="FONT-SIZE: 11pt; MARGIN: 0in; FONT-FAMILY: Calibri">
          <font face="Times New Roman">
          </font>
        </p>
        <p style="FONT-SIZE: 11pt; MARGIN: 0in; FONT-FAMILY: Calibri">
          <font face="Times New Roman">Salesforce.com has already proven the viability of hosted
      CRM applications.<span style="mso-spacerun: yes"></span>If I am a small business
      and I need Microsoft Exchange,<span style="mso-spacerun: yes"></span>I have several
      choices. I can hire somebody who knows how to run an Exchange server. I can take one
      my already overburdened computer people and hope they can become expert enough on
      Exchange to run it without problems. Or I can outsource to a company that knows about
      Exchange,<span style="mso-spacerun: yes"></span>the appropriate patches, security
      issues, and how to get it to scale. The choice seems pretty clear to most businesses.</font>
        </p>
        <p style="FONT-SIZE: 11pt; MARGIN: 0in; FONT-FAMILY: Calibri">
          <font face="Times New Roman">
          </font>
        </p>
        <p style="FONT-SIZE: 11pt; MARGIN: 0in; FONT-FAMILY: Calibri">
          <font face="Times New Roman">We are at the beginning of the cloud computing wave,
      and there are many legitimate concerns. What about service outages as Amazon and Salesforce.com
      have had that prevent us from accessing our critical applications and data? What about
      privacy issues? I have discussed the <a href="http://www.podango.com/podcast_episode/2415/83715/OnMicrosoft_video/OnMicrosoft__Privacy_and_Cloud_Computing_with_Michael_Stiefel">cloud
      privacy issue </a>in a podcast</font>
          <font face="Times New Roman">.<span style="mso-spacerun: yes"></span>People
      are concerned about the ownership of information in the cloud.</font>
        </p>
        <p style="FONT-SIZE: 11pt; MARGIN: 0in; FONT-FAMILY: Calibri">
          <font face="Times New Roman">
          </font>
        </p>
        <p style="FONT-SIZE: 11pt; MARGIN: 0in; FONT-FAMILY: Calibri">
          <font face="Times New Roman">All these are legitimate concerns. But we have faced
      these issues before. Think of the electric power industry. We produce and consume
      all kinds of products and services using electric power. Electric power is reliable
      enough that nobody produces their own power any more. Even survivalists still get
      their usual power from the grid. </font>
        </p>
        <p style="FONT-SIZE: 11pt; MARGIN: 0in; FONT-FAMILY: Calibri">
          <font face="Times New Roman">
          </font>
        </p>
        <p style="FONT-SIZE: 11pt; MARGIN: 0in; FONT-FAMILY: Calibri">
          <font face="Times New Roman">This did not happen over night. Their were bitter arguments
      over the AC and DC standards for electric power transmission. Thomas Edison (the champion
      of DC power) built an alternating current electric chair for executing prisoners<span style="mso-spacerun: yes"></span>to
      demonstrate the "horrors" of Nikola Tesla's approach. There were bitter financial
      struggles between competing companies. Read Thomas Parke Hughes' classic work "Networks
      of power: Electrification in Western society 1880-1930". Yet in the end we have reliable
      electric power.</font>
        </p>
        <p style="FONT-SIZE: 11pt; MARGIN: 0in; FONT-FAMILY: Calibri">
          <font face="Times New Roman">
          </font>
        </p>
        <p style="FONT-SIZE: 11pt; MARGIN: 0in; FONT-FAMILY: Calibri">
          <font face="Times New Roman">Large scale computing utilities could provide computation
      much more efficiently than individual business. Compare the energy and pollution efficiency
      of large scale electric utilities with individual automobiles.</font>
        </p>
        <p style="FONT-SIZE: 11pt; MARGIN: 0in; FONT-FAMILY: Calibri">
          <font face="Times New Roman">
          </font>
        </p>
        <p style="FONT-SIZE: 11pt; MARGIN: 0in; FONT-FAMILY: Calibri">
          <font face="Times New Roman">
            <span style="mso-spacerun: yes">
            </span>Large companies
      with the ability to hire and retain infrastructure professionals might decide to build
      rather than outsource. Some companies may decide to do their own hosting for their
      own individual reasons.</font>
        </p>
        <p style="FONT-SIZE: 11pt; MARGIN: 0in; FONT-FAMILY: Calibri">
          <font face="Times New Roman">
          </font>
        </p>
        <p style="FONT-SIZE: 11pt; MARGIN: 0in; FONT-FAMILY: Calibri">
          <font face="Times New Roman">You probably already have information in the cloud if
      you have ever used Amazon.com. You have already given plenty of information to banks,
      credit card companies, and other companies you have dealt with. This information surely
      already resides on a computer somewhere. Life is full of trust decisions that you
      make without realizing it.</font>
        </p>
        <p style="FONT-SIZE: 11pt; MARGIN: 0in; FONT-FAMILY: Calibri">
          <font face="Times New Roman">
          </font>
        </p>
        <p style="FONT-SIZE: 11pt; MARGIN: 0in; FONT-FAMILY: Calibri">
          <font face="Times New Roman">Very few people grow their own food, sew their own clothes,
      build their own houses, or (even in these tenuous financial times)<span style="mso-spacerun: yes"></span>keep
      their money in their mattresses any more. We have learnt to trust in an economic system
      to provide these things. This too did not happen overnight.</font>
        </p>
        <p style="FONT-SIZE: 11pt; MARGIN: 0in; FONT-FAMILY: Calibri">
          <font face="Times New Roman">
          </font>
        </p>
        <p style="FONT-SIZE: 11pt; MARGIN: 0in; FONT-FAMILY: Calibri">
          <font face="Times New Roman">I personally believe that Internet connectivity will
      never be 100% reliable, but how much reliability will be needed depends on the mission
      criticality of an application. That is why there will always be a role for rich clients
      and synchronization services.</font>
        </p>
        <p style="FONT-SIZE: 11pt; MARGIN: 0in; FONT-FAMILY: Calibri">
          <font face="Times New Roman">
          </font>
        </p>
        <p style="FONT-SIZE: 11pt; MARGIN: 0in; FONT-FAMILY: Calibri">
          <font face="Times New Roman">Hosting companies will have to be large to have the financial
      stability to handle law suits and survive for the long term. We will have to develop
      the institutional and legal infrastructure to handle what happens to data and applications
      when a hosting company fails. We learned how to do this with bank failures and<span style="mso-spacerun: yes"></span>we
      will learn how to do this with hosting companies.</font>
        </p>
        <p style="FONT-SIZE: 11pt; MARGIN: 0in; FONT-FAMILY: Calibri">
          <font face="Times New Roman">
          </font>
        </p>
        <p style="FONT-SIZE: 11pt; MARGIN: 0in; FONT-FAMILY: Calibri">
          <font face="Times New Roman">This could easily take 50 years with many false starts.
      People tend to overestimate what will happen in 5 years, and underestimate what will
      happen in 10-15 years.</font>
        </p>
        <p style="FONT-SIZE: 11pt; MARGIN: 0in; FONT-FAMILY: Calibri">
          <font face="Times New Roman">
          </font>
        </p>
        <p style="FONT-SIZE: 11pt; MARGIN: 0in; FONT-FAMILY: Calibri">
          <font face="Times New Roman">Azure, the color Microsoft picked for the name of its
      platform, is the color of a bright, cloudless day.<span style="mso-spacerun: yes"></span>Interesting
      metaphor for a cloud computing platform. Is the future of clouds clear?</font>
        </p>
        <img width="0" height="0" src="http://www.reliablesoftware.com/DasBlog/aggbug.ashx?id=560ad329-a24c-414b-88d8-49bacf5429d7" />
      </body>
      <title>Microsoft Cloud Computing: The Empire Strikes Back</title>
      <guid>http://www.reliablesoftware.com/DasBlog/PermaLink,guid,560ad329-a24c-414b-88d8-49bacf5429d7.aspx</guid>
      <link>http://www.reliablesoftware.com/DasBlog/PermaLink,guid,560ad329-a24c-414b-88d8-49bacf5429d7.aspx</link>
      <pubDate>Wed, 29 Oct 2008 23:22:13 GMT</pubDate>
      <description>&lt;p&gt;
   &lt;font face="Times New Roman" size=3&gt;At the PDC Microsoft announced its answer to Amazon
   and Google's cloud computing services.&lt;br&gt;
   &lt;/font&gt;&lt;font face="Times New Roman"&gt;
   &lt;br&gt;
   &lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
   &lt;font face="Times New Roman" size=3&gt;This answer has two parts: the Azure platform
   and hosted applications.&lt;span style="mso-spacerun: yes"&gt; &lt;/span&gt;Unfortunately people
   confuse these two aspects of cloud computing although they do have some features in
   common.&lt;/font&gt;
&lt;/p&gt;
&lt;p style="FONT-SIZE: 11pt; MARGIN: 0in; FONT-FAMILY: Calibri"&gt;
   &lt;font face="Times New Roman"&gt;The idea behind Azure is to have a hosted operating systems
   platform.&lt;span style="mso-spacerun: yes"&gt; &lt;/span&gt;Companies and individuals will be
   able to build applications that run on infrastructure inside one of Microsoft's data
   centers.&lt;span style="mso-spacerun: yes"&gt; &lt;/span&gt;Hosted services are applications that
   companies and individuals will use instead of running them on their own computers.&lt;/font&gt;
&lt;/p&gt;
&lt;p style="FONT-SIZE: 11pt; MARGIN: 0in; FONT-FAMILY: Calibri"&gt;
   &lt;font face="Times New Roman"&gt;&lt;/font&gt; 
&lt;/p&gt;
&lt;p style="FONT-SIZE: 11pt; MARGIN: 0in; FONT-FAMILY: Calibri"&gt;
   &lt;font face="Times New Roman"&gt;For example,&lt;span style="mso-spacerun: yes"&gt; &lt;/span&gt;a&lt;span style="mso-spacerun: yes"&gt; &lt;/span&gt;company
   wants to build a document approval system. It can outsource the infrastructure on
   which it runs by building the application on top of a cloud computing platform such
   as Azure.&lt;span style="mso-spacerun: yes"&gt; &lt;/span&gt;My web site and blog do not run on
   my own servers, I use a hosting company. That is an example of using a hosted application.&lt;/font&gt;
&lt;/p&gt;
&lt;p style="FONT-SIZE: 11pt; MARGIN: 0in; FONT-FAMILY: Calibri"&gt;
   &lt;font face="Times New Roman"&gt;&lt;/font&gt; 
&lt;/p&gt;
&lt;p style="FONT-SIZE: 11pt; MARGIN: 0in; FONT-FAMILY: Calibri"&gt;
   &lt;font face="Times New Roman"&gt;As people get more sophisticated about cloud computing
   we will see these two types as endpoints on a continuum. Right now as you start to
   think about cloud computing and where it makes sense,&lt;span style="mso-spacerun: yes"&gt; &lt;/span&gt;it
   is easier to treat these as distinct approaches. &lt;/font&gt;
&lt;/p&gt;
&lt;p style="FONT-SIZE: 11pt; MARGIN: 0in; FONT-FAMILY: Calibri"&gt;
   &lt;font face="Times New Roman"&gt;&lt;/font&gt; 
&lt;/p&gt;
&lt;p style="FONT-SIZE: 11pt; MARGIN: 0in; FONT-FAMILY: Calibri"&gt;
   &lt;font face="Times New Roman"&gt;The economics of outsourcing your computing infrastructure
   and certain applications is compelling as Nicholas Carr has argued.&lt;span style="mso-spacerun: yes"&gt; &lt;/span&gt;&lt;/font&gt;
&lt;/p&gt;
&lt;p style="FONT-SIZE: 11pt; MARGIN: 0in; FONT-FAMILY: Calibri"&gt;
   &lt;font face="Times New Roman"&gt;&lt;/font&gt; 
&lt;/p&gt;
&lt;p style="FONT-SIZE: 11pt; MARGIN: 0in; FONT-FAMILY: Calibri"&gt;
   &lt;font face="Times New Roman"&gt;Companies will be able to vary capacity as needed. They
   can focus scarce economic resources on building the software the&lt;span style="mso-spacerun: yes"&gt; &lt;/span&gt;organization
   needs, as opposed to the specialized skills needed to run computing infrastructure.&lt;span style="mso-spacerun: yes"&gt; &lt;/span&gt;Many
   small and mid-sized companies already using hosting companies to run their applications.
   The next logical step is for hosting on an operating system in the cloud. &lt;/font&gt;
&lt;/p&gt;
&lt;p style="FONT-SIZE: 11pt; MARGIN: 0in; FONT-FAMILY: Calibri"&gt;
   &lt;font face="Times New Roman"&gt;&lt;/font&gt; 
&lt;/p&gt;
&lt;p style="FONT-SIZE: 11pt; MARGIN: 0in; FONT-FAMILY: Calibri"&gt;
   &lt;font face="Times New Roman"&gt;Salesforce.com has already proven the viability of hosted
   CRM applications.&lt;span style="mso-spacerun: yes"&gt; &lt;/span&gt;If I am a small business
   and I need Microsoft Exchange,&lt;span style="mso-spacerun: yes"&gt; &lt;/span&gt;I have several
   choices. I can hire somebody who knows how to run an Exchange server. I can take one
   my already overburdened computer people and hope they can become expert enough on
   Exchange to run it without problems. Or I can outsource to a company that knows about
   Exchange,&lt;span style="mso-spacerun: yes"&gt; &lt;/span&gt;the appropriate patches, security
   issues, and how to get it to scale. The choice seems pretty clear to most businesses.&lt;/font&gt;
&lt;/p&gt;
&lt;p style="FONT-SIZE: 11pt; MARGIN: 0in; FONT-FAMILY: Calibri"&gt;
   &lt;font face="Times New Roman"&gt;&lt;/font&gt; 
&lt;/p&gt;
&lt;p style="FONT-SIZE: 11pt; MARGIN: 0in; FONT-FAMILY: Calibri"&gt;
   &lt;font face="Times New Roman"&gt;We are at the beginning of the cloud computing wave,
   and there are many legitimate concerns. What about service outages as Amazon and Salesforce.com
   have had that prevent us from accessing our critical applications and data? What about
   privacy issues? I have discussed the &lt;a href="http://www.podango.com/podcast_episode/2415/83715/OnMicrosoft_video/OnMicrosoft__Privacy_and_Cloud_Computing_with_Michael_Stiefel"&gt;cloud
   privacy issue &lt;/a&gt;in a podcast&lt;/font&gt;&lt;font face="Times New Roman"&gt;.&lt;span style="mso-spacerun: yes"&gt; &lt;/span&gt;People
   are concerned about the ownership of information in the cloud.&lt;/font&gt;
&lt;/p&gt;
&lt;p style="FONT-SIZE: 11pt; MARGIN: 0in; FONT-FAMILY: Calibri"&gt;
   &lt;font face="Times New Roman"&gt;&lt;/font&gt; 
&lt;/p&gt;
&lt;p style="FONT-SIZE: 11pt; MARGIN: 0in; FONT-FAMILY: Calibri"&gt;
   &lt;font face="Times New Roman"&gt;All these are legitimate concerns. But we have faced
   these issues before. Think of the electric power industry. We produce and consume
   all kinds of products and services using electric power. Electric power is reliable
   enough that nobody produces their own power any more. Even survivalists still get
   their usual power from the grid. &lt;/font&gt;
&lt;/p&gt;
&lt;p style="FONT-SIZE: 11pt; MARGIN: 0in; FONT-FAMILY: Calibri"&gt;
   &lt;font face="Times New Roman"&gt;&lt;/font&gt; 
&lt;/p&gt;
&lt;p style="FONT-SIZE: 11pt; MARGIN: 0in; FONT-FAMILY: Calibri"&gt;
   &lt;font face="Times New Roman"&gt;This did not happen over night. Their were bitter arguments
   over the AC and DC standards for electric power transmission. Thomas Edison (the champion
   of DC power) built an alternating current electric chair for executing prisoners&lt;span style="mso-spacerun: yes"&gt; &lt;/span&gt;to
   demonstrate the "horrors" of Nikola Tesla's approach. There were bitter financial
   struggles between competing companies. Read Thomas Parke Hughes' classic work "Networks
   of power: Electrification in Western society 1880-1930". Yet in the end we have reliable
   electric power.&lt;/font&gt;
&lt;/p&gt;
&lt;p style="FONT-SIZE: 11pt; MARGIN: 0in; FONT-FAMILY: Calibri"&gt;
   &lt;font face="Times New Roman"&gt;&lt;/font&gt; 
&lt;/p&gt;
&lt;p style="FONT-SIZE: 11pt; MARGIN: 0in; FONT-FAMILY: Calibri"&gt;
   &lt;font face="Times New Roman"&gt;Large scale computing utilities could provide computation
   much more efficiently than individual business. Compare the energy and pollution efficiency
   of large scale electric utilities with individual automobiles.&lt;/font&gt;
&lt;/p&gt;
&lt;p style="FONT-SIZE: 11pt; MARGIN: 0in; FONT-FAMILY: Calibri"&gt;
   &lt;font face="Times New Roman"&gt;&lt;/font&gt; 
&lt;/p&gt;
&lt;p style="FONT-SIZE: 11pt; MARGIN: 0in; FONT-FAMILY: Calibri"&gt;
   &lt;font face="Times New Roman"&gt;&lt;span style="mso-spacerun: yes"&gt; &lt;/span&gt;Large companies
   with the ability to hire and retain infrastructure professionals might decide to build
   rather than outsource. Some companies may decide to do their own hosting for their
   own individual reasons.&lt;/font&gt;
&lt;/p&gt;
&lt;p style="FONT-SIZE: 11pt; MARGIN: 0in; FONT-FAMILY: Calibri"&gt;
   &lt;font face="Times New Roman"&gt;&lt;/font&gt; 
&lt;/p&gt;
&lt;p style="FONT-SIZE: 11pt; MARGIN: 0in; FONT-FAMILY: Calibri"&gt;
   &lt;font face="Times New Roman"&gt;You probably already have information in the cloud if
   you have ever used Amazon.com. You have already given plenty of information to banks,
   credit card companies, and other companies you have dealt with. This information surely
   already resides on a computer somewhere. Life is full of trust decisions that you
   make without realizing it.&lt;/font&gt;
&lt;/p&gt;
&lt;p style="FONT-SIZE: 11pt; MARGIN: 0in; FONT-FAMILY: Calibri"&gt;
   &lt;font face="Times New Roman"&gt;&lt;/font&gt; 
&lt;/p&gt;
&lt;p style="FONT-SIZE: 11pt; MARGIN: 0in; FONT-FAMILY: Calibri"&gt;
   &lt;font face="Times New Roman"&gt;Very few people grow their own food, sew their own clothes,
   build their own houses, or (even in these tenuous financial times)&lt;span style="mso-spacerun: yes"&gt; &lt;/span&gt;keep
   their money in their mattresses any more. We have learnt to trust in an economic system
   to provide these things. This too did not happen overnight.&lt;/font&gt;
&lt;/p&gt;
&lt;p style="FONT-SIZE: 11pt; MARGIN: 0in; FONT-FAMILY: Calibri"&gt;
   &lt;font face="Times New Roman"&gt;&lt;/font&gt; 
&lt;/p&gt;
&lt;p style="FONT-SIZE: 11pt; MARGIN: 0in; FONT-FAMILY: Calibri"&gt;
   &lt;font face="Times New Roman"&gt;I personally believe that Internet connectivity will
   never be 100% reliable, but how much reliability will be needed depends on the mission
   criticality of an application. That is why there will always be a role for rich clients
   and synchronization services.&lt;/font&gt;
&lt;/p&gt;
&lt;p style="FONT-SIZE: 11pt; MARGIN: 0in; FONT-FAMILY: Calibri"&gt;
   &lt;font face="Times New Roman"&gt;&lt;/font&gt; 
&lt;/p&gt;
&lt;p style="FONT-SIZE: 11pt; MARGIN: 0in; FONT-FAMILY: Calibri"&gt;
   &lt;font face="Times New Roman"&gt;Hosting companies will have to be large to have the financial
   stability to handle law suits and survive for the long term. We will have to develop
   the institutional and legal infrastructure to handle what happens to data and applications
   when a hosting company fails. We learned how to do this with bank failures and&lt;span style="mso-spacerun: yes"&gt; &lt;/span&gt;we
   will learn how to do this with hosting companies.&lt;/font&gt;
&lt;/p&gt;
&lt;p style="FONT-SIZE: 11pt; MARGIN: 0in; FONT-FAMILY: Calibri"&gt;
   &lt;font face="Times New Roman"&gt;&lt;/font&gt; 
&lt;/p&gt;
&lt;p style="FONT-SIZE: 11pt; MARGIN: 0in; FONT-FAMILY: Calibri"&gt;
   &lt;font face="Times New Roman"&gt;This could easily take 50 years with many false starts.
   People tend to overestimate what will happen in 5 years, and underestimate what will
   happen in 10-15 years.&lt;/font&gt;
&lt;/p&gt;
&lt;p style="FONT-SIZE: 11pt; MARGIN: 0in; FONT-FAMILY: Calibri"&gt;
   &lt;font face="Times New Roman"&gt;&lt;/font&gt; 
&lt;/p&gt;
&lt;p style="FONT-SIZE: 11pt; MARGIN: 0in; FONT-FAMILY: Calibri"&gt;
   &lt;font face="Times New Roman"&gt;Azure, the color Microsoft picked for the name of its
   platform, is the color of a bright, cloudless day.&lt;span style="mso-spacerun: yes"&gt; &lt;/span&gt;Interesting
   metaphor for a cloud computing platform. Is the future of clouds clear?&lt;/font&gt;
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.reliablesoftware.com/DasBlog/aggbug.ashx?id=560ad329-a24c-414b-88d8-49bacf5429d7" /&gt;</description>
      <comments>http://www.reliablesoftware.com/DasBlog/CommentView,guid,560ad329-a24c-414b-88d8-49bacf5429d7.aspx</comments>
      <category>All;Cloud Computing;Microsoft .NET;SOA;Software Development</category>
    </item>
    <item>
      <trackback:ping>http://www.reliablesoftware.com/DasBlog/Trackback.aspx?guid=6507b2c6-473e-4ddc-9e66-8a161e5df6e9</trackback:ping>
      <pingback:server>http://www.reliablesoftware.com/DasBlog/pingback.aspx</pingback:server>
      <pingback:target>http://www.reliablesoftware.com/DasBlog/PermaLink,guid,6507b2c6-473e-4ddc-9e66-8a161e5df6e9.aspx</pingback:target>
      <dc:creator>weblogcomments@reliablesoftware.com (Michael Stiefel)</dc:creator>
      <wfw:commentRss>http://www.reliablesoftware.com/DasBlog/SyndicationService.asmx/GetEntryCommentsRss?guid=6507b2c6-473e-4ddc-9e66-8a161e5df6e9</wfw:commentRss>
      <slash:comments>6</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <ul style="margin-left: 0.0201in; direction: ltr; unicode-bidi: embed; margin-top: 0in; margin-bottom: 0in;">
          <p style="margin: 0in; font-family: Calibri; font-size: 11pt;">
            <font color="#000000" size="3" face="Times New Roman">To further simplify the example,
         let us assume that the we want to use the certificate to encrypt a message from the
         client to the service. It is easy to apply what we discuss here to other scenarios.</font>
          </p>
          <p style="margin: 0in; font-family: Calibri; font-size: 11pt;">
            <font color="#000000" size="3" face="Times New Roman">
            </font>
          </p>
          <p style="margin: 0in; font-family: Calibri; font-size: 11pt;">
            <font color="#000000" size="3" face="Times New Roman">As we discussed in the<a href="http://www.reliablesoftware.com/DasBlog/PermaLink,guid,c953fbc9-34f2-48d4-ba33-55d621a48d7f.aspx"> previous
         post</a>, we need to generate two certificates, the root certificate that represents
         the Certificate Authority, and the certificate that represents the identity of the
         client or service. We will also create a Certificate Revocation List (CRL).</font>
          </p>
          <p style="margin: 0in; font-family: Calibri; font-size: 11pt;">
            <font color="#000000" size="3" face="Times New Roman">
            </font>
          </p>
          <p style="margin: 0in; font-family: Calibri; font-size: 11pt;">
            <font color="#000000" size="3" face="Times New Roman">We will use a tool called makeCert
         to generate our certificates. Makecert, which ships with the .NET platform,<span style=""></span>allows
         you to build an X509 certificate that can be used for development and testing. It
         does three things:</font>
          </p>
          <ol style="margin-left: 0.375in; direction: ltr; unicode-bidi: embed; margin-top: 0in; margin-bottom: 0in; font-family: Calibri; font-size: 11pt;" type="1">
            <li value="1" style="margin-top: 0pt; margin-bottom: 0pt; vertical-align: middle;">
              <p>
                <font color="#000000" size="3" face="Times New Roman">
                  <span style="font-family: Calibri; font-size: 11pt;">Generates
               a public and private key</span>
                </font>
              </p>
            </li>
            <li value="2" style="margin-top: 0pt; margin-bottom: 0pt; vertical-align: middle;">
              <p>
                <font color="#000000" size="3" face="Times New Roman">
                  <span style="font-family: Calibri; font-size: 11pt;">It
               associates the key pair with a name</span>
                </font>
              </p>
            </li>
            <li value="3" style="margin-top: 0pt; margin-bottom: 0pt; vertical-align: middle;">
              <p>
                <font color="#000000" size="3" face="Times New Roman">
                  <span style="font-family: Calibri; font-size: 11pt;">It
               binds the name with the public key.</span>
                </font>
              </p>
            </li>
          </ol>
          <p style="margin: 0in 0in 0in 0.375in; font-family: Calibri; font-size: 11pt;">
            <font color="#000000" size="3" face="Times New Roman">
            </font>
          </p>
          <p style="margin: 0in; font-family: Calibri; font-size: 11pt;">
            <font color="#000000" size="3" face="Times New Roman">Many of the published examples
         use makecert to both create and install the certificate. We will do the installation
         in a separate step because this approach is closer to the use of real certificates.<span style=""></span>Separating
         the certificates also allows the certificates to be installed on many machines instead
         of just one. This makes distributing certificates to developer machines much easier. </font>
          </p>
          <p style="margin: 0in 0in 0in 0.375in; font-family: Calibri; font-size: 11pt;">
            <font color="#000000" size="3" face="Times New Roman">
            </font>
          </p>
          <p style="margin: 0in; font-family: Calibri; font-size: 11pt;">
            <font color="#000000" size="3" face="Times New Roman">First we will create the Root
         Certificate with the following command:</font>
          </p>
          <p style="margin: 0in; font-family: Calibri; font-size: 11pt;">
            <font color="#000000" size="3" face="Times New Roman">
            </font>
          </p>
          <p style="margin: 0in 0in 0in 0.375in; font-family: Calibri; font-size: 11pt;">
            <font color="#000000" size="3" face="Times New Roman">makecert -sv RootCATest.pvk
         -r -n "CN=RootCATest" RootCATest.cer</font>
          </p>
          <p style="margin: 0in; font-family: Calibri; font-size: 11pt;">
            <font color="#000000" size="3" face="Times New Roman">
            </font>
          </p>
          <p style="margin: 0in; font-family: Calibri; font-size: 11pt;">
            <font color="#000000" size="3" face="Times New Roman">-n specifies the name for the
         root certificate authority. The convention is to prefix the name with "CN=" where
         CN stands for "Common Name"</font>
          </p>
          <p style="margin: 0in; font-family: Calibri; font-size: 11pt;">
            <font color="#000000" size="3" face="Times New Roman">-r indicates that the certificate
         will be a root certificate because it is self-signed.</font>
          </p>
          <p style="margin: 0in; font-family: Calibri; font-size: 11pt;">
            <font color="#000000" size="3" face="Times New Roman">-sv specifies the file that
         contains the private key. The private key will be used for signing certificates issued
         by this certificate authority. Makecert will ask you for a password to protect the
         private key in the file.</font>
          </p>
          <p style="margin: 0in; font-family: Calibri; font-size: 11pt;">
            <font color="#000000" size="3" face="Times New Roman">
            </font>
          </p>
          <p style="margin: 0in; font-family: Calibri; font-size: 11pt;">
            <font color="#000000" size="3" face="Times New Roman">The file RootCATest.cer will
         just have the public key. It is in the<span style=""></span>Canonical Encoding Rules
         (CER) format. This is the file that will be installed on machines as the root of the
         trust chain.</font>
          </p>
          <p style="margin: 0in; font-family: Calibri; font-size: 11pt;">
            <font color="#000000" size="3" face="Times New Roman">
            </font>
          </p>
          <p style="margin: 0in; font-family: Calibri; font-size: 11pt;">
            <font color="#000000" size="3" face="Times New Roman">Next we will create a certificate
         revocation list.</font>
          </p>
          <p style="margin: 0in; font-family: Calibri; font-size: 11pt;">
            <font color="#000000" size="3" face="Times New Roman">
            </font>
          </p>
          <p style="margin: 0in; font-family: Calibri; font-size: 11pt;">
            <font color="#000000" size="3" face="Times New Roman">makecert -crl -n "CN=RootCATest"
         -r -sv RootCATest.pvk RootCATest.crl</font>
          </p>
          <p style="margin: 0in; font-family: Calibri; font-size: 11pt;">
            <font color="#000000" size="3" face="Times New Roman">
            </font>
          </p>
          <p style="margin: 0in; font-family: Calibri; font-size: 11pt;">
            <font color="#000000" size="3" face="Times New Roman">-crl indicates we are creating
         a revocation list</font>
          </p>
          <p style="margin: 0in; font-family: Calibri; font-size: 11pt;">
            <font color="#000000" size="3" face="Times New Roman">-n is the name of the root certificate
         authority</font>
          </p>
          <p style="margin: 0in; font-family: Calibri; font-size: 11pt;">
            <font color="#000000" size="3" face="Times New Roman">-r indicates that this is the
         CRL for the root certificate, it is self-signed</font>
          </p>
          <p style="margin: 0in; font-family: Calibri; font-size: 11pt;">
            <font color="#000000" size="3" face="Times New Roman">-sv indicates the file that
         contains the private key</font>
          </p>
          <p style="margin: 0in; font-family: Calibri; font-size: 11pt;">
            <font color="#000000" size="3" face="Times New Roman">
            </font>
          </p>
          <p style="margin: 0in; font-family: Calibri; font-size: 11pt;">
            <font color="#000000" size="3" face="Times New Roman">RootCATest.crl is the name of
         the CRL file.</font>
          </p>
          <p style="margin: 0in; font-family: Calibri; font-size: 11pt;">
            <font color="#000000" size="3" face="Times New Roman">
            </font>
          </p>
          <p style="margin: 0in; font-family: Calibri; font-size: 11pt;">
            <font color="#000000" size="3" face="Times New Roman">At this point we could install
         the root certificate, but we will wait until we finish with the certificate we will
         use in our scenario.<span style=""></span>Here we need two files. We will need a
         CER file for the client machine so that we can install the public key associated with
         the service. Then we will create a PKCS12<span style=""></span>format file that will
         be used to install the public and private key in the service.</font>
          </p>
          <p style="margin: 0in; font-family: Calibri; font-size: 11pt;">
            <font color="#000000" size="3" face="Times New Roman">
            </font>
          </p>
          <p style="margin: 0in; font-family: Calibri; font-size: 11pt;">
            <font color="#000000" size="3" face="Times New Roman">The initial step is :</font>
          </p>
          <p style="margin: 0in; font-family: Calibri; font-size: 11pt;">
            <font color="#000000" size="3" face="Times New Roman">
            </font>
          </p>
          <p style="margin: 0in; font-family: Calibri; font-size: 11pt;">
            <font color="#000000" size="3" face="Times New Roman">makecert -ic RootCATest.cer
         -iv RootCATest.pvk -n "CN=TempCert" -sv<span style=""></span>TempCert.pvk -pe -sky
         exchange TempCert.cer</font>
          </p>
          <p style="margin: 0in; font-family: Calibri; font-size: 11pt;">
            <font color="#000000" size="3" face="Times New Roman">
            </font>
          </p>
          <p style="margin: 0in; font-family: Calibri; font-size: 11pt;">
            <font color="#000000" size="3" face="Times New Roman">-n specifies the name for the
         certificate</font>
          </p>
          <p style="margin: 0in; font-family: Calibri; font-size: 11pt;">
            <font color="#000000" size="3" face="Times New Roman">-sv specifies the file for the
         certificate. This must be unique for each certificate created. If you try to reuse
         a name, you will get an error message .</font>
          </p>
          <p style="margin: 0in; font-family: Calibri; font-size: 11pt;">
            <font color="#000000" size="3" face="Times New Roman">-iv specifies the name of the
         container file for the private key of the root certificate created in the first step.</font>
          </p>
          <p style="margin: 0in; font-family: Calibri; font-size: 11pt;">
            <font color="#000000" size="3" face="Times New Roman">-ic specifies the name of the
         root certificate file created in the first step</font>
          </p>
          <p style="margin: 0in; font-family: Calibri; font-size: 11pt;">
            <font color="#000000" size="3" face="Times New Roman">-sky specifies what kind of
         key we are creating. Using the exchange option enables the certificate to be used
         for signing and encrypting the message.</font>
          </p>
          <p style="margin: 0in; font-family: Calibri; font-size: 11pt;">
            <font color="#000000" size="3" face="Times New Roman">-pe specifies that the private
         key is exportable and is included with the certificate. For message security is this
         required because you need the corresponding private key.<span style=""></span></font>
          </p>
          <p style="margin: 0in; font-family: Calibri; font-size: 11pt;">
            <font color="#000000" size="3" face="Times New Roman">
            </font>
          </p>
          <p style="margin: 0in; font-family: Calibri; font-size: 11pt;">
            <font color="#000000" size="3" face="Times New Roman">The name of the CER file for
         the certificate is specified at the end of the command.</font>
          </p>
          <p style="margin: 0in; font-family: Calibri; font-size: 11pt;">
            <font color="#000000" size="3" face="Times New Roman">
            </font>
          </p>
          <p style="margin: 0in; font-family: Calibri; font-size: 11pt;">
            <font color="#000000" size="3" face="Times New Roman">Now we need to create the PKCS12
         file. We will use a the Software Publisher Certificate Test Tool to create a Software
         Publisher's Certificate. You use this format to create the PKCS12 file using the pvkimprt
         tool. </font>
          </p>
          <p style="margin: 0in; font-family: Calibri; font-size: 11pt;">
            <font color="#000000" size="3" face="Times New Roman">
            </font>
          </p>
          <p style="margin: 0in; font-family: Calibri; font-size: 11pt;">
            <font color="#000000" size="3" face="Times New Roman">cert2spc TempCert.cer TempCert.spc </font>
          </p>
          <p style="margin: 0in; font-family: Calibri; font-size: 11pt;">
            <font color="#000000" size="3" face="Times New Roman">pvkimprt -pfx TempCert.spc TempCert.pvk</font>
          </p>
          <p style="margin: 0in; font-family: Calibri; font-size: 11pt;">
            <font color="#000000" size="3" face="Times New Roman">
            </font>
          </p>
          <p style="margin: 0in; font-family: Calibri; font-size: 11pt;">
            <font color="#000000" size="3" face="Times New Roman">We now have four files:</font>
          </p>
          <p style="margin: 0in; font-family: Calibri; font-size: 11pt;">
            <font color="#000000" size="3" face="Times New Roman">
            </font>
          </p>
          <p style="margin: 0in; font-family: Calibri; font-size: 11pt;">
            <font color="#000000" size="3" face="Times New Roman">RootCATest.cer</font>
          </p>
          <p style="margin: 0in; font-family: Calibri; font-size: 11pt;">
            <font color="#000000" size="3" face="Times New Roman">RootCATest.crl</font>
          </p>
          <p style="margin: 0in; font-family: Calibri; font-size: 11pt;">
            <font color="#000000" size="3" face="Times New Roman">TempCert.cer</font>
          </p>
          <p style="margin: 0in; font-family: Calibri; font-size: 11pt;">
            <font color="#000000" size="3" face="Times New Roman">TempCert.pvk</font>
          </p>
          <p style="margin: 0in; font-family: Calibri; font-size: 11pt;">
            <font color="#000000" size="3" face="Times New Roman">
            </font>
          </p>
          <p style="margin: 0in; font-family: Calibri; font-size: 11pt;">
            <font color="#000000" size="3" face="Times New Roman">The next step is to install
         these on the appropriate machines. I could not get certmgr to work properly to do
         an automated install.<span style=""></span>The Winhttpcertcfg tool works for PKCS12
         format files, but not CER format files. We will use the MMC snap-in for this.</font>
          </p>
          <p style="margin: 0in; font-family: Calibri; font-size: 11pt;">
            <font color="#000000" size="3" face="Times New Roman">
            </font>
          </p>
          <p style="margin: 0in; font-family: Calibri; font-size: 11pt;">
            <font color="#000000" size="3" face="Times New Roman">
            </font>
          </p>
          <p style="margin: 0in; font-family: Calibri; font-size: 11pt;">
            <font color="#000000" size="3" face="Times New Roman">Run the mmc snapin tool (type
         mmc in the Run menu). First we will open the Certificates snap-in.<span style=""></span>Choose:
         Add/Remove Snap-In.</font>
          </p>
          <p style="margin: 0in; font-family: Calibri; font-size: 11pt;">
            <font color="#000000" size="3" face="Times New Roman">
            </font>
          </p>
        </ul>
        <p>
          <font color="#000000" size="3" face="Times New Roman">
            <img src="content/binary/MMC1.bmp" border="0" />
          </font>
        </p>
        <ul style="margin-left: 0.0201in; direction: ltr; unicode-bidi: embed; margin-top: 0in; margin-bottom: 0in;">
          <p style="margin: 0in;">
            <font color="#000000" size="3" face="Times New Roman">
              <br />
            </font>
          </p>
          <p style="margin: 0in; font-family: Calibri; font-size: 11pt;">
            <font color="#000000" size="3" face="Times New Roman">
            </font>
          </p>
          <p style="margin: 0in; font-family: Calibri; font-size: 11pt;">
            <font color="#000000" size="3" face="Times New Roman">Then Add the Certficate Snap-In.</font>
          </p>
          <p style="margin: 0in; font-family: Calibri; font-size: 11pt;">
            <font color="#000000" size="3" face="Times New Roman">
            </font>
          </p>
        </ul>
        <p>
          <font color="#000000" size="3" face="Times New Roman">
            <img src="content/binary/MMC2.bmp" border="0" />
          </font>
        </p>
        <ul style="margin-left: 0.0201in; direction: ltr; unicode-bidi: embed; margin-top: 0in; margin-bottom: 0in;">
          <p style="margin: 0in;">
            <font color="#000000" size="3" face="Times New Roman">
              <br />
            </font>
          </p>
          <p style="margin: 0in; font-family: Calibri; font-size: 11pt;">
            <font color="#000000" size="3" face="Times New Roman">
            </font>
          </p>
          <p style="margin: 0in; font-family: Calibri; font-size: 11pt;">
            <font color="#000000" size="3" face="Times New Roman">
            </font>
          </p>
          <p style="margin: 0in; font-family: Calibri; font-size: 11pt;">
            <font color="#000000" size="3" face="Times New Roman">When you add the snap-in, choose
         local computer account for the computer you want to install the certificate (usually
         the local one).</font>
          </p>
          <p style="margin: 0in; font-family: Calibri; font-size: 11pt;">
            <font color="#000000" size="3" face="Times New Roman">
              <br />
            </font>
          </p>
          <p style="margin: 0in; font-family: Calibri; font-size: 11pt;">
            <font color="#000000" size="3" face="Times New Roman">We want to install the root
         certificate on both the client and service machines<span style=""></span>in the Trusted
         Root Certificate Store.<span style=""></span></font>
          </p>
          <p style="margin: 0in; font-family: Calibri; font-size: 11pt;">
            <font color="#000000" size="3" face="Times New Roman">
            </font>
          </p>
          <p style="margin: 0in; font-family: Calibri; font-size: 11pt;">
            <font color="#000000" size="3" face="Times New Roman">
            </font>
          </p>
        </ul>
        <p>
          <font color="#000000" size="3" face="Times New Roman">
            <img src="content/binary/MMC3.bmp" border="0" />
          </font>
        </p>
        <ul style="margin-left: 0.0201in; direction: ltr; unicode-bidi: embed; margin-top: 0in; margin-bottom: 0in;">
          <p style="margin: 0in; font-family: Calibri; font-size: 11pt;">
            <font color="#000000" size="3" face="Times New Roman">
            </font>
          </p>
          <p style="margin: 0in; font-family: Calibri; font-size: 11pt;">
            <font color="#000000" size="3" face="Times New Roman">Select that store, right mouse
         click and install both the RootCATest.cer and RootCATest.crl files.<span style=""></span>On
         the client side you want to install only the public key in the TempCert.cer file.<span style=""></span>On
         the service side only you want to install the PKCS12 format file (TempCert.pvk) which
         has the private key for the certificate. Install that in the Personal store. For private
         key installation you will have to provide the password for the PKCS12 file.</font>
          </p>
          <p style="margin: 0in; font-family: Calibri; font-size: 11pt;">
            <font color="#000000" size="3" face="Times New Roman">
            </font>
          </p>
          <p style="margin: 0in; font-family: Calibri; font-size: 11pt;">
            <font color="#000000" size="3" face="Times New Roman">On the service side, we need
         to give the identity of the running process (NETWORK SERVICE) the rights to read the
         private key. We use two tools FindPrivateKey and cacls to do this. Run the following
         command:</font>
          </p>
          <p style="margin: 0in; font-family: Calibri; font-size: 11pt;">
            <font color="#000000" size="3" face="Times New Roman">
            </font>
          </p>
          <p style="margin: 0in; font-family: Calibri; font-size: 11pt;">
            <font color="#000000" size="3" face="Times New Roman">for /F "delims=" %%i in ('FindPrivateKey.exe
         My LocalMachine -n "CN=TempITNCert" -a') do (cacls.exe "%%i" /E /G "NT AUTHORITY\NETWORK
         SERVICE":R)</font>
          </p>
          <p style="margin: 0in; font-family: Calibri; font-size: 11pt;">
            <font color="#000000" size="3" face="Times New Roman">
            </font>
          </p>
          <p style="margin: 0in; font-family: Calibri; font-size: 11pt;">
            <font color="#000000" size="3" face="Times New Roman">Remember to delete these certificates
         when you are finished with them.</font>
          </p>
        </ul>
        <p style="margin: 0in;">
          <font color="#000000" size="3" face="Times New Roman">
          </font>
        </p>
        <p style="margin: 0in; font-family: Calibri; font-size: 11pt;">
          <font color="#000000" size="3" face="Times New Roman">
          </font>
        </p>
        <p style="margin: 0in; font-family: Calibri; font-size: 11pt;">
          <font color="#000000" size="3" face="Times New Roman">
          </font>
        </p>
        <p style="margin: 0in; font-family: Calibri; font-size: 11pt;">
          <font color="#000000" size="3" face="Times New Roman">
          </font>
        </p>
        <p>
          <font color="#000000" size="3" face="Times New Roman">
            <br />
          </font>
        </p>
        <br />
        <img width="0" height="0" src="http://www.reliablesoftware.com/DasBlog/aggbug.ashx?id=6507b2c6-473e-4ddc-9e66-8a161e5df6e9" />
      </body>
      <title>Developing with X509 Certificates</title>
      <guid>http://www.reliablesoftware.com/DasBlog/PermaLink,guid,6507b2c6-473e-4ddc-9e66-8a161e5df6e9.aspx</guid>
      <link>http://www.reliablesoftware.com/DasBlog/PermaLink,guid,6507b2c6-473e-4ddc-9e66-8a161e5df6e9.aspx</link>
      <pubDate>Wed, 10 Sep 2008 01:07:45 GMT</pubDate>
      <description>&lt;ul style="margin-left: 0.0201in; direction: ltr; unicode-bidi: embed; margin-top: 0in; margin-bottom: 0in;"&gt;
   &lt;p style="margin: 0in; font-family: Calibri; font-size: 11pt;"&gt;
      &lt;font color="#000000" size="3" face="Times New Roman"&gt;To further simplify the example,
      let us assume that the we want to use the certificate to encrypt a message from the
      client to the service. It is easy to apply what we discuss here to other scenarios.&lt;/font&gt;
   &lt;/p&gt;
   &lt;p style="margin: 0in; font-family: Calibri; font-size: 11pt;"&gt;
      &lt;font color="#000000" size="3" face="Times New Roman"&gt; &lt;/font&gt;
   &lt;/p&gt;
   &lt;p style="margin: 0in; font-family: Calibri; font-size: 11pt;"&gt;
      &lt;font color="#000000" size="3" face="Times New Roman"&gt;As we discussed in the&lt;a href="http://www.reliablesoftware.com/DasBlog/PermaLink,guid,c953fbc9-34f2-48d4-ba33-55d621a48d7f.aspx"&gt; previous
      post&lt;/a&gt;, we need to generate two certificates, the root certificate that represents
      the Certificate Authority, and the certificate that represents the identity of the
      client or service. We will also create a Certificate Revocation List (CRL).&lt;/font&gt;
   &lt;/p&gt;
   &lt;p style="margin: 0in; font-family: Calibri; font-size: 11pt;"&gt;
      &lt;font color="#000000" size="3" face="Times New Roman"&gt; &lt;/font&gt;
   &lt;/p&gt;
   &lt;p style="margin: 0in; font-family: Calibri; font-size: 11pt;"&gt;
      &lt;font color="#000000" size="3" face="Times New Roman"&gt;We will use a tool called makeCert
      to generate our certificates. Makecert, which ships with the .NET platform,&lt;span style=""&gt; &lt;/span&gt;allows
      you to build an X509 certificate that can be used for development and testing. It
      does three things:&lt;/font&gt;
   &lt;/p&gt;
   &lt;ol style="margin-left: 0.375in; direction: ltr; unicode-bidi: embed; margin-top: 0in; margin-bottom: 0in; font-family: Calibri; font-size: 11pt;" type="1"&gt;
      &lt;li value="1" style="margin-top: 0pt; margin-bottom: 0pt; vertical-align: middle;"&gt;
         &lt;p&gt;
            &lt;font color="#000000" size="3" face="Times New Roman"&gt;&lt;span style="font-family: Calibri; font-size: 11pt;"&gt;Generates
            a public and private key&lt;/span&gt;&lt;/font&gt;
         &lt;/p&gt;
      &lt;/li&gt;
      &lt;li value="2" style="margin-top: 0pt; margin-bottom: 0pt; vertical-align: middle;"&gt;
         &lt;p&gt;
            &lt;font color="#000000" size="3" face="Times New Roman"&gt;&lt;span style="font-family: Calibri; font-size: 11pt;"&gt;It
            associates the key pair with a name&lt;/span&gt;&lt;/font&gt;
         &lt;/p&gt;
      &lt;/li&gt;
      &lt;li value="3" style="margin-top: 0pt; margin-bottom: 0pt; vertical-align: middle;"&gt;
         &lt;p&gt;
            &lt;font color="#000000" size="3" face="Times New Roman"&gt;&lt;span style="font-family: Calibri; font-size: 11pt;"&gt;It
            binds the name with the public key.&lt;/span&gt;&lt;/font&gt;
         &lt;/p&gt;
      &lt;/li&gt;
   &lt;/ol&gt;
   &lt;p style="margin: 0in 0in 0in 0.375in; font-family: Calibri; font-size: 11pt;"&gt;
      &lt;font color="#000000" size="3" face="Times New Roman"&gt; &lt;/font&gt;
   &lt;/p&gt;
   &lt;p style="margin: 0in; font-family: Calibri; font-size: 11pt;"&gt;
      &lt;font color="#000000" size="3" face="Times New Roman"&gt;Many of the published examples
      use makecert to both create and install the certificate. We will do the installation
      in a separate step because this approach is closer to the use of real certificates.&lt;span style=""&gt; &lt;/span&gt;Separating
      the certificates also allows the certificates to be installed on many machines instead
      of just one. This makes distributing certificates to developer machines much easier. &lt;/font&gt;
   &lt;/p&gt;
   &lt;p style="margin: 0in 0in 0in 0.375in; font-family: Calibri; font-size: 11pt;"&gt;
      &lt;font color="#000000" size="3" face="Times New Roman"&gt; &lt;/font&gt;
   &lt;/p&gt;
   &lt;p style="margin: 0in; font-family: Calibri; font-size: 11pt;"&gt;
      &lt;font color="#000000" size="3" face="Times New Roman"&gt;First we will create the Root
      Certificate with the following command:&lt;/font&gt;
   &lt;/p&gt;
   &lt;p style="margin: 0in; font-family: Calibri; font-size: 11pt;"&gt;
      &lt;font color="#000000" size="3" face="Times New Roman"&gt; &lt;/font&gt;
   &lt;/p&gt;
   &lt;p style="margin: 0in 0in 0in 0.375in; font-family: Calibri; font-size: 11pt;"&gt;
      &lt;font color="#000000" size="3" face="Times New Roman"&gt;makecert -sv RootCATest.pvk
      -r -n "CN=RootCATest" RootCATest.cer&lt;/font&gt;
   &lt;/p&gt;
   &lt;p style="margin: 0in; font-family: Calibri; font-size: 11pt;"&gt;
      &lt;font color="#000000" size="3" face="Times New Roman"&gt; &lt;/font&gt;
   &lt;/p&gt;
   &lt;p style="margin: 0in; font-family: Calibri; font-size: 11pt;"&gt;
      &lt;font color="#000000" size="3" face="Times New Roman"&gt;-n specifies the name for the
      root certificate authority. The convention is to prefix the name with "CN=" where
      CN stands for "Common Name"&lt;/font&gt;
   &lt;/p&gt;
   &lt;p style="margin: 0in; font-family: Calibri; font-size: 11pt;"&gt;
      &lt;font color="#000000" size="3" face="Times New Roman"&gt;-r indicates that the certificate
      will be a root certificate because it is self-signed.&lt;/font&gt;
   &lt;/p&gt;
   &lt;p style="margin: 0in; font-family: Calibri; font-size: 11pt;"&gt;
      &lt;font color="#000000" size="3" face="Times New Roman"&gt;-sv specifies the file that
      contains the private key. The private key will be used for signing certificates issued
      by this certificate authority. Makecert will ask you for a password to protect the
      private key in the file.&lt;/font&gt;
   &lt;/p&gt;
   &lt;p style="margin: 0in; font-family: Calibri; font-size: 11pt;"&gt;
      &lt;font color="#000000" size="3" face="Times New Roman"&gt; &lt;/font&gt;
   &lt;/p&gt;
   &lt;p style="margin: 0in; font-family: Calibri; font-size: 11pt;"&gt;
      &lt;font color="#000000" size="3" face="Times New Roman"&gt;The file RootCATest.cer will
      just have the public key. It is in the&lt;span style=""&gt; &lt;/span&gt;Canonical Encoding Rules
      (CER) format. This is the file that will be installed on machines as the root of the
      trust chain.&lt;/font&gt;
   &lt;/p&gt;
   &lt;p style="margin: 0in; font-family: Calibri; font-size: 11pt;"&gt;
      &lt;font color="#000000" size="3" face="Times New Roman"&gt; &lt;/font&gt;
   &lt;/p&gt;
   &lt;p style="margin: 0in; font-family: Calibri; font-size: 11pt;"&gt;
      &lt;font color="#000000" size="3" face="Times New Roman"&gt;Next we will create a certificate
      revocation list.&lt;/font&gt;
   &lt;/p&gt;
   &lt;p style="margin: 0in; font-family: Calibri; font-size: 11pt;"&gt;
      &lt;font color="#000000" size="3" face="Times New Roman"&gt; &lt;/font&gt;
   &lt;/p&gt;
   &lt;p style="margin: 0in; font-family: Calibri; font-size: 11pt;"&gt;
      &lt;font color="#000000" size="3" face="Times New Roman"&gt;makecert -crl -n "CN=RootCATest"
      -r -sv RootCATest.pvk RootCATest.crl&lt;/font&gt;
   &lt;/p&gt;
   &lt;p style="margin: 0in; font-family: Calibri; font-size: 11pt;"&gt;
      &lt;font color="#000000" size="3" face="Times New Roman"&gt; &lt;/font&gt;
   &lt;/p&gt;
   &lt;p style="margin: 0in; font-family: Calibri; font-size: 11pt;"&gt;
      &lt;font color="#000000" size="3" face="Times New Roman"&gt;-crl indicates we are creating
      a revocation list&lt;/font&gt;
   &lt;/p&gt;
   &lt;p style="margin: 0in; font-family: Calibri; font-size: 11pt;"&gt;
      &lt;font color="#000000" size="3" face="Times New Roman"&gt;-n is the name of the root certificate
      authority&lt;/font&gt;
   &lt;/p&gt;
   &lt;p style="margin: 0in; font-family: Calibri; font-size: 11pt;"&gt;
      &lt;font color="#000000" size="3" face="Times New Roman"&gt;-r indicates that this is the
      CRL for the root certificate, it is self-signed&lt;/font&gt;
   &lt;/p&gt;
   &lt;p style="margin: 0in; font-family: Calibri; font-size: 11pt;"&gt;
      &lt;font color="#000000" size="3" face="Times New Roman"&gt;-sv indicates the file that
      contains the private key&lt;/font&gt;
   &lt;/p&gt;
   &lt;p style="margin: 0in; font-family: Calibri; font-size: 11pt;"&gt;
      &lt;font color="#000000" size="3" face="Times New Roman"&gt; &lt;/font&gt;
   &lt;/p&gt;
   &lt;p style="margin: 0in; font-family: Calibri; font-size: 11pt;"&gt;
      &lt;font color="#000000" size="3" face="Times New Roman"&gt;RootCATest.crl is the name of
      the CRL file.&lt;/font&gt;
   &lt;/p&gt;
   &lt;p style="margin: 0in; font-family: Calibri; font-size: 11pt;"&gt;
      &lt;font color="#000000" size="3" face="Times New Roman"&gt; &lt;/font&gt;
   &lt;/p&gt;
   &lt;p style="margin: 0in; font-family: Calibri; font-size: 11pt;"&gt;
      &lt;font color="#000000" size="3" face="Times New Roman"&gt;At this point we could install
      the root certificate, but we will wait until we finish with the certificate we will
      use in our scenario.&lt;span style=""&gt; &lt;/span&gt;Here we need two files. We will need a
      CER file for the client machine so that we can install the public key associated with
      the service. Then we will create a PKCS12&lt;span style=""&gt; &lt;/span&gt;format file that will
      be used to install the public and private key in the service.&lt;/font&gt;
   &lt;/p&gt;
   &lt;p style="margin: 0in; font-family: Calibri; font-size: 11pt;"&gt;
      &lt;font color="#000000" size="3" face="Times New Roman"&gt; &lt;/font&gt;
   &lt;/p&gt;
   &lt;p style="margin: 0in; font-family: Calibri; font-size: 11pt;"&gt;
      &lt;font color="#000000" size="3" face="Times New Roman"&gt;The initial step is :&lt;/font&gt;
   &lt;/p&gt;
   &lt;p style="margin: 0in; font-family: Calibri; font-size: 11pt;"&gt;
      &lt;font color="#000000" size="3" face="Times New Roman"&gt; &lt;/font&gt;
   &lt;/p&gt;
   &lt;p style="margin: 0in; font-family: Calibri; font-size: 11pt;"&gt;
      &lt;font color="#000000" size="3" face="Times New Roman"&gt;makecert -ic RootCATest.cer
      -iv RootCATest.pvk -n "CN=TempCert" -sv&lt;span style=""&gt; &lt;/span&gt;TempCert.pvk -pe -sky
      exchange TempCert.cer&lt;/font&gt;
   &lt;/p&gt;
   &lt;p style="margin: 0in; font-family: Calibri; font-size: 11pt;"&gt;
      &lt;font color="#000000" size="3" face="Times New Roman"&gt; &lt;/font&gt;
   &lt;/p&gt;
   &lt;p style="margin: 0in; font-family: Calibri; font-size: 11pt;"&gt;
      &lt;font color="#000000" size="3" face="Times New Roman"&gt;-n specifies the name for the
      certificate&lt;/font&gt;
   &lt;/p&gt;
   &lt;p style="margin: 0in; font-family: Calibri; font-size: 11pt;"&gt;
      &lt;font color="#000000" size="3" face="Times New Roman"&gt;-sv specifies the file for the
      certificate. This must be unique for each certificate created. If you try to reuse
      a name, you will get an error message .&lt;/font&gt;
   &lt;/p&gt;
   &lt;p style="margin: 0in; font-family: Calibri; font-size: 11pt;"&gt;
      &lt;font color="#000000" size="3" face="Times New Roman"&gt;-iv specifies the name of the
      container file for the private key of the root certificate created in the first step.&lt;/font&gt;
   &lt;/p&gt;
   &lt;p style="margin: 0in; font-family: Calibri; font-size: 11pt;"&gt;
      &lt;font color="#000000" size="3" face="Times New Roman"&gt;-ic specifies the name of the
      root certificate file created in the first step&lt;/font&gt;
   &lt;/p&gt;
   &lt;p style="margin: 0in; font-family: Calibri; font-size: 11pt;"&gt;
      &lt;font color="#000000" size="3" face="Times New Roman"&gt;-sky specifies what kind of
      key we are creating. Using the exchange option enables the certificate to be used
      for signing and encrypting the message.&lt;/font&gt;
   &lt;/p&gt;
   &lt;p style="margin: 0in; font-family: Calibri; font-size: 11pt;"&gt;
      &lt;font color="#000000" size="3" face="Times New Roman"&gt;-pe specifies that the private
      key is exportable and is included with the certificate. For message security is this
      required because you need the corresponding private key.&lt;span style=""&gt; &lt;/span&gt;&lt;/font&gt;
   &lt;/p&gt;
   &lt;p style="margin: 0in; font-family: Calibri; font-size: 11pt;"&gt;
      &lt;font color="#000000" size="3" face="Times New Roman"&gt; &lt;/font&gt;
   &lt;/p&gt;
   &lt;p style="margin: 0in; font-family: Calibri; font-size: 11pt;"&gt;
      &lt;font color="#000000" size="3" face="Times New Roman"&gt;The name of the CER file for
      the certificate is specified at the end of the command.&lt;/font&gt;
   &lt;/p&gt;
   &lt;p style="margin: 0in; font-family: Calibri; font-size: 11pt;"&gt;
      &lt;font color="#000000" size="3" face="Times New Roman"&gt; &lt;/font&gt;
   &lt;/p&gt;
   &lt;p style="margin: 0in; font-family: Calibri; font-size: 11pt;"&gt;
      &lt;font color="#000000" size="3" face="Times New Roman"&gt;Now we need to create the PKCS12
      file. We will use a the Software Publisher Certificate Test Tool to create a Software
      Publisher's Certificate. You use this format to create the PKCS12 file using the pvkimprt
      tool. &lt;/font&gt;
   &lt;/p&gt;
   &lt;p style="margin: 0in; font-family: Calibri; font-size: 11pt;"&gt;
      &lt;font color="#000000" size="3" face="Times New Roman"&gt; &lt;/font&gt;
   &lt;/p&gt;
   &lt;p style="margin: 0in; font-family: Calibri; font-size: 11pt;"&gt;
      &lt;font color="#000000" size="3" face="Times New Roman"&gt;cert2spc TempCert.cer TempCert.spc &lt;/font&gt;
   &lt;/p&gt;
   &lt;p style="margin: 0in; font-family: Calibri; font-size: 11pt;"&gt;
      &lt;font color="#000000" size="3" face="Times New Roman"&gt;pvkimprt -pfx TempCert.spc TempCert.pvk&lt;/font&gt;
   &lt;/p&gt;
   &lt;p style="margin: 0in; font-family: Calibri; font-size: 11pt;"&gt;
      &lt;font color="#000000" size="3" face="Times New Roman"&gt; &lt;/font&gt;
   &lt;/p&gt;
   &lt;p style="margin: 0in; font-family: Calibri; font-size: 11pt;"&gt;
      &lt;font color="#000000" size="3" face="Times New Roman"&gt;We now have four files:&lt;/font&gt;
   &lt;/p&gt;
   &lt;p style="margin: 0in; font-family: Calibri; font-size: 11pt;"&gt;
      &lt;font color="#000000" size="3" face="Times New Roman"&gt; &lt;/font&gt;
   &lt;/p&gt;
   &lt;p style="margin: 0in; font-family: Calibri; font-size: 11pt;"&gt;
      &lt;font color="#000000" size="3" face="Times New Roman"&gt;RootCATest.cer&lt;/font&gt;
   &lt;/p&gt;
   &lt;p style="margin: 0in; font-family: Calibri; font-size: 11pt;"&gt;
      &lt;font color="#000000" size="3" face="Times New Roman"&gt;RootCATest.crl&lt;/font&gt;
   &lt;/p&gt;
   &lt;p style="margin: 0in; font-family: Calibri; font-size: 11pt;"&gt;
      &lt;font color="#000000" size="3" face="Times New Roman"&gt;TempCert.cer&lt;/font&gt;
   &lt;/p&gt;
   &lt;p style="margin: 0in; font-family: Calibri; font-size: 11pt;"&gt;
      &lt;font color="#000000" size="3" face="Times New Roman"&gt;TempCert.pvk&lt;/font&gt;
   &lt;/p&gt;
   &lt;p style="margin: 0in; font-family: Calibri; font-size: 11pt;"&gt;
      &lt;font color="#000000" size="3" face="Times New Roman"&gt; &lt;/font&gt;
   &lt;/p&gt;
   &lt;p style="margin: 0in; font-family: Calibri; font-size: 11pt;"&gt;
      &lt;font color="#000000" size="3" face="Times New Roman"&gt;The next step is to install
      these on the appropriate machines. I could not get certmgr to work properly to do
      an automated install.&lt;span style=""&gt; &lt;/span&gt;The Winhttpcertcfg tool works for PKCS12
      format files, but not CER format files. We will use the MMC snap-in for this.&lt;/font&gt;
   &lt;/p&gt;
   &lt;p style="margin: 0in; font-family: Calibri; font-size: 11pt;"&gt;
      &lt;font color="#000000" size="3" face="Times New Roman"&gt; &lt;/font&gt;
   &lt;/p&gt;
   &lt;p style="margin: 0in; font-family: Calibri; font-size: 11pt;"&gt;
      &lt;font color="#000000" size="3" face="Times New Roman"&gt; &lt;/font&gt;
   &lt;/p&gt;
   &lt;p style="margin: 0in; font-family: Calibri; font-size: 11pt;"&gt;
      &lt;font color="#000000" size="3" face="Times New Roman"&gt;Run the mmc snapin tool (type
      mmc in the Run menu). First we will open the Certificates snap-in.&lt;span style=""&gt; &lt;/span&gt;Choose:
      Add/Remove Snap-In.&lt;/font&gt;
   &lt;/p&gt;
   &lt;p style="margin: 0in; font-family: Calibri; font-size: 11pt;"&gt;
      &lt;font color="#000000" size="3" face="Times New Roman"&gt; &lt;/font&gt;
   &lt;/p&gt;
&lt;/ul&gt;
&lt;p&gt;
   &lt;font color="#000000" size="3" face="Times New Roman"&gt;&lt;img src="content/binary/MMC1.bmp" border="0"&gt;&lt;/font&gt;
&lt;/p&gt;
&lt;ul style="margin-left: 0.0201in; direction: ltr; unicode-bidi: embed; margin-top: 0in; margin-bottom: 0in;"&gt;
   &lt;p style="margin: 0in;"&gt;
      &lt;font color="#000000" size="3" face="Times New Roman"&gt;
      &lt;br&gt;
      &lt;/font&gt;
   &lt;/p&gt;
   &lt;p style="margin: 0in; font-family: Calibri; font-size: 11pt;"&gt;
      &lt;font color="#000000" size="3" face="Times New Roman"&gt; &lt;/font&gt;
   &lt;/p&gt;
   &lt;p style="margin: 0in; font-family: Calibri; font-size: 11pt;"&gt;
      &lt;font color="#000000" size="3" face="Times New Roman"&gt;Then Add the Certficate Snap-In.&lt;/font&gt;
   &lt;/p&gt;
   &lt;p style="margin: 0in; font-family: Calibri; font-size: 11pt;"&gt;
      &lt;font color="#000000" size="3" face="Times New Roman"&gt; &lt;/font&gt;
   &lt;/p&gt;
&lt;/ul&gt;
&lt;p&gt;
   &lt;font color="#000000" size="3" face="Times New Roman"&gt;&lt;img src="content/binary/MMC2.bmp" border="0"&gt;&lt;/font&gt;
&lt;/p&gt;
&lt;ul style="margin-left: 0.0201in; direction: ltr; unicode-bidi: embed; margin-top: 0in; margin-bottom: 0in;"&gt;
   &lt;p style="margin: 0in;"&gt;
      &lt;font color="#000000" size="3" face="Times New Roman"&gt;
      &lt;br&gt;
      &lt;/font&gt;
   &lt;/p&gt;
   &lt;p style="margin: 0in; font-family: Calibri; font-size: 11pt;"&gt;
      &lt;font color="#000000" size="3" face="Times New Roman"&gt; &lt;/font&gt;
   &lt;/p&gt;
   &lt;p style="margin: 0in; font-family: Calibri; font-size: 11pt;"&gt;
      &lt;font color="#000000" size="3" face="Times New Roman"&gt; &lt;/font&gt;
   &lt;/p&gt;
   &lt;p style="margin: 0in; font-family: Calibri; font-size: 11pt;"&gt;
      &lt;font color="#000000" size="3" face="Times New Roman"&gt;When you add the snap-in, choose
      local computer account for the computer you want to install the certificate (usually
      the local one).&lt;/font&gt;
   &lt;/p&gt;
   &lt;p style="margin: 0in; font-family: Calibri; font-size: 11pt;"&gt;
      &lt;font color="#000000" size="3" face="Times New Roman"&gt;
      &lt;br&gt;
      &lt;/font&gt;
   &lt;/p&gt;
   &lt;p style="margin: 0in; font-family: Calibri; font-size: 11pt;"&gt;
      &lt;font color="#000000" size="3" face="Times New Roman"&gt;We want to install the root
      certificate on both the client and service machines&lt;span style=""&gt; &lt;/span&gt;in the Trusted
      Root Certificate Store.&lt;span style=""&gt; &lt;/span&gt;&lt;/font&gt;
   &lt;/p&gt;
   &lt;p style="margin: 0in; font-family: Calibri; font-size: 11pt;"&gt;
      &lt;font color="#000000" size="3" face="Times New Roman"&gt; &lt;/font&gt;
   &lt;/p&gt;
   &lt;p style="margin: 0in; font-family: Calibri; font-size: 11pt;"&gt;
      &lt;font color="#000000" size="3" face="Times New Roman"&gt; &lt;/font&gt;
   &lt;/p&gt;
&lt;/ul&gt;
&lt;p&gt;
   &lt;font color="#000000" size="3" face="Times New Roman"&gt;&lt;img src="content/binary/MMC3.bmp" border="0"&gt;&lt;/font&gt;
&lt;/p&gt;
&lt;ul style="margin-left: 0.0201in; direction: ltr; unicode-bidi: embed; margin-top: 0in; margin-bottom: 0in;"&gt;
   &lt;p style="margin: 0in; font-family: Calibri; font-size: 11pt;"&gt;
      &lt;font color="#000000" size="3" face="Times New Roman"&gt; &lt;/font&gt;
   &lt;/p&gt;
   &lt;p style="margin: 0in; font-family: Calibri; font-size: 11pt;"&gt;
      &lt;font color="#000000" size="3" face="Times New Roman"&gt;Select that store, right mouse
      click and install both the RootCATest.cer and RootCATest.crl files.&lt;span style=""&gt; &lt;/span&gt;On
      the client side you want to install only the public key in the TempCert.cer file.&lt;span style=""&gt; &lt;/span&gt;On
      the service side only you want to install the PKCS12 format file (TempCert.pvk) which
      has the private key for the certificate. Install that in the Personal store. For private
      key installation you will have to provide the password for the PKCS12 file.&lt;/font&gt;
   &lt;/p&gt;
   &lt;p style="margin: 0in; font-family: Calibri; font-size: 11pt;"&gt;
      &lt;font color="#000000" size="3" face="Times New Roman"&gt; &lt;/font&gt;
   &lt;/p&gt;
   &lt;p style="margin: 0in; font-family: Calibri; font-size: 11pt;"&gt;
      &lt;font color="#000000" size="3" face="Times New Roman"&gt;On the service side, we need
      to give the identity of the running process (NETWORK SERVICE) the rights to read the
      private key. We use two tools FindPrivateKey and cacls to do this. Run the following
      command:&lt;/font&gt;
   &lt;/p&gt;
   &lt;p style="margin: 0in; font-family: Calibri; font-size: 11pt;"&gt;
      &lt;font color="#000000" size="3" face="Times New Roman"&gt; &lt;/font&gt;
   &lt;/p&gt;
   &lt;p style="margin: 0in; font-family: Calibri; font-size: 11pt;"&gt;
      &lt;font color="#000000" size="3" face="Times New Roman"&gt;for /F "delims=" %%i in ('FindPrivateKey.exe
      My LocalMachine -n "CN=TempITNCert" -a') do (cacls.exe "%%i" /E /G "NT AUTHORITY\NETWORK
      SERVICE":R)&lt;/font&gt;
   &lt;/p&gt;
   &lt;p style="margin: 0in; font-family: Calibri; font-size: 11pt;"&gt;
      &lt;font color="#000000" size="3" face="Times New Roman"&gt; &lt;/font&gt;
   &lt;/p&gt;
   &lt;p style="margin: 0in; font-family: Calibri; font-size: 11pt;"&gt;
      &lt;font color="#000000" size="3" face="Times New Roman"&gt;Remember to delete these certificates
      when you are finished with them.&lt;/font&gt;
   &lt;/p&gt;
&lt;/ul&gt;
&lt;p style="margin: 0in;"&gt;
   &lt;font color="#000000" size="3" face="Times New Roman"&gt; &lt;/font&gt;
&lt;/p&gt;
&lt;p style="margin: 0in; font-family: Calibri; font-size: 11pt;"&gt;
   &lt;font color="#000000" size="3" face="Times New Roman"&gt; &lt;/font&gt;
&lt;/p&gt;
&lt;p style="margin: 0in; font-family: Calibri; font-size: 11pt;"&gt;
   &lt;font color="#000000" size="3" face="Times New Roman"&gt; &lt;/font&gt;
&lt;/p&gt;
&lt;p style="margin: 0in; font-family: Calibri; font-size: 11pt;"&gt;
   &lt;font color="#000000" size="3" face="Times New Roman"&gt; &lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
   &lt;font color="#000000" size="3" face="Times New Roman"&gt;
   &lt;br&gt;
   &lt;/font&gt;
&lt;/p&gt;
&lt;br&gt;
&lt;img width="0" height="0" src="http://www.reliablesoftware.com/DasBlog/aggbug.ashx?id=6507b2c6-473e-4ddc-9e66-8a161e5df6e9" /&gt;</description>
      <comments>http://www.reliablesoftware.com/DasBlog/CommentView,guid,6507b2c6-473e-4ddc-9e66-8a161e5df6e9.aspx</comments>
      <category>Microsoft .NET;SOA;Software Development</category>
    </item>
    <item>
      <trackback:ping>http://www.reliablesoftware.com/DasBlog/Trackback.aspx?guid=c953fbc9-34f2-48d4-ba33-55d621a48d7f</trackback:ping>
      <pingback:server>http://www.reliablesoftware.com/DasBlog/pingback.aspx</pingback:server>
      <pingback:target>http://www.reliablesoftware.com/DasBlog/PermaLink,guid,c953fbc9-34f2-48d4-ba33-55d621a48d7f.aspx</pingback:target>
      <dc:creator>weblogcomments@reliablesoftware.com (Michael Stiefel)</dc:creator>
      <wfw:commentRss>http://www.reliablesoftware.com/DasBlog/SyndicationService.asmx/GetEntryCommentsRss?guid=c953fbc9-34f2-48d4-ba33-55d621a48d7f</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p style="margin: 0in; font-family: Calibri; font-size: 11pt;">
          <font color="#000000" size="3" face="Times New Roman">Working with X509 certificates
      can be very frustrating for WCF developers. </font>
        </p>
        <p style="margin: 0in; font-family: Calibri; font-size: 11pt;">
          <font color="#000000" size="3" face="Times New Roman">
          </font>
        </p>
        <p style="margin: 0in; font-family: Calibri; font-size: 11pt;">
          <font color="#000000" size="3" face="Times New Roman">This is the first of two posts.
      In this post I will explain just enough of the background for X509 certificates so
      that I can explain in the next post how to create and use certificates during .NET
      development with WCF. The second post is <a href="http://www.reliablesoftware.com/DasBlog/PermaLink,guid,6507b2c6-473e-4ddc-9e66-8a161e5df6e9.aspx">here</a>.<br /></font>
        </p>
        <p style="margin: 0in; font-family: Calibri; font-size: 11pt;">
          <font color="#000000" size="3" face="Times New Roman">
          </font>
        </p>
        <p style="margin: 0in; font-family: Calibri; font-size: 11pt;">
          <font color="#000000" size="3" face="Times New Roman">I do not know any good books
      for a developer that explains how to use certificates. Even the excellent books on
      WCF just give you the certificates you need to get the sample code to work. They do
      not really explain to you why you are installing different certificates into different
      stores, or how to generate the certificates you need to get your software to work.
      Very often the examples run on one machine with the client and service sharing the
      same store. This is not a realistic scenario.</font>
        </p>
        <p style="margin: 0in; font-family: Calibri; font-size: 11pt;">
          <font color="#000000" size="3" face="Times New Roman">
          </font>
        </p>
        <p style="margin: 0in; font-family: Calibri; font-size: 11pt;">
          <font color="#000000" size="3" face="Times New Roman">Obviously I cannot explain all
      about certificates in one blog post. I just wish to share some knowledge. Hopefully
      it will spare you some grief.</font>
        </p>
        <p style="margin: 0in; font-family: Calibri; font-size: 11pt;">
          <font color="#000000" size="3" face="Times New Roman">
          </font>
        </p>
        <p style="margin: 0in; font-family: Calibri; font-size: 11pt;">
          <font color="#000000" size="3" face="Times New Roman">Here is the problem I want to
      solve. </font>
        </p>
        <p style="margin: 0in; font-family: Calibri; font-size: 11pt;">
          <font color="#000000" size="3" face="Times New Roman">
          </font>
        </p>
        <p style="margin: 0in; font-family: Calibri; font-size: 11pt;">
          <font color="#000000" size="3" face="Times New Roman">Suppose you have a set of web
      services that is accessed by either an ASP.NET or rich client. The service requires
      the client application to use an X509 certificate to access the service. This could
      be to encrypt the data, to identify the client, to sign the data to avoid repudiation,
      or for a number of other reasons. How do you install the certificates on the client
      and service machines?</font>
        </p>
        <p style="margin: 0in; font-family: Calibri; font-size: 11pt;">
          <font color="#000000" size="3" face="Times New Roman">
          </font>
        </p>
        <p style="margin: 0in; font-family: Calibri; font-size: 11pt;">
          <font color="#000000" size="3" face="Times New Roman">Certificate technology is based
      on <a target="_blank" href="http://en.wikipedia.org/wiki/Public-key_cryptography">asymmetric
      encryption</a>.<span style=""></span></font>
        </p>
        <p style="margin: 0in; font-family: Calibri; font-size: 11pt;">
          <font color="#000000" size="3" face="Times New Roman">
          </font>
        </p>
        <p style="margin: 0in; font-family: Calibri; font-size: 11pt;">
          <font color="#000000" size="3" face="Times New Roman">In the encryption scenario,
      the client would use the public key of the service to encrypt the traffic.<span style=""></span>The
      service would use its private key to decrypt the message.<span style=""></span>In
      the identification scenario the service would use the public key of the client to
      identify a message signed with the client's private key.</font>
        </p>
        <p style="margin: 0in; font-family: Calibri; font-size: 11pt;">
          <font color="#000000" size="3" face="Times New Roman">
          </font>
        </p>
        <p style="margin: 0in; font-family: Calibri; font-size: 11pt;">
          <font color="#000000" size="3" face="Times New Roman">One of the key issues is how
      you can be sure that the public key is associated with a given identity. Perhaps somebody
      substituted their key for the one you should be using.<span style=""></span>Perhaps
      somebody is hijacking calls to the service, or you made a mistake in the address of
      the service.<span style=""></span>A classic example of these types of vulnerabilities<span style=""></span>is
      the "<a target="_blank" href="http://en.wikipedia.org/wiki/Man-in-the-middle_attack">man
      in the middle attack</a>".<span style=""></span>Another key issue is that the private
      key cannot be read or modified by unauthorized parties.</font>
        </p>
        <p style="margin: 0in; font-family: Calibri; font-size: 11pt;">
          <font color="#000000" size="3" face="Times New Roman">
          </font>
        </p>
        <p style="margin: 0in; font-family: Calibri; font-size: 11pt;">
          <font color="#000000" size="3" face="Times New Roman">Public Key Infrastructure (PKI)
      is the name for a technology that uses a certificate authority (CA) to bind the public
      key to an identity. This identity is unique to the certificate authority. X509 is
      a standard for implementing a PKI.<span style=""></span>An X509 certificate represents
      an association between an identity and a public key.</font>
        </p>
        <p style="margin: 0in; font-family: Calibri; font-size: 11pt;">
          <font color="#000000" size="3" face="Times New Roman">
          </font>
        </p>
        <p style="margin: 0in; font-family: Calibri; font-size: 11pt;">
          <font color="#000000" size="3" face="Times New Roman">An X509 certificate is issued
      by a given Certificate Authority to represent its guarantee that a public key is associated
      with a particular identity. Depending on how much you trust the CA, and the amount
      of identity verification the CA did, would determine how much trust you have in the
      certificate. For example VeriSign issues different types of certificates depending
      on how much verification was done. Sometimes organizations will be their own certificate
      authorities and issues certificates because they want the maximum amount of control.</font>
        </p>
        <p style="margin: 0in; font-family: Calibri; font-size: 11pt;">
          <font color="#000000" size="3" face="Times New Roman">
          </font>
        </p>
        <p style="margin: 0in; font-family: Calibri; font-size: 11pt;">
          <font color="#000000" size="3" face="Times New Roman">This relationship between a
      CA and its issued certificates is represented in the "chain of trust". Each X509 certificate
      is signed with the private key of the CA. In order to verify the chain of trust you
      need the CA's public key.<span style=""></span>If you are your own CA authority you
      can distribute the X509 certificate representing this "root certificate".<span style=""></span>Some
      browsers and operating systems install root certificates as part of their setup. So
      the manufacturer of the browser or operating system is part of the chain of trust.</font>
        </p>
        <p style="margin: 0in; font-family: Calibri; font-size: 11pt;">
          <font color="#000000" size="3" face="Times New Roman">
          </font>
        </p>
        <p style="margin: 0in; font-family: Calibri; font-size: 11pt;">
          <font color="#000000" size="3" face="Times New Roman">The X509 standard also includes
      a certificate revocation list (CRL) which is a mechanism for checking whether a certificate
      has been revoked by the CA.<span style=""></span>The standard does not specify how
      often this checking is done. By default, Internet Explorer and Firefox do not check
      for certificate revocation. Certificates also contain an expiration date.</font>
        </p>
        <p style="margin: 0in; font-family: Calibri; font-size: 11pt;">
          <font color="#000000" size="3" face="Times New Roman">
          </font>
        </p>
        <p style="margin: 0in; font-family: Calibri; font-size: 11pt;">
          <font color="#000000" size="3" face="Times New Roman">Another approach to trust is
      called "<a target="_blank" href="http://en.wikipedia.org/wiki/Web_of_trust">peer to
      peer</a>" trust, or "web of trust".<span style=""></span>Given the difficulties of
      peer trust it is not practical for most Internet applications. It can, however, make
      development scenarios simpler. Your development environment, however,<span style=""></span>should
      mimic your deployment environment.<span style=""></span>Hence I do not recommend
      using peer to peer trust unless that is practical for your deployed solution.</font>
        </p>
        <p style="margin: 0in; font-family: Calibri; font-size: 11pt;">
          <font color="#000000" size="3" face="Times New Roman">
          </font>
        </p>
        <p style="margin: 0in; font-family: Calibri; font-size: 11pt;">
          <font color="#000000" size="3" face="Times New Roman">There are various protocols
      for transmitting certificates.<span style=""></span>We will be interested in two
      of them.</font>
        </p>
        <p style="margin: 0in; font-family: Calibri; font-size: 11pt;">
          <font color="#000000" size="3" face="Times New Roman">
          </font>
        </p>
        <p style="margin: 0in; font-family: Calibri; font-size: 11pt;">
          <font color="#000000" size="3" face="Times New Roman">The Canonical Encoding Rules
      (CER) protocol will be used to digitally transmit the public key of a given identity.
      The PKCS12 protocol will be used to transmit the public and private keys. The private
      key will be password protected.</font>
        </p>
        <p style="margin: 0in; font-family: Calibri; font-size: 11pt;">
          <font color="#000000" size="3" face="Times New Roman">
          </font>
        </p>
        <p style="margin: 0in; font-family: Calibri; font-size: 11pt;">
          <font color="#000000" size="3" face="Times New Roman">The next post will describe
      the mechanisms for creating and installing certificates in a .NET development environment.</font>
        </p>
        <p>
        </p>
        <img width="0" height="0" src="http://www.reliablesoftware.com/DasBlog/aggbug.ashx?id=c953fbc9-34f2-48d4-ba33-55d621a48d7f" />
      </body>
      <title>X509 Certificates for Developers </title>
      <guid>http://www.reliablesoftware.com/DasBlog/PermaLink,guid,c953fbc9-34f2-48d4-ba33-55d621a48d7f.aspx</guid>
      <link>http://www.reliablesoftware.com/DasBlog/PermaLink,guid,c953fbc9-34f2-48d4-ba33-55d621a48d7f.aspx</link>
      <pubDate>Sun, 24 Aug 2008 14:02:20 GMT</pubDate>
      <description>&lt;p style="margin: 0in; font-family: Calibri; font-size: 11pt;"&gt;
   &lt;font color="#000000" size="3" face="Times New Roman"&gt;Working with X509 certificates
   can be very frustrating for WCF developers. &lt;/font&gt;
&lt;/p&gt;
&lt;p style="margin: 0in; font-family: Calibri; font-size: 11pt;"&gt;
   &lt;font color="#000000" size="3" face="Times New Roman"&gt; &lt;/font&gt;
&lt;/p&gt;
&lt;p style="margin: 0in; font-family: Calibri; font-size: 11pt;"&gt;
   &lt;font color="#000000" size="3" face="Times New Roman"&gt;This is the first of two posts.
   In this post I will explain just enough of the background for X509 certificates so
   that I can explain in the next post how to create and use certificates during .NET
   development with WCF. The second post is &lt;a href="http://www.reliablesoftware.com/DasBlog/PermaLink,guid,6507b2c6-473e-4ddc-9e66-8a161e5df6e9.aspx"&gt;here&lt;/a&gt;.&lt;br&gt;
   &lt;/font&gt;
&lt;/p&gt;
&lt;p style="margin: 0in; font-family: Calibri; font-size: 11pt;"&gt;
   &lt;font color="#000000" size="3" face="Times New Roman"&gt; &lt;/font&gt;
&lt;/p&gt;
&lt;p style="margin: 0in; font-family: Calibri; font-size: 11pt;"&gt;
   &lt;font color="#000000" size="3" face="Times New Roman"&gt;I do not know any good books
   for a developer that explains how to use certificates. Even the excellent books on
   WCF just give you the certificates you need to get the sample code to work. They do
   not really explain to you why you are installing different certificates into different
   stores, or how to generate the certificates you need to get your software to work.
   Very often the examples run on one machine with the client and service sharing the
   same store. This is not a realistic scenario.&lt;/font&gt;
&lt;/p&gt;
&lt;p style="margin: 0in; font-family: Calibri; font-size: 11pt;"&gt;
   &lt;font color="#000000" size="3" face="Times New Roman"&gt; &lt;/font&gt;
&lt;/p&gt;
&lt;p style="margin: 0in; font-family: Calibri; font-size: 11pt;"&gt;
   &lt;font color="#000000" size="3" face="Times New Roman"&gt;Obviously I cannot explain all
   about certificates in one blog post. I just wish to share some knowledge. Hopefully
   it will spare you some grief.&lt;/font&gt;
&lt;/p&gt;
&lt;p style="margin: 0in; font-family: Calibri; font-size: 11pt;"&gt;
   &lt;font color="#000000" size="3" face="Times New Roman"&gt; &lt;/font&gt;
&lt;/p&gt;
&lt;p style="margin: 0in; font-family: Calibri; font-size: 11pt;"&gt;
   &lt;font color="#000000" size="3" face="Times New Roman"&gt;Here is the problem I want to
   solve. &lt;/font&gt;
&lt;/p&gt;
&lt;p style="margin: 0in; font-family: Calibri; font-size: 11pt;"&gt;
   &lt;font color="#000000" size="3" face="Times New Roman"&gt; &lt;/font&gt;
&lt;/p&gt;
&lt;p style="margin: 0in; font-family: Calibri; font-size: 11pt;"&gt;
   &lt;font color="#000000" size="3" face="Times New Roman"&gt;Suppose you have a set of web
   services that is accessed by either an ASP.NET or rich client. The service requires
   the client application to use an X509 certificate to access the service. This could
   be to encrypt the data, to identify the client, to sign the data to avoid repudiation,
   or for a number of other reasons. How do you install the certificates on the client
   and service machines?&lt;/font&gt;
&lt;/p&gt;
&lt;p style="margin: 0in; font-family: Calibri; font-size: 11pt;"&gt;
   &lt;font color="#000000" size="3" face="Times New Roman"&gt; &lt;/font&gt;
&lt;/p&gt;
&lt;p style="margin: 0in; font-family: Calibri; font-size: 11pt;"&gt;
   &lt;font color="#000000" size="3" face="Times New Roman"&gt;Certificate technology is based
   on &lt;a target="_blank" href="http://en.wikipedia.org/wiki/Public-key_cryptography"&gt;asymmetric
   encryption&lt;/a&gt;.&lt;span style=""&gt; &lt;/span&gt;&lt;/font&gt;
&lt;/p&gt;
&lt;p style="margin: 0in; font-family: Calibri; font-size: 11pt;"&gt;
   &lt;font color="#000000" size="3" face="Times New Roman"&gt; &lt;/font&gt;
&lt;/p&gt;
&lt;p style="margin: 0in; font-family: Calibri; font-size: 11pt;"&gt;
   &lt;font color="#000000" size="3" face="Times New Roman"&gt;In the encryption scenario,
   the client would use the public key of the service to encrypt the traffic.&lt;span style=""&gt; &lt;/span&gt;The
   service would use its private key to decrypt the message.&lt;span style=""&gt; &lt;/span&gt;In
   the identification scenario the service would use the public key of the client to
   identify a message signed with the client's private key.&lt;/font&gt;
&lt;/p&gt;
&lt;p style="margin: 0in; font-family: Calibri; font-size: 11pt;"&gt;
   &lt;font color="#000000" size="3" face="Times New Roman"&gt; &lt;/font&gt;
&lt;/p&gt;
&lt;p style="margin: 0in; font-family: Calibri; font-size: 11pt;"&gt;
   &lt;font color="#000000" size="3" face="Times New Roman"&gt;One of the key issues is how
   you can be sure that the public key is associated with a given identity. Perhaps somebody
   substituted their key for the one you should be using.&lt;span style=""&gt; &lt;/span&gt;Perhaps
   somebody is hijacking calls to the service, or you made a mistake in the address of
   the service.&lt;span style=""&gt; &lt;/span&gt;A classic example of these types of vulnerabilities&lt;span style=""&gt; &lt;/span&gt;is
   the "&lt;a target="_blank" href="http://en.wikipedia.org/wiki/Man-in-the-middle_attack"&gt;man
   in the middle attack&lt;/a&gt;".&lt;span style=""&gt; &lt;/span&gt;Another key issue is that the private
   key cannot be read or modified by unauthorized parties.&lt;/font&gt;
&lt;/p&gt;
&lt;p style="margin: 0in; font-family: Calibri; font-size: 11pt;"&gt;
   &lt;font color="#000000" size="3" face="Times New Roman"&gt; &lt;/font&gt;
&lt;/p&gt;
&lt;p style="margin: 0in; font-family: Calibri; font-size: 11pt;"&gt;
   &lt;font color="#000000" size="3" face="Times New Roman"&gt;Public Key Infrastructure (PKI)
   is the name for a technology that uses a certificate authority (CA) to bind the public
   key to an identity. This identity is unique to the certificate authority. X509 is
   a standard for implementing a PKI.&lt;span style=""&gt; &lt;/span&gt;An X509 certificate represents
   an association between an identity and a public key.&lt;/font&gt;
&lt;/p&gt;
&lt;p style="margin: 0in; font-family: Calibri; font-size: 11pt;"&gt;
   &lt;font color="#000000" size="3" face="Times New Roman"&gt; &lt;/font&gt;
&lt;/p&gt;
&lt;p style="margin: 0in; font-family: Calibri; font-size: 11pt;"&gt;
   &lt;font color="#000000" size="3" face="Times New Roman"&gt;An X509 certificate is issued
   by a given Certificate Authority to represent its guarantee that a public key is associated
   with a particular identity. Depending on how much you trust the CA, and the amount
   of identity verification the CA did, would determine how much trust you have in the
   certificate. For example VeriSign issues different types of certificates depending
   on how much verification was done. Sometimes organizations will be their own certificate
   authorities and issues certificates because they want the maximum amount of control.&lt;/font&gt;
&lt;/p&gt;
&lt;p style="margin: 0in; font-family: Calibri; font-size: 11pt;"&gt;
   &lt;font color="#000000" size="3" face="Times New Roman"&gt; &lt;/font&gt;
&lt;/p&gt;
&lt;p style="margin: 0in; font-family: Calibri; font-size: 11pt;"&gt;
   &lt;font color="#000000" size="3" face="Times New Roman"&gt;This relationship between a
   CA and its issued certificates is represented in the "chain of trust". Each X509 certificate
   is signed with the private key of the CA. In order to verify the chain of trust you
   need the CA's public key.&lt;span style=""&gt; &lt;/span&gt;If you are your own CA authority you
   can distribute the X509 certificate representing this "root certificate".&lt;span style=""&gt; &lt;/span&gt;Some
   browsers and operating systems install root certificates as part of their setup. So
   the manufacturer of the browser or operating system is part of the chain of trust.&lt;/font&gt;
&lt;/p&gt;
&lt;p style="margin: 0in; font-family: Calibri; font-size: 11pt;"&gt;
   &lt;font color="#000000" size="3" face="Times New Roman"&gt; &lt;/font&gt;
&lt;/p&gt;
&lt;p style="margin: 0in; font-family: Calibri; font-size: 11pt;"&gt;
   &lt;font color="#000000" size="3" face="Times New Roman"&gt;The X509 standard also includes
   a certificate revocation list (CRL) which is a mechanism for checking whether a certificate
   has been revoked by the CA.&lt;span style=""&gt; &lt;/span&gt;The standard does not specify how
   often this checking is done. By default, Internet Explorer and Firefox do not check
   for certificate revocation. Certificates also contain an expiration date.&lt;/font&gt;
&lt;/p&gt;
&lt;p style="margin: 0in; font-family: Calibri; font-size: 11pt;"&gt;
   &lt;font color="#000000" size="3" face="Times New Roman"&gt; &lt;/font&gt;
&lt;/p&gt;
&lt;p style="margin: 0in; font-family: Calibri; font-size: 11pt;"&gt;
   &lt;font color="#000000" size="3" face="Times New Roman"&gt;Another approach to trust is
   called "&lt;a target="_blank" href="http://en.wikipedia.org/wiki/Web_of_trust"&gt;peer to
   peer&lt;/a&gt;" trust, or "web of trust".&lt;span style=""&gt; &lt;/span&gt;Given the difficulties of
   peer trust it is not practical for most Internet applications. It can, however, make
   development scenarios simpler. Your development environment, however,&lt;span style=""&gt; &lt;/span&gt;should
   mimic your deployment environment.&lt;span style=""&gt; &lt;/span&gt;Hence I do not recommend
   using peer to peer trust unless that is practical for your deployed solution.&lt;/font&gt;
&lt;/p&gt;
&lt;p style="margin: 0in; font-family: Calibri; font-size: 11pt;"&gt;
   &lt;font color="#000000" size="3" face="Times New Roman"&gt; &lt;/font&gt;
&lt;/p&gt;
&lt;p style="margin: 0in; font-family: Calibri; font-size: 11pt;"&gt;
   &lt;font color="#000000" size="3" face="Times New Roman"&gt;There are various protocols
   for transmitting certificates.&lt;span style=""&gt; &lt;/span&gt;We will be interested in two
   of them.&lt;/font&gt;
&lt;/p&gt;
&lt;p style="margin: 0in; font-family: Calibri; font-size: 11pt;"&gt;
   &lt;font color="#000000" size="3" face="Times New Roman"&gt; &lt;/font&gt;
&lt;/p&gt;
&lt;p style="margin: 0in; font-family: Calibri; font-size: 11pt;"&gt;
   &lt;font color="#000000" size="3" face="Times New Roman"&gt;The Canonical Encoding Rules
   (CER) protocol will be used to digitally transmit the public key of a given identity.
   The PKCS12 protocol will be used to transmit the public and private keys. The private
   key will be password protected.&lt;/font&gt;
&lt;/p&gt;
&lt;p style="margin: 0in; font-family: Calibri; font-size: 11pt;"&gt;
   &lt;font color="#000000" size="3" face="Times New Roman"&gt; &lt;/font&gt;
&lt;/p&gt;
&lt;p style="margin: 0in; font-family: Calibri; font-size: 11pt;"&gt;
   &lt;font color="#000000" size="3" face="Times New Roman"&gt;The next post will describe
   the mechanisms for creating and installing certificates in a .NET development environment.&lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.reliablesoftware.com/DasBlog/aggbug.ashx?id=c953fbc9-34f2-48d4-ba33-55d621a48d7f" /&gt;</description>
      <comments>http://www.reliablesoftware.com/DasBlog/CommentView,guid,c953fbc9-34f2-48d4-ba33-55d621a48d7f.aspx</comments>
      <category>Microsoft .NET;SOA;Software Development</category>
    </item>
    <item>
      <trackback:ping>http://www.reliablesoftware.com/DasBlog/Trackback.aspx?guid=1fa49845-b93c-425f-ab56-224694398cf0</trackback:ping>
      <pingback:server>http://www.reliablesoftware.com/DasBlog/pingback.aspx</pingback:server>
      <pingback:target>http://www.reliablesoftware.com/DasBlog/PermaLink,guid,1fa49845-b93c-425f-ab56-224694398cf0.aspx</pingback:target>
      <dc:creator>weblogcomments@reliablesoftware.com (Michael Stiefel)</dc:creator>
      <wfw:commentRss>http://www.reliablesoftware.com/DasBlog/SyndicationService.asmx/GetEntryCommentsRss?guid=1fa49845-b93c-425f-ab56-224694398cf0</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">On Friday, June 6 of Microsoft's Tech-Ed
   I will be hosting a Birds of a Feather Session on the topic "Software + Services is
   For Small Companies Too". It will be held in Room S330 E at noon.<br /><br />
   To continue the conversation, please add your comments and opinions to this blog post.
   If you are unable to attend feel free to add your thoughts as well here.<br /><br />
   Here are some questions to get you started thinking about the topic:<br /><br />
   What is Software + Services? 
   <br /><br />
   Are small companies afraid of software + services? Are they afraid of cloud computing?
   Why? 
   <br /><br />
   Doesn't cloud computing leverage the efforts of small companies? If cloud computing
   makes IT a commodity, doesn't this allow small companies to be even more nimble in
   their development efforts? 
   <br /><br />
   What are the real advantages that large companies have over small companies? What
   about the innovators dillemma? How do large companies keep their current customers
   happy and assure future growth through innovation? Doesn't this help small companies.
   Doesn't cloud computing help small companies innovate even more?<br /><br /><p></p><a href="http://teched2008.leveragesoftware.com/profile_view.aspx?customerid=michaelstiefel"><img src="http://teched2008.leveragesoftware.com/businesscard.aspx?customerid=michaelstiefel" alt="Join Me at Tech·Ed Connect!" border="0" /></a><img width="0" height="0" src="http://www.reliablesoftware.com/DasBlog/aggbug.ashx?id=1fa49845-b93c-425f-ab56-224694398cf0" /></body>
      <title>Software + Services Is For Small Companies Too</title>
      <guid>http://www.reliablesoftware.com/DasBlog/PermaLink,guid,1fa49845-b93c-425f-ab56-224694398cf0.aspx</guid>
      <link>http://www.reliablesoftware.com/DasBlog/PermaLink,guid,1fa49845-b93c-425f-ab56-224694398cf0.aspx</link>
      <pubDate>Mon, 02 Jun 2008 02:47:05 GMT</pubDate>
      <description>On Friday, June 6 of Microsoft's Tech-Ed I will be hosting a Birds of a Feather Session on the topic "Software + Services is For Small Companies Too". It will be held in Room S330 E at noon.&lt;br&gt;
&lt;br&gt;
To continue the conversation, please add your comments and opinions to this blog post.
If you are unable to attend feel free to add your thoughts as well here.&lt;br&gt;
&lt;br&gt;
Here are some questions to get you started thinking about the topic:&lt;br&gt;
&lt;br&gt;
What is Software + Services? 
&lt;br&gt;
&lt;br&gt;
Are small companies afraid of software + services? Are they afraid of cloud computing?
Why? 
&lt;br&gt;
&lt;br&gt;
Doesn't cloud computing leverage the efforts of small companies? If cloud computing
makes IT a commodity, doesn't this allow small companies to be even more nimble in
their development efforts? 
&lt;br&gt;
&lt;br&gt;
What are the real advantages that large companies have over small companies? What
about the innovators dillemma? How do large companies keep their current customers
happy and assure future growth through innovation? Doesn't this help small companies.
Doesn't cloud computing help small companies innovate even more?&lt;br&gt;
&lt;br&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;a href="http://teched2008.leveragesoftware.com/profile_view.aspx?customerid=michaelstiefel"&gt;&lt;img src="http://teched2008.leveragesoftware.com/businesscard.aspx?customerid=michaelstiefel" alt="Join Me at Tech·Ed Connect!" border="0"&gt;&lt;/a&gt; &lt;img width="0" height="0" src="http://www.reliablesoftware.com/DasBlog/aggbug.ashx?id=1fa49845-b93c-425f-ab56-224694398cf0" /&gt;</description>
      <comments>http://www.reliablesoftware.com/DasBlog/CommentView,guid,1fa49845-b93c-425f-ab56-224694398cf0.aspx</comments>
      <category>Microsoft .NET;SOA;Software Development</category>
    </item>
    <item>
      <trackback:ping>http://www.reliablesoftware.com/DasBlog/Trackback.aspx?guid=457b4176-fa3c-45c8-8927-31a3b5126dab</trackback:ping>
      <pingback:server>http://www.reliablesoftware.com/DasBlog/pingback.aspx</pingback:server>
      <pingback:target>http://www.reliablesoftware.com/DasBlog/PermaLink,guid,457b4176-fa3c-45c8-8927-31a3b5126dab.aspx</pingback:target>
      <dc:creator>weblogcomments@reliablesoftware.com (Michael Stiefel)</dc:creator>
      <wfw:commentRss>http://www.reliablesoftware.com/DasBlog/SyndicationService.asmx/GetEntryCommentsRss?guid=457b4176-fa3c-45c8-8927-31a3b5126dab</wfw:commentRss>
      <slash:comments>1</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">I have put my VSLive! talk, explaining
   how to use Windows Comunication Foundation and Windows Workflow Foundation together
   to create distributed applications in the Presentations section of my web site.<br /><p></p><img width="0" height="0" src="http://www.reliablesoftware.com/DasBlog/aggbug.ashx?id=457b4176-fa3c-45c8-8927-31a3b5126dab" /></body>
      <title>Workflow Services Using WCF and WF Uploaded</title>
      <guid>http://www.reliablesoftware.com/DasBlog/PermaLink,guid,457b4176-fa3c-45c8-8927-31a3b5126dab.aspx</guid>
      <link>http://www.reliablesoftware.com/DasBlog/PermaLink,guid,457b4176-fa3c-45c8-8927-31a3b5126dab.aspx</link>
      <pubDate>Fri, 04 Apr 2008 02:36:37 GMT</pubDate>
      <description>I have put my VSLive! talk, explaining how to use Windows Comunication Foundation and Windows Workflow Foundation together to create distributed applications in the Presentations section of my web site.&lt;br&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.reliablesoftware.com/DasBlog/aggbug.ashx?id=457b4176-fa3c-45c8-8927-31a3b5126dab" /&gt;</description>
      <comments>http://www.reliablesoftware.com/DasBlog/CommentView,guid,457b4176-fa3c-45c8-8927-31a3b5126dab.aspx</comments>
      <category>All;Microsoft .NET;SOA;Workflow</category>
    </item>
    <item>
      <trackback:ping>http://www.reliablesoftware.com/DasBlog/Trackback.aspx?guid=fe8fda89-cbf3-4f8e-82c2-b199e37bf19d</trackback:ping>
      <pingback:server>http://www.reliablesoftware.com/DasBlog/pingback.aspx</pingback:server>
      <pingback:target>http://www.reliablesoftware.com/DasBlog/PermaLink,guid,fe8fda89-cbf3-4f8e-82c2-b199e37bf19d.aspx</pingback:target>
      <dc:creator>weblogcomments@reliablesoftware.com (Michael Stiefel)</dc:creator>
      <wfw:commentRss>http://www.reliablesoftware.com/DasBlog/SyndicationService.asmx/GetEntryCommentsRss?guid=fe8fda89-cbf3-4f8e-82c2-b199e37bf19d</wfw:commentRss>
      <title>When Is a Well Known Problem Not Well Known?</title>
      <guid>http://www.reliablesoftware.com/DasBlog/PermaLink,guid,fe8fda89-cbf3-4f8e-82c2-b199e37bf19d.aspx</guid>
      <link>http://www.reliablesoftware.com/DasBlog/PermaLink,guid,fe8fda89-cbf3-4f8e-82c2-b199e37bf19d.aspx</link>
      <pubDate>Fri, 28 Mar 2008 18:03:06 GMT</pubDate>
      <description>Quick answer: When I don't know about it? When two experienced co-workers do not know also?&lt;br&gt;
&lt;br&gt;
I was working on a workflow code sample for an upcoming talk, when I started getting
ridculous compilation errors. 
&lt;br&gt;
&lt;br&gt;
The compiler could not find the rules definition file when it was clearly available.
The workflow designer could find it because I could associate it with a policy activity.
The compiler falsely complained about an incorrect type association in a data bind,
but it was clearly correct. Once again the designer had no problem doing the data
bind.&lt;br&gt;
&lt;br&gt;
I tried to find an answer on Google with little success. After two hours of experimenting,
I tried a different Google query and came up with the following link: &lt;a href="https://forums.microsoft.com/MSDN/ShowPost.aspx?PostID=612335&amp;SiteID=1"&gt;https://forums.microsoft.com/MSDN/ShowPost.aspx?PostID=612335&amp;SiteID=1.&lt;/a&gt;
&lt;br&gt;
&lt;br&gt;
The essence of the solution is the following:&lt;br&gt;
&lt;p&gt;
   &lt;font color="#000000"&gt;"this is a well-known problem with code files that have desigable
   classes in them - the class that is to be designed has to be the first class in the
   file. If you do the same thing in windows forms you get the following error: the class
   Form1 can be designed, but is not the first class in the file. Visual Studio requires
   that designers use the first class in the file. Move the class code so that it is
   the first class in the file and try loading the designer again."&lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
   &lt;font color="#000000"&gt;It turns out I had changed a struct that was defined first in
   my file to a class. I moved that class to the end of the file and "mirabile dictu"
   everything worked.&lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
   &lt;font color="#000000"&gt;So if this is a well known problem, why can't we get an error
   message just like in the Windows Forms case? 
   &lt;br&gt;
   &lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
   &lt;font color="#000000"&gt;While it was clearly my mistake, Microsoft has a share of the
   blame here. Clearly this requirement makes it easier to build the workflow designer.
   It would have been just as easy to check if this class was not defined first, and
   issue an error message.&lt;/font&gt;
   &lt;br&gt;
&lt;/p&gt;
&lt;font color="#000000"&gt;&lt;span&gt; &lt;/span&gt;&lt;/font&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.reliablesoftware.com/DasBlog/aggbug.ashx?id=fe8fda89-cbf3-4f8e-82c2-b199e37bf19d" /&gt;</description>
      <comments>http://www.reliablesoftware.com/DasBlog/CommentView,guid,fe8fda89-cbf3-4f8e-82c2-b199e37bf19d.aspx</comments>
      <category>All;Microsoft .NET;Software Development;Workflow</category>
    </item>
    <item>
      <trackback:ping>http://www.reliablesoftware.com/DasBlog/Trackback.aspx?guid=5b1e5222-d09f-4000-a9ef-e3cd200dd5ef</trackback:ping>
      <pingback:server>http://www.reliablesoftware.com/DasBlog/pingback.aspx</pingback:server>
      <pingback:target>http://www.reliablesoftware.com/DasBlog/PermaLink,guid,5b1e5222-d09f-4000-a9ef-e3cd200dd5ef.aspx</pingback:target>
      <dc:creator>weblogcomments@reliablesoftware.com (Michael Stiefel)</dc:creator>
      <wfw:commentRss>http://www.reliablesoftware.com/DasBlog/SyndicationService.asmx/GetEntryCommentsRss?guid=5b1e5222-d09f-4000-a9ef-e3cd200dd5ef</wfw:commentRss>
      <title>Speaking at VSLive! in San Francisco April 1-3.</title>
      <guid>http://www.reliablesoftware.com/DasBlog/PermaLink,guid,5b1e5222-d09f-4000-a9ef-e3cd200dd5ef.aspx</guid>
      <link>http://www.reliablesoftware.com/DasBlog/PermaLink,guid,5b1e5222-d09f-4000-a9ef-e3cd200dd5ef.aspx</link>
      <pubDate>Tue, 04 Mar 2008 17:24:29 GMT</pubDate>
      <description>I am going to be giving two talks and a workshop at VS Live! in San Francisco.&lt;br&gt;
&lt;br&gt;
The first talk is an &lt;a href="http://vslive.com/2008/sf/corenet.aspx#vc7"&gt;"Introduction
to Windows Workflow Foundation"&lt;/a&gt; where I explain both the business reasons why
Microsoft developed Workflow Foundation as well as the technical fundamentals. This
talk will help you understand not only how to build workflows, but when it makes sense
to do so and when to use some other technology.&lt;br&gt;
&lt;br&gt;
The second is "&lt;a href="http://vslive.com/2008/sf/corenet.aspx#vc63"&gt;Workflow Services
Using WCF and WWF&lt;/a&gt;". WCF allows you to encapsulate business functionality into
a service. Windows Workflow Foundation allows you to integrate these services into
long running business processes. The latest version of the .NET Framework (3.5) makes
it much easier to use these technologies together to build some very powerful business
applications.&lt;br&gt;
&lt;br&gt;
On Thursday I will give a &lt;a href="http://vslive.com/2008/sf/workshops.aspx#vpo2"&gt;whole
day tutorial&lt;/a&gt; on Workflow Foundation where will dive into the details of how to
use this technology to build business applications.&lt;br&gt;
&lt;br&gt;
Other speakers will talk about VSTS, ALM, Silverlight, AJAX, .NET Framework 3.0 and
3.5, Sharepoint 2007, Windows WF, Visual Studio 2008, SQL Server 2008, and much more.&lt;br&gt;
&lt;br&gt;
If you have not already registered for VSLive San Francisco, you can receive a $695
discount on the Gold Passport if you register using priority code&lt;font color="#000000" face="Times New Roman" size="3"&gt;&lt;span style="font-size: 10pt; font-family: Arial;"&gt; &lt;span style="color: red;"&gt;SPSTI&lt;/span&gt;.
More at &lt;a title="blocked::http://www.vslive.com/sf" href="http://www.vslive.com/sf"&gt;www.vslive.com/sf&lt;/a&gt; 
&lt;o:p&gt;
   &lt;br&gt;
   &lt;br&gt;
&lt;/o:p&gt;
&lt;/span&gt;&lt;/font&gt;&lt;font color="#000000" face="Times New Roman" size="3"&gt;&lt;span style="font-size: 10pt; font-family: Arial;"&gt;.&lt;/span&gt;&lt;/font&gt;
&lt;br&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;img src="http://www.reliablesoftware.com/DasBlog/content/binary/VSSF08_SeeMe_SPSTI.gif" border="0"&gt;&lt;img width="0" height="0" src="http://www.reliablesoftware.com/DasBlog/aggbug.ashx?id=5b1e5222-d09f-4000-a9ef-e3cd200dd5ef" /&gt;</description>
      <comments>http://www.reliablesoftware.com/DasBlog/CommentView,guid,5b1e5222-d09f-4000-a9ef-e3cd200dd5ef.aspx</comments>
      <category>All;Microsoft .NET;SOA;Software Development;Workflow</category>
    </item>
    <item>
      <trackback:ping>http://www.reliablesoftware.com/DasBlog/Trackback.aspx?guid=96a71539-a8f8-4259-9b87-61111ef1cb8a</trackback:ping>
      <pingback:server>http://www.reliablesoftware.com/DasBlog/pingback.aspx</pingback:server>
      <pingback:target>http://www.reliablesoftware.com/DasBlog/PermaLink,guid,96a71539-a8f8-4259-9b87-61111ef1cb8a.aspx</pingback:target>
      <dc:creator>weblogcomments@reliablesoftware.com (Michael Stiefel)</dc:creator>
      <wfw:commentRss>http://www.reliablesoftware.com/DasBlog/SyndicationService.asmx/GetEntryCommentsRss?guid=96a71539-a8f8-4259-9b87-61111ef1cb8a</wfw:commentRss>
      <slash:comments>1</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">One of the great features in Visual Studio
   is the ability to startup more than one project at the same time. You do not need
   to create two solutions, for example, for a client and a server to be able to debug
   them both.<br /><br />
   I thought everybody knew how to do this, but when I found out that two members of
   a project team I am working with did not, I decided to blog how to do this.<br /><br />
   Select the solution in the Solution Explorer, right mouse click and you will see the
   following menu:<br /><p></p><img src="http://www.reliablesoftware.com/DasBlog/content/binary/StartupProjects.bmp" border="0" /><br /><br />
   Select the Set Startup Projects menu item, and a property page will appear that lists
   all the properties in the project. For example:<br /><br /><img src="content/binary/StartupProjectsPropertyPage1.bmp" border="0" /><br /><br />
   You can associate an action with each of the projects: None, Start, or Start without
   debugging.<br /><br /><img src="http://www.reliablesoftware.com/DasBlog/content/binary/StartupProjectsPropertyPageDropdown.bmp" border="0" /><br /><br />
   When you start execution, the projects that you wanted to startup will begin execution.
   If you allowed debugging, and set breakpoints, the debugger will stop at the appropriate
   places.<br /><img width="0" height="0" src="http://www.reliablesoftware.com/DasBlog/aggbug.ashx?id=96a71539-a8f8-4259-9b87-61111ef1cb8a" /></body>
      <title>Starting Up Multiple Projects in Visual Studio 2008</title>
      <guid>http://www.reliablesoftware.com/DasBlog/PermaLink,guid,96a71539-a8f8-4259-9b87-61111ef1cb8a.aspx</guid>
      <link>http://www.reliablesoftware.com/DasBlog/PermaLink,guid,96a71539-a8f8-4259-9b87-61111ef1cb8a.aspx</link>
      <pubDate>Tue, 12 Feb 2008 20:13:48 GMT</pubDate>
      <description>One of the great features in Visual Studio is the ability to startup more than one project at the same time. You do not need to create two solutions, for example, for a client and a server to be able to debug them both.&lt;br&gt;
&lt;br&gt;
I thought everybody knew how to do this, but when I found out that two members of
a project team I am working with did not, I decided to blog how to do this.&lt;br&gt;
&lt;br&gt;
Select the solution in the Solution Explorer, right mouse click and you will see the
following menu:&lt;br&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;img src="http://www.reliablesoftware.com/DasBlog/content/binary/StartupProjects.bmp" border="0"&gt;
&lt;br&gt;
&lt;br&gt;
Select the Set Startup Projects menu item, and a property page will appear that lists
all the properties in the project. For example:&lt;br&gt;
&lt;br&gt;
&lt;img src="content/binary/StartupProjectsPropertyPage1.bmp" border="0"&gt;
&lt;br&gt;
&lt;br&gt;
You can associate an action with each of the projects: None, Start, or Start without
debugging.&lt;br&gt;
&lt;br&gt;
&lt;img src="http://www.reliablesoftware.com/DasBlog/content/binary/StartupProjectsPropertyPageDropdown.bmp" border="0"&gt;
&lt;br&gt;
&lt;br&gt;
When you start execution, the projects that you wanted to startup will begin execution.
If you allowed debugging, and set breakpoints, the debugger will stop at the appropriate
places.&lt;br&gt;
&lt;img width="0" height="0" src="http://www.reliablesoftware.com/DasBlog/aggbug.ashx?id=96a71539-a8f8-4259-9b87-61111ef1cb8a" /&gt;</description>
      <comments>http://www.reliablesoftware.com/DasBlog/CommentView,guid,96a71539-a8f8-4259-9b87-61111ef1cb8a.aspx</comments>
      <category>All;Microsoft .NET;Software Development</category>
    </item>
    <item>
      <trackback:ping>http://www.reliablesoftware.com/DasBlog/Trackback.aspx?guid=731a52aa-4ecb-4a59-97da-f45aa10a1503</trackback:ping>
      <pingback:server>http://www.reliablesoftware.com/DasBlog/pingback.aspx</pingback:server>
      <pingback:target>http://www.reliablesoftware.com/DasBlog/PermaLink,guid,731a52aa-4ecb-4a59-97da-f45aa10a1503.aspx</pingback:target>
      <dc:creator>weblogcomments@reliablesoftware.com (Michael Stiefel)</dc:creator>
      <wfw:commentRss>http://www.reliablesoftware.com/DasBlog/SyndicationService.asmx/GetEntryCommentsRss?guid=731a52aa-4ecb-4a59-97da-f45aa10a1503</wfw:commentRss>
      <title>Windows Workflow Shortcuts Now Available on Amazon Kindle</title>
      <guid>http://www.reliablesoftware.com/DasBlog/PermaLink,guid,731a52aa-4ecb-4a59-97da-f45aa10a1503.aspx</guid>
      <link>http://www.reliablesoftware.com/DasBlog/PermaLink,guid,731a52aa-4ecb-4a59-97da-f45aa10a1503.aspx</link>
      <pubDate>Tue, 12 Feb 2008 00:45:21 GMT</pubDate>
      <description>&lt;div class="ItemText"&gt;
   &lt;p&gt;
      &lt;font color="#000000" size="3"&gt;My Windows Workflow Shortcuts are now available on
      Amazon's Kindle Reader!&lt;/font&gt;
   &lt;/p&gt;
   &lt;p&gt;
      &lt;font color="#000000" size="3"&gt;&lt;a href="http://www.amazon.com/Building-Applications-Windows-Workflow-Foundation/dp/B00132S70O/ref=sr_1_3/104-7015412-8703104?ie=UTF8&amp;s=books&amp;qid=1202776042&amp;sr=8-3"&gt;http://www.amazon.com/Building-Applications-Windows-Workflow-Foundation/dp/B00132S70O/ref=sr_1_3/104-7015412-8703104?ie=UTF8&amp;s=books&amp;qid=1202776042&amp;sr=8-3&lt;/a&gt;
      &lt;br&gt;
      &lt;a href="http://www.amazon.com/Building-Applications-Windows-Workflow-Foundation/dp/B00132S70Y/ref=sr_1_12/104-7015412-8703104?ie=UTF8&amp;s=books&amp;qid=1202776042&amp;sr=8-12"&gt;http://www.amazon.com/Building-Applications-Windows-Workflow-Foundation/dp/B00132S70Y/ref=sr_1_12/104-7015412-8703104?ie=UTF8&amp;s=books&amp;qid=1202776042&amp;sr=8-12&lt;/a&gt;
      &lt;br&gt;
      &lt;a href="http://www.amazon.com/Building-Applications-Windows-Workflow-Foundation/dp/B00132S71I/ref=sr_1_14/104-7015412-8703104?ie=UTF8&amp;s=books&amp;qid=1202776042&amp;sr=8-14"&gt;http://www.amazon.com/Building-Applications-Windows-Workflow-Foundation/dp/B00132S71I/ref=sr_1_14/104-7015412-8703104?ie=UTF8&amp;s=books&amp;qid=1202776042&amp;sr=8-14&lt;/a&gt;
      &lt;br&gt;
      &lt;a href="http://www.amazon.com/Building-Applications-Windows-Workflow-Foundation/dp/B00132S6Z0/ref=sr_1_10/104-7015412-8703104?ie=UTF8&amp;s=books&amp;qid=1202776042&amp;sr=8-10"&gt;http://www.amazon.com/Building-Applications-Windows-Workflow-Foundation/dp/B00132S6Z0/ref=sr_1_10/104-7015412-8703104?ie=UTF8&amp;s=books&amp;qid=1202776042&amp;sr=8-10&lt;br&gt;
      &lt;/a&gt;
      &lt;br&gt;
      &lt;/font&gt;
   &lt;/p&gt;
   &lt;p&gt;
      &lt;font color="#000000" size="3"&gt;The associated source code (and links to the shortcuts
      on Safari) are still on my &lt;/font&gt;&lt;a href="ct.ashx?id=bcce3b20-c995-4c52-82ee-b140a6d33fc0&amp;url=http%3a%2f%2fwww.reliablesoftware.com%2fbook.html"&gt;&lt;font color="#000000" size="3"&gt;web
      site&lt;/font&gt;&lt;/a&gt;&lt;font color="#000000" size="3"&gt;. &lt;/font&gt;
   &lt;/p&gt;
   &lt;p&gt;
      &lt;font color="#000000" size="3"&gt;This experiment is my first foray into the world of
      digital publishing and it will be interesting to see how it turns out. As of the moment,
      Amazon has no more Kindles &lt;a href="http://www.amazon.com/Kindle-Amazons-Wireless-Reading-Device/dp/B000FI73MA"&gt;left&lt;/a&gt;.
      If and when you use Kindle, let me know what you think of it as a mechanism for distributing
      technical content.&lt;br&gt;
      &lt;/font&gt;
   &lt;/p&gt;
   &lt;p&gt;
      &lt;br&gt;
   &lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.reliablesoftware.com/DasBlog/aggbug.ashx?id=731a52aa-4ecb-4a59-97da-f45aa10a1503" /&gt;</description>
      <comments>http://www.reliablesoftware.com/DasBlog/CommentView,guid,731a52aa-4ecb-4a59-97da-f45aa10a1503.aspx</comments>
      <category>All;Microsoft .NET;Workflow</category>
    </item>
    <item>
      <trackback:ping>http://www.reliablesoftware.com/DasBlog/Trackback.aspx?guid=306e3133-8cd0-4e5a-9aa1-ad4fc7d14c92</trackback:ping>
      <pingback:server>http://www.reliablesoftware.com/DasBlog/pingback.aspx</pingback:server>
      <pingback:target>http://www.reliablesoftware.com/DasBlog/PermaLink,guid,306e3133-8cd0-4e5a-9aa1-ad4fc7d14c92.aspx</pingback:target>
      <dc:creator>weblogcomments@reliablesoftware.com (Michael Stiefel)</dc:creator>
      <wfw:commentRss>http://www.reliablesoftware.com/DasBlog/SyndicationService.asmx/GetEntryCommentsRss?guid=306e3133-8cd0-4e5a-9aa1-ad4fc7d14c92</wfw:commentRss>
      <title>Debugging .NET Framework Libraries</title>
      <guid>http://www.reliablesoftware.com/DasBlog/PermaLink,guid,306e3133-8cd0-4e5a-9aa1-ad4fc7d14c92.aspx</guid>
      <link>http://www.reliablesoftware.com/DasBlog/PermaLink,guid,306e3133-8cd0-4e5a-9aa1-ad4fc7d14c92.aspx</link>
      <pubDate>Thu, 17 Jan 2008 14:28:02 GMT</pubDate>
      <description>&lt;p class="MsoNormal"&gt;
   &lt;font face="Times New Roman" size="3"&gt;&lt;span style="font-size: 10pt; font-family: Arial;"&gt;&lt;/span&gt;&lt;/font&gt;&lt;font color="#000000" face="Times New Roman" size="3"&gt;You
   can use the debugger in Visual Studio 2008 to step into some of the .NET Enterprise
   Libraries. This is a feature I asked for a number of years ago. Scott Guthrie just
   blogged about this. Here is his post and it includes &lt;/font&gt;&lt;font face="Arial" size="2"&gt;&lt;span style="font-size: 10pt; font-family: Arial;"&gt;&lt;font face="Times New Roman" size="3"&gt;
   &lt;o:p&gt;&lt;/o:p&gt;
   the list of libraries to which this applies and some information about how to do it:&lt;/font&gt;
   &lt;o:p&gt;&lt;/o:p&gt;
   &lt;/span&gt;&lt;/font&gt;
&lt;/p&gt;
&lt;p class="MsoNormal"&gt;
   &lt;font face="Arial" size="2"&gt;&lt;span style="font-size: 10pt; font-family: Arial;"&gt;&lt;a title="blocked::http://weblogs.asp.net/scottgu/archive/2008/01/16/net-framework-library-source-code-now-available.aspx" href="http://weblogs.asp.net/scottgu/archive/2008/01/16/net-framework-library-source-code-now-available.aspx"&gt;http://weblogs.asp.net/scottgu/archive/2008/01/16/net-framework-library-source-code-now-available.aspx&lt;/a&gt;
   &lt;o:p&gt;&lt;/o:p&gt;
   &lt;/span&gt;&lt;/font&gt;
&lt;/p&gt;
&lt;p class="MsoNormal"&gt;
   &lt;font face="Times New Roman" size="3"&gt;&lt;span style="font-size: 10pt; font-family: Arial;"&gt;
   &lt;o:p&gt;&lt;/o:p&gt;
   &lt;/span&gt;&lt;/font&gt;&lt;font face="Arial" size="2"&gt;&lt;span style="font-size: 10pt; font-family: Arial;"&gt;&lt;font face="Times New Roman" size="3"&gt;Here
   is a short MSDN video about this:&lt;/font&gt;
   &lt;o:p&gt;
      &lt;font face="Times New Roman" size="3"&gt;&lt;/font&gt;
      &lt;br&gt;
   &lt;/o:p&gt;
   &lt;/span&gt;&lt;/font&gt;
&lt;/p&gt;
&lt;p class="MsoNormal"&gt;
   &lt;font face="Arial" size="2"&gt;&lt;span style="font-size: 10pt; font-family: Arial;"&gt;&lt;a title="blocked::http://www.microsoft.com/uk/msdn/screencasts/screencast/304/Debugging-Into-the-NET-Framework-Source-Code-with-Visual-Studio-2008.aspx" href="http://www.microsoft.com/uk/msdn/screencasts/screencast/304/Debugging-Into-the-NET-Framework-Source-Code-with-Visual-Studio-2008.aspx"&gt;http://www.microsoft.com/uk/msdn/screencasts/screencast/304/Debugging-Into-the-NET-Framework-Source-Code-with-Visual-Studio-2008.aspx&lt;/a&gt;
   &lt;o:p&gt;&lt;/o:p&gt;
   &lt;/span&gt;&lt;/font&gt;
&lt;/p&gt;
&lt;p class="MsoNormal"&gt;
   &lt;font face="Arial" size="2"&gt;&lt;span style="font-size: 10pt; font-family: Arial;"&gt;
   &lt;o:p&gt;&lt;/o:p&gt;
   &lt;/span&gt;&lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.reliablesoftware.com/DasBlog/aggbug.ashx?id=306e3133-8cd0-4e5a-9aa1-ad4fc7d14c92" /&gt;</description>
      <comments>http://www.reliablesoftware.com/DasBlog/CommentView,guid,306e3133-8cd0-4e5a-9aa1-ad4fc7d14c92.aspx</comments>
      <category>All;Microsoft .NET</category>
    </item>
    <item>
      <trackback:ping>http://www.reliablesoftware.com/DasBlog/Trackback.aspx?guid=50e845e2-7de7-4834-9728-637c4406903a</trackback:ping>
      <pingback:server>http://www.reliablesoftware.com/DasBlog/pingback.aspx</pingback:server>
      <pingback:target>http://www.reliablesoftware.com/DasBlog/PermaLink,guid,50e845e2-7de7-4834-9728-637c4406903a.aspx</pingback:target>
      <dc:creator>weblogcomments@reliablesoftware.com (Michael Stiefel)</dc:creator>
      <wfw:commentRss>http://www.reliablesoftware.com/DasBlog/SyndicationService.asmx/GetEntryCommentsRss?guid=50e845e2-7de7-4834-9728-637c4406903a</wfw:commentRss>
      <slash:comments>2</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
          <font color="#000000" face="Times New Roman" size="3">The Windows Workflow Foundation
      (WF) ships with a Policy Activity that allows you to execute a set of rules against
      your workflow. This activity contains a design time rules editor that allows you to
      create a set of rules. At run time, the Policy Activity runs these rules using the
      WF Rules engine. </font>
        </p>
        <p style="margin: 0in; font-family: Calibri; font-size: 11pt;">
          <font color="#000000" face="Times New Roman" size="3">Among other features, the rules
      engine allows you to prioritize rules and to set a chaining policy to govern rules
      evaluation.<span style=""></span>The rules engine uses a set of Code DOM expressions
      to represent the rules. These rules can be run against any managed object, not just
      a workflow. Hence, the mechanisms of the rules engine have nothing to do with workflow.
      You can actually instantiate and use this rules engine without having to embed it
      inside of a workflow. You can use this rules engine to build rules-driven .NET applications.</font>
        </p>
        <p style="margin: 0in; font-family: Calibri; font-size: 11pt;">
          <font color="#000000" face="Times New Roman" size="3">
          </font>
        </p>
        <p style="margin: 0in; font-family: Calibri; font-size: 11pt;">
          <font color="#000000" face="Times New Roman" size="3">I gave a <a href="../presentations.html##Workflow">talk</a> at
      the last Las Vegas VSLive! that demonstrates how to do this. The first sample in the
      talk uses a workflow to demonstrate the power of the rules engine. The second and
      third samples use a very simple example to demonstrate how to use the engine outside
      of a workflow.</font>
        </p>
        <p style="margin: 0in; font-family: Calibri; font-size: 11pt;">
          <font color="#000000" face="Times New Roman" size="3">
          </font>
        </p>
        <p style="margin: 0in; font-family: Calibri; font-size: 11pt;">
          <font color="#000000" face="Times New Roman" size="3">Two problems have to be solved.<span style=""></span>You
      have to create a set of Code DOM expressions for the rules. You have to host the engine
      and supply it the rules and the object to run the rules against. </font>
        </p>
        <p style="margin: 0in; font-family: Calibri; font-size: 11pt;">
          <font color="#000000" face="Times New Roman" size="3">
          </font>
        </p>
        <p style="margin: 0in; font-family: Calibri; font-size: 11pt;">
          <font color="#000000" face="Times New Roman" size="3">While the details are in the
      slides and the examples, here is the gist of the solution. </font>
        </p>
        <p style="margin: 0in; font-family: Calibri; font-size: 11pt;">
          <font color="#000000" face="Times New Roman" size="3">
          </font>
        </p>
        <p style="margin: 0in; font-family: Calibri; font-size: 11pt;">
          <font color="#000000" face="Times New Roman" size="3">To use the rules engine at runtime,
      you pull the workflow rules out of some storage mechanism. The first sample uses a
      file. A WorkflowMarkupSerializer instance deserializes the stored rules to an instance
      of the RuleSet class.<span style=""></span>A RuleValidation instance validates the
      rules against the type of the business object against which you will run the rules
      against. The Execute method on the RuleExecution class is used to invoke the rules
      engine and run the rules.</font>
        </p>
        <p style="margin: 0in; font-family: Calibri; font-size: 11pt;">
          <font color="#000000" face="Times New Roman" size="3">
          </font>
        </p>
        <p style="margin: 0in; font-family: Calibri; font-size: 11pt;">
          <font color="#000000" face="Times New Roman" size="3">How do you create the rules?
      Ideally you would use some domain language, or domain based application, that would
      generate the rules as Code DOM expressions. If you were masochistic enough, you could
      create those expressions by hand. </font>
        </p>
        <p style="margin: 0in; font-family: Calibri; font-size: 11pt;">
          <font color="#000000" face="Times New Roman" size="3">
          </font>
        </p>
        <p style="margin: 0in; font-family: Calibri; font-size: 11pt;">
          <font color="#000000" face="Times New Roman" size="3">As an alternative, the second
      sample hosts the Workflow rules editor dialog (RuleSetDialog class) to let you create
      the rules. Unfortunately, like the workflow designer, this is a programmer's tool,
      not a business analyst's tool. <span style=""></span>A WorkflowMarkupSerializer instance
      is used to serialize the rules to the appropriate storage.<br /></font>
        </p>
        <p style="margin: 0in; font-family: Calibri; font-size: 11pt;">
          <font color="#000000" face="Times New Roman" size="3">
          </font>
        </p>
        <p style="margin: 0in; font-family: Calibri; font-size: 11pt;">
          <font color="#000000" face="Times New Roman" size="3">I would be interested in hearing
      about how people use this engine to build rules driven applications.</font>
        </p>
        <p>
        </p>
        <img width="0" height="0" src="http://www.reliablesoftware.com/DasBlog/aggbug.ashx?id=50e845e2-7de7-4834-9728-637c4406903a" />
      </body>
      <title>Using the WF Rules Engine Outside of a Workflow</title>
      <guid>http://www.reliablesoftware.com/DasBlog/PermaLink,guid,50e845e2-7de7-4834-9728-637c4406903a.aspx</guid>
      <link>http://www.reliablesoftware.com/DasBlog/PermaLink,guid,50e845e2-7de7-4834-9728-637c4406903a.aspx</link>
      <pubDate>Thu, 22 Nov 2007 19:23:55 GMT</pubDate>
      <description>&lt;p&gt;
   &lt;font color="#000000" face="Times New Roman" size="3"&gt;The Windows Workflow Foundation
   (WF) ships with a Policy Activity that allows you to execute a set of rules against
   your workflow. This activity contains a design time rules editor that allows you to
   create a set of rules. At run time, the Policy Activity runs these rules using the
   WF Rules engine. &lt;/font&gt;
&lt;/p&gt;
&lt;p style="margin: 0in; font-family: Calibri; font-size: 11pt;"&gt;
   &lt;font color="#000000" face="Times New Roman" size="3"&gt;Among other features, the rules
   engine allows you to prioritize rules and to set a chaining policy to govern rules
   evaluation.&lt;span style=""&gt; &lt;/span&gt;The rules engine uses a set of Code DOM expressions
   to represent the rules. These rules can be run against any managed object, not just
   a workflow. Hence, the mechanisms of the rules engine have nothing to do with workflow.
   You can actually instantiate and use this rules engine without having to embed it
   inside of a workflow. You can use this rules engine to build rules-driven .NET applications.&lt;/font&gt;
&lt;/p&gt;
&lt;p style="margin: 0in; font-family: Calibri; font-size: 11pt;"&gt;
   &lt;font color="#000000" face="Times New Roman" size="3"&gt; &lt;/font&gt;
&lt;/p&gt;
&lt;p style="margin: 0in; font-family: Calibri; font-size: 11pt;"&gt;
   &lt;font color="#000000" face="Times New Roman" size="3"&gt;I gave a &lt;a href="../presentations.html##Workflow"&gt;talk&lt;/a&gt; at
   the last Las Vegas VSLive! that demonstrates how to do this. The first sample in the
   talk uses a workflow to demonstrate the power of the rules engine. The second and
   third samples use a very simple example to demonstrate how to use the engine outside
   of a workflow.&lt;/font&gt;
&lt;/p&gt;
&lt;p style="margin: 0in; font-family: Calibri; font-size: 11pt;"&gt;
   &lt;font color="#000000" face="Times New Roman" size="3"&gt; &lt;/font&gt;
&lt;/p&gt;
&lt;p style="margin: 0in; font-family: Calibri; font-size: 11pt;"&gt;
   &lt;font color="#000000" face="Times New Roman" size="3"&gt;Two problems have to be solved.&lt;span style=""&gt; &lt;/span&gt;You
   have to create a set of Code DOM expressions for the rules. You have to host the engine
   and supply it the rules and the object to run the rules against. &lt;/font&gt;
&lt;/p&gt;
&lt;p style="margin: 0in; font-family: Calibri; font-size: 11pt;"&gt;
   &lt;font color="#000000" face="Times New Roman" size="3"&gt; &lt;/font&gt;
&lt;/p&gt;
&lt;p style="margin: 0in; font-family: Calibri; font-size: 11pt;"&gt;
   &lt;font color="#000000" face="Times New Roman" size="3"&gt;While the details are in the
   slides and the examples, here is the gist of the solution. &lt;/font&gt;
&lt;/p&gt;
&lt;p style="margin: 0in; font-family: Calibri; font-size: 11pt;"&gt;
   &lt;font color="#000000" face="Times New Roman" size="3"&gt; &lt;/font&gt;
&lt;/p&gt;
&lt;p style="margin: 0in; font-family: Calibri; font-size: 11pt;"&gt;
   &lt;font color="#000000" face="Times New Roman" size="3"&gt;To use the rules engine at runtime,
   you pull the workflow rules out of some storage mechanism. The first sample uses a
   file. A WorkflowMarkupSerializer instance deserializes the stored rules to an instance
   of the RuleSet class.&lt;span style=""&gt; &lt;/span&gt;A RuleValidation instance validates the
   rules against the type of the business object against which you will run the rules
   against. The Execute method on the RuleExecution class is used to invoke the rules
   engine and run the rules.&lt;/font&gt;
&lt;/p&gt;
&lt;p style="margin: 0in; font-family: Calibri; font-size: 11pt;"&gt;
   &lt;font color="#000000" face="Times New Roman" size="3"&gt; &lt;/font&gt;
&lt;/p&gt;
&lt;p style="margin: 0in; font-family: Calibri; font-size: 11pt;"&gt;
   &lt;font color="#000000" face="Times New Roman" size="3"&gt;How do you create the rules?
   Ideally you would use some domain language, or domain based application, that would
   generate the rules as Code DOM expressions. If you were masochistic enough, you could
   create those expressions by hand. &lt;/font&gt;
&lt;/p&gt;
&lt;p style="margin: 0in; font-family: Calibri; font-size: 11pt;"&gt;
   &lt;font color="#000000" face="Times New Roman" size="3"&gt; &lt;/font&gt;
&lt;/p&gt;
&lt;p style="margin: 0in; font-family: Calibri; font-size: 11pt;"&gt;
   &lt;font color="#000000" face="Times New Roman" size="3"&gt;As an alternative, the second
   sample hosts the Workflow rules editor dialog (RuleSetDialog class) to let you create
   the rules. Unfortunately, like the workflow designer, this is a programmer's tool,
   not a business analyst's tool. &lt;span style=""&gt;&lt;/span&gt;A WorkflowMarkupSerializer instance
   is used to serialize the rules to the appropriate storage.&lt;br&gt;
   &lt;/font&gt;
&lt;/p&gt;
&lt;p style="margin: 0in; font-family: Calibri; font-size: 11pt;"&gt;
   &lt;font color="#000000" face="Times New Roman" size="3"&gt; &lt;/font&gt;
&lt;/p&gt;
&lt;p style="margin: 0in; font-family: Calibri; font-size: 11pt;"&gt;
   &lt;font color="#000000" face="Times New Roman" size="3"&gt;I would be interested in hearing
   about how people use this engine to build rules driven applications.&lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.reliablesoftware.com/DasBlog/aggbug.ashx?id=50e845e2-7de7-4834-9728-637c4406903a" /&gt;</description>
      <comments>http://www.reliablesoftware.com/DasBlog/CommentView,guid,50e845e2-7de7-4834-9728-637c4406903a.aspx</comments>
      <category>All;Microsoft .NET;SOA;Software Development;Workflow</category>
    </item>
    <item>
      <trackback:ping>http://www.reliablesoftware.com/DasBlog/Trackback.aspx?guid=bcce3b20-c995-4c52-82ee-b140a6d33fc0</trackback:ping>
      <pingback:server>http://www.reliablesoftware.com/DasBlog/pingback.aspx</pingback:server>
      <pingback:target>http://www.reliablesoftware.com/DasBlog/PermaLink,guid,bcce3b20-c995-4c52-82ee-b140a6d33fc0.aspx</pingback:target>
      <dc:creator>weblogcomments@reliablesoftware.com (Michael Stiefel)</dc:creator>
      <wfw:commentRss>http://www.reliablesoftware.com/DasBlog/SyndicationService.asmx/GetEntryCommentsRss?guid=bcce3b20-c995-4c52-82ee-b140a6d33fc0</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
          <font color="#000000" size="3">My series of four digitial articles have been published
      by Addison-Wesley. You can get the links to purchase them and the associated source
      code from my </font>
          <a href="http://www.reliablesoftware.com/book.html">
            <font color="#000000" size="3">web
      site</font>
          </a>
          <font color="#000000" size="3">. </font>
        </p>
        <p>
          <font color="#000000" size="3">I have tried to explain, in practical terms, what you
      need to know to actually build real world software using Windows Workflow. There is
      a tiny amount of theory to explain the underpinnings. The vast majority of the explanation
      uses code examples to illustrate all the key points. The last shortcut in the series
      has two extended examples that illustrate how to build custom activities.</font>
        </p>
        <img width="0" height="0" src="http://www.reliablesoftware.com/DasBlog/aggbug.ashx?id=bcce3b20-c995-4c52-82ee-b140a6d33fc0" />
      </body>
      <title>Microsoft Windows Workflow Foundation Digital Shortcuts Finally Finished</title>
      <guid>http://www.reliablesoftware.com/DasBlog/PermaLink,guid,bcce3b20-c995-4c52-82ee-b140a6d33fc0.aspx</guid>
      <link>http://www.reliablesoftware.com/DasBlog/PermaLink,guid,bcce3b20-c995-4c52-82ee-b140a6d33fc0.aspx</link>
      <pubDate>Tue, 21 Aug 2007 02:31:31 GMT</pubDate>
      <description>&lt;p&gt;
   &lt;font color=#000000 size=3&gt;My series of four digitial articles have been published
   by Addison-Wesley. You can get the links to purchase them and the associated source
   code from my &lt;/font&gt;&lt;a href="http://www.reliablesoftware.com/book.html"&gt;&lt;font color=#000000 size=3&gt;web
   site&lt;/font&gt;&lt;/a&gt;&lt;font color=#000000 size=3&gt;. &lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
   &lt;font color=#000000 size=3&gt;I have tried to explain, in practical terms, what you need
   to know to actually build real world software using Windows Workflow. There is a tiny
   amount of theory to explain the underpinnings. The vast majority of the explanation
   uses code examples to illustrate all the key points. The last shortcut in the series
   has two extended examples that illustrate how to build custom activities.&lt;/font&gt;
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.reliablesoftware.com/DasBlog/aggbug.ashx?id=bcce3b20-c995-4c52-82ee-b140a6d33fc0" /&gt;</description>
      <comments>http://www.reliablesoftware.com/DasBlog/CommentView,guid,bcce3b20-c995-4c52-82ee-b140a6d33fc0.aspx</comments>
      <category>All;Microsoft .NET;Workflow</category>
    </item>
    <item>
      <trackback:ping>http://www.reliablesoftware.com/DasBlog/Trackback.aspx?guid=f9d82815-27ed-4cce-9417-bf08913b2b31</trackback:ping>
      <pingback:server>http://www.reliablesoftware.com/DasBlog/pingback.aspx</pingback:server>
      <pingback:target>http://www.reliablesoftware.com/DasBlog/PermaLink,guid,f9d82815-27ed-4cce-9417-bf08913b2b31.aspx</pingback:target>
      <dc:creator>weblogcomments@reliablesoftware.com (Michael Stiefel)</dc:creator>
      <wfw:commentRss>http://www.reliablesoftware.com/DasBlog/SyndicationService.asmx/GetEntryCommentsRss?guid=f9d82815-27ed-4cce-9417-bf08913b2b31</wfw:commentRss>
      <slash:comments>1</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
          <font size="3">Here are good instructions on how to install RC1 for the .NET Framework
      3.0: </font>
          <a href="http://blogs.msdn.com/pandrew/archive/2006/09/07/745701.aspx">
            <font size="3">http://blogs.msdn.com/pandrew/archive/2006/09/07/745701.aspx</font>
          </a>
          <font size="3">.
      People, including myself, have been having problems getting the Workflow Extensions
      for Visual Studio 2005 installed. I moved the installer file (Visual Studio 2005 Extensions
      for Windows Workflow Foundation RC5(EN).exe) to a different directory from the other
      installation files. The workflow extensions then installed just fine.</font>
        </p>
        <img width="0" height="0" src="http://www.reliablesoftware.com/DasBlog/aggbug.ashx?id=f9d82815-27ed-4cce-9417-bf08913b2b31" />
      </body>
      <title>Installing NET Framework 3.0 RC1</title>
      <guid>http://www.reliablesoftware.com/DasBlog/PermaLink,guid,f9d82815-27ed-4cce-9417-bf08913b2b31.aspx</guid>
      <link>http://www.reliablesoftware.com/DasBlog/PermaLink,guid,f9d82815-27ed-4cce-9417-bf08913b2b31.aspx</link>
      <pubDate>Mon, 30 Oct 2006 01:39:59 GMT</pubDate>
      <description>&lt;p&gt;
   &lt;font size=3&gt;Here are good instructions on how to install RC1 for the .NET Framework
   3.0: &lt;/font&gt;&lt;a href="http://blogs.msdn.com/pandrew/archive/2006/09/07/745701.aspx"&gt;&lt;font size=3&gt;http://blogs.msdn.com/pandrew/archive/2006/09/07/745701.aspx&lt;/font&gt;&lt;/a&gt;&lt;font size=3&gt;.
   People, including myself, have been having problems getting the Workflow Extensions
   for Visual Studio 2005 installed. I moved the installer file (Visual Studio 2005 Extensions
   for Windows Workflow Foundation RC5(EN).exe) to a different directory from the other
   installation files. The workflow extensions then installed just fine.&lt;/font&gt;
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.reliablesoftware.com/DasBlog/aggbug.ashx?id=f9d82815-27ed-4cce-9417-bf08913b2b31" /&gt;</description>
      <comments>http://www.reliablesoftware.com/DasBlog/CommentView,guid,f9d82815-27ed-4cce-9417-bf08913b2b31.aspx</comments>
      <category>All;Microsoft .NET;Workflow</category>
    </item>
    <item>
      <trackback:ping>http://www.reliablesoftware.com/DasBlog/Trackback.aspx?guid=52c84cb4-43a2-4135-8994-36456bdad96b</trackback:ping>
      <pingback:server>http://www.reliablesoftware.com/DasBlog/pingback.aspx</pingback:server>
      <pingback:target>http://www.reliablesoftware.com/DasBlog/PermaLink,guid,52c84cb4-43a2-4135-8994-36456bdad96b.aspx</pingback:target>
      <dc:creator>weblogcomments@reliablesoftware.com (Michael Stiefel)</dc:creator>
      <wfw:commentRss>http://www.reliablesoftware.com/DasBlog/SyndicationService.asmx/GetEntryCommentsRss?guid=52c84cb4-43a2-4135-8994-36456bdad96b</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
          <font size="3">I have updated the workflow examples on my site to the most recent
      Workflow version.</font>
        </p>
        <img width="0" height="0" src="http://www.reliablesoftware.com/DasBlog/aggbug.ashx?id=52c84cb4-43a2-4135-8994-36456bdad96b" />
      </body>
      <title>Workflow Samples Updated</title>
      <guid>http://www.reliablesoftware.com/DasBlog/PermaLink,guid,52c84cb4-43a2-4135-8994-36456bdad96b.aspx</guid>
      <link>http://www.reliablesoftware.com/DasBlog/PermaLink,guid,52c84cb4-43a2-4135-8994-36456bdad96b.aspx</link>
      <pubDate>Tue, 15 Aug 2006 04:03:15 GMT</pubDate>
      <description>&lt;p&gt;
   &lt;font size=3&gt;I have updated the workflow examples on my site to the most recent Workflow
   version.&lt;/font&gt;
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.reliablesoftware.com/DasBlog/aggbug.ashx?id=52c84cb4-43a2-4135-8994-36456bdad96b" /&gt;</description>
      <comments>http://www.reliablesoftware.com/DasBlog/CommentView,guid,52c84cb4-43a2-4135-8994-36456bdad96b.aspx</comments>
      <category>All;Microsoft .NET;Workflow</category>
    </item>
    <item>
      <trackback:ping>http://www.reliablesoftware.com/DasBlog/Trackback.aspx?guid=567cb193-ccdf-44da-a8d4-5721ac7d2b91</trackback:ping>
      <pingback:server>http://www.reliablesoftware.com/DasBlog/pingback.aspx</pingback:server>
      <pingback:target>http://www.reliablesoftware.com/DasBlog/PermaLink,guid,567cb193-ccdf-44da-a8d4-5721ac7d2b91.aspx</pingback:target>
      <dc:creator>weblogcomments@reliablesoftware.com (Michael Stiefel)</dc:creator>
      <wfw:commentRss>http://www.reliablesoftware.com/DasBlog/SyndicationService.asmx/GetEntryCommentsRss?guid=567cb193-ccdf-44da-a8d4-5721ac7d2b91</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
          <font size="3">I would like to thank all those who helped me achieve an Microsoft
      MVP award for Visual Developer - Solutions Architect.</font>
        </p>
        <img width="0" height="0" src="http://www.reliablesoftware.com/DasBlog/aggbug.ashx?id=567cb193-ccdf-44da-a8d4-5721ac7d2b91" />
      </body>
      <title>Visual Developer - Solutions Architect Award</title>
      <guid>http://www.reliablesoftware.com/DasBlog/PermaLink,guid,567cb193-ccdf-44da-a8d4-5721ac7d2b91.aspx</guid>
      <link>http://www.reliablesoftware.com/DasBlog/PermaLink,guid,567cb193-ccdf-44da-a8d4-5721ac7d2b91.aspx</link>
      <pubDate>Tue, 04 Jul 2006 01:08:26 GMT</pubDate>
      <description>&lt;p&gt;
   &lt;font size=3&gt;I would like to thank all those who helped me achieve an Microsoft MVP
   award for Visual Developer - Solutions Architect.&lt;/font&gt;
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.reliablesoftware.com/DasBlog/aggbug.ashx?id=567cb193-ccdf-44da-a8d4-5721ac7d2b91" /&gt;</description>
      <comments>http://www.reliablesoftware.com/DasBlog/CommentView,guid,567cb193-ccdf-44da-a8d4-5721ac7d2b91.aspx</comments>
      <category>All;Microsoft .NET</category>
    </item>
    <item>
      <trackback:ping>http://www.reliablesoftware.com/DasBlog/Trackback.aspx?guid=0b6338de-88db-464f-9795-99f264181c87</trackback:ping>
      <pingback:server>http://www.reliablesoftware.com/DasBlog/pingback.aspx</pingback:server>
      <pingback:target>http://www.reliablesoftware.com/DasBlog/PermaLink,guid,0b6338de-88db-464f-9795-99f264181c87.aspx</pingback:target>
      <dc:creator>weblogcomments@reliablesoftware.com (Michael Stiefel)</dc:creator>
      <wfw:commentRss>http://www.reliablesoftware.com/DasBlog/SyndicationService.asmx/GetEntryCommentsRss?guid=0b6338de-88db-464f-9795-99f264181c87</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
          <font size="3">Here is my final dnrTV session: <font color="#003300"><a href="http://dnrtv.com/default.aspx?showID=24">http://dnrtv.com/default.aspx?showID=24</a></font><font color="#000000">.
      It covers advanced topics in Windows Workflow Foundation such as synchronization,
      transactions, and compensation.</font></font>
        </p>
        <img width="0" height="0" src="http://www.reliablesoftware.com/DasBlog/aggbug.ashx?id=0b6338de-88db-464f-9795-99f264181c87" />
      </body>
      <title>Last dnrTV Workflow session on Advanced Workflow Topics</title>
      <guid>http://www.reliablesoftware.com/DasBlog/PermaLink,guid,0b6338de-88db-464f-9795-99f264181c87.aspx</guid>
      <link>http://www.reliablesoftware.com/DasBlog/PermaLink,guid,0b6338de-88db-464f-9795-99f264181c87.aspx</link>
      <pubDate>Mon, 26 Jun 2006 18:40:34 GMT</pubDate>
      <description>&lt;p&gt;
   &lt;font size=3&gt;Here is my final dnrTV session: &lt;font color=#003300&gt;&lt;a href="http://dnrtv.com/default.aspx?showID=24"&gt;http://dnrtv.com/default.aspx?showID=24&lt;/a&gt;&lt;/font&gt;&lt;font color=#000000&gt;.
   It covers advanced topics in Windows Workflow Foundation such as synchronization,
   transactions, and compensation.&lt;/font&gt;&lt;/font&gt;
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.reliablesoftware.com/DasBlog/aggbug.ashx?id=0b6338de-88db-464f-9795-99f264181c87" /&gt;</description>
      <comments>http://www.reliablesoftware.com/DasBlog/CommentView,guid,0b6338de-88db-464f-9795-99f264181c87.aspx</comments>
      <category>All;Microsoft .NET;Workflow</category>
    </item>
    <item>
      <trackback:ping>http://www.reliablesoftware.com/DasBlog/Trackback.aspx?guid=f10f690b-ba63-46d5-af63-59a06766f504</trackback:ping>
      <pingback:server>http://www.reliablesoftware.com/DasBlog/pingback.aspx</pingback:server>
      <pingback:target>http://www.reliablesoftware.com/DasBlog/PermaLink,guid,f10f690b-ba63-46d5-af63-59a06766f504.aspx</pingback:target>
      <dc:creator>weblogcomments@reliablesoftware.com (Michael Stiefel)</dc:creator>
      <wfw:commentRss>http://www.reliablesoftware.com/DasBlog/SyndicationService.asmx/GetEntryCommentsRss?guid=f10f690b-ba63-46d5-af63-59a06766f504</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
          <font size="3">I was interviewed by Carl Franklin and Richard Campbell on .NET Rocks: </font>
          <a href="http://dotnetrocks.com/default.aspx?showID=183">
            <font size="3">http://dotnetrocks.com/default.aspx?showID=183</font>
          </a>. <font size="3">Yes
      we talked about Workflow and SOA. But we touched on other topics such as the failure
      of technology to really make foreign language learning any better.</font></p>
        <img width="0" height="0" src="http://www.reliablesoftware.com/DasBlog/aggbug.ashx?id=f10f690b-ba63-46d5-af63-59a06766f504" />
      </body>
      <title>.NET Rocks Interview</title>
      <guid>http://www.reliablesoftware.com/DasBlog/PermaLink,guid,f10f690b-ba63-46d5-af63-59a06766f504.aspx</guid>
      <link>http://www.reliablesoftware.com/DasBlog/PermaLink,guid,f10f690b-ba63-46d5-af63-59a06766f504.aspx</link>
      <pubDate>Mon, 19 Jun 2006 15:55:37 GMT</pubDate>
      <description>&lt;p&gt;
   &lt;font size=3&gt;I was interviewed by Carl Franklin and Richard Campbell on .NET Rocks: &lt;/font&gt;&lt;a href="http://dotnetrocks.com/default.aspx?showID=183"&gt;&lt;font size=3&gt;http://dotnetrocks.com/default.aspx?showID=183&lt;/font&gt;&lt;/a&gt;. &lt;font size=3&gt;Yes
   we talked about Workflow and SOA. But we touched on other topics such as the failure
   of technology to really make foreign language learning any better.&lt;/font&gt;
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.reliablesoftware.com/DasBlog/aggbug.ashx?id=f10f690b-ba63-46d5-af63-59a06766f504" /&gt;</description>
      <comments>http://www.reliablesoftware.com/DasBlog/CommentView,guid,f10f690b-ba63-46d5-af63-59a06766f504.aspx</comments>
      <category>Microsoft .NET;Software Development;Workflow</category>
    </item>
    <item>
      <trackback:ping>http://www.reliablesoftware.com/DasBlog/Trackback.aspx?guid=ac32f567-205a-4439-9724-7cf34294aaa2</trackback:ping>
      <pingback:server>http://www.reliablesoftware.com/DasBlog/pingback.aspx</pingback:server>
      <pingback:target>http://www.reliablesoftware.com/DasBlog/PermaLink,guid,ac32f567-205a-4439-9724-7cf34294aaa2.aspx</pingback:target>
      <dc:creator>weblogcomments@reliablesoftware.com (Michael Stiefel)</dc:creator>
      <wfw:commentRss>http://www.reliablesoftware.com/DasBlog/SyndicationService.asmx/GetEntryCommentsRss?guid=ac32f567-205a-4439-9724-7cf34294aaa2</wfw:commentRss>
      <slash:comments>1</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
          <font size="3">Here is part three of the Workflow Webcast series: <a href="http://dnrtv.com/default.aspx?showID=23">http://dnrtv.com/default.aspx?showID=23</a></font>
        </p>
        <img width="0" height="0" src="http://www.reliablesoftware.com/DasBlog/aggbug.ashx?id=ac32f567-205a-4439-9724-7cf34294aaa2" />
      </body>
      <title>Workflow Webcast Part 3</title>
      <guid>http://www.reliablesoftware.com/DasBlog/PermaLink,guid,ac32f567-205a-4439-9724-7cf34294aaa2.aspx</guid>
      <link>http://www.reliablesoftware.com/DasBlog/PermaLink,guid,ac32f567-205a-4439-9724-7cf34294aaa2.aspx</link>
      <pubDate>Fri, 16 Jun 2006 15:43:27 GMT</pubDate>
      <description>&lt;p&gt;
   &lt;font size=3&gt;Here is part three of the Workflow Webcast series: &lt;a href="http://dnrtv.com/default.aspx?showID=23"&gt;http://dnrtv.com/default.aspx?showID=23&lt;/a&gt;&lt;/font&gt;
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.reliablesoftware.com/DasBlog/aggbug.ashx?id=ac32f567-205a-4439-9724-7cf34294aaa2" /&gt;</description>
      <comments>http://www.reliablesoftware.com/DasBlog/CommentView,guid,ac32f567-205a-4439-9724-7cf34294aaa2.aspx</comments>
      <category>All;Microsoft .NET;Workflow</category>
    </item>
    <item>
      <trackback:ping>http://www.reliablesoftware.com/DasBlog/Trackback.aspx?guid=7a34e404-cc3f-4d1c-9162-87a66e4f590e</trackback:ping>
      <pingback:server>http://www.reliablesoftware.com/DasBlog/pingback.aspx</pingback:server>
      <pingback:target>http://www.reliablesoftware.com/DasBlog/PermaLink,guid,7a34e404-cc3f-4d1c-9162-87a66e4f590e.aspx</pingback:target>
      <dc:creator>weblogcomments@reliablesoftware.com (Michael Stiefel)</dc:creator>
      <wfw:commentRss>http://www.reliablesoftware.com/DasBlog/SyndicationService.asmx/GetEntryCommentsRss?guid=7a34e404-cc3f-4d1c-9162-87a66e4f590e</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
          <font size="3">Here is the second talk on Workflow Foundation on Carl Franklin's dnrTV:</font>
        </p>
        <p>
          <a href="http://dnrtv.com/default.aspx?showID=22">
            <font color="#0000ff" size="3">http://dnrtv.com/default.aspx?showID=22</font>
          </a>
        </p>
        <p>
        </p>
        <img width="0" height="0" src="http://www.reliablesoftware.com/DasBlog/aggbug.ashx?id=7a34e404-cc3f-4d1c-9162-87a66e4f590e" />
      </body>
      <title>Workflow Webcast Part 2</title>
      <guid>http://www.reliablesoftware.com/DasBlog/PermaLink,guid,7a34e404-cc3f-4d1c-9162-87a66e4f590e.aspx</guid>
      <link>http://www.reliablesoftware.com/DasBlog/PermaLink,guid,7a34e404-cc3f-4d1c-9162-87a66e4f590e.aspx</link>
      <pubDate>Fri, 09 Jun 2006 14:30:19 GMT</pubDate>
      <description>&lt;p&gt;
   &lt;font size=3&gt;Here is the second talk on Workflow Foundation on Carl Franklin's dnrTV:&lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
   &lt;a href="http://dnrtv.com/default.aspx?showID=22"&gt;&lt;font color=#0000ff size=3&gt;http://dnrtv.com/default.aspx?showID=22&lt;/font&gt;&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.reliablesoftware.com/DasBlog/aggbug.ashx?id=7a34e404-cc3f-4d1c-9162-87a66e4f590e" /&gt;</description>
      <comments>http://www.reliablesoftware.com/DasBlog/CommentView,guid,7a34e404-cc3f-4d1c-9162-87a66e4f590e.aspx</comments>
      <category>All;Microsoft .NET;Workflow</category>
    </item>
    <item>
      <trackback:ping>http://www.reliablesoftware.com/DasBlog/Trackback.aspx?guid=7594b6d6-c632-409a-88f5-122937000802</trackback:ping>
      <pingback:server>http://www.reliablesoftware.com/DasBlog/pingback.aspx</pingback:server>
      <pingback:target>http://www.reliablesoftware.com/DasBlog/PermaLink,guid,7594b6d6-c632-409a-88f5-122937000802.aspx</pingback:target>
      <dc:creator>weblogcomments@reliablesoftware.com (Michael Stiefel)</dc:creator>
      <wfw:commentRss>http://www.reliablesoftware.com/DasBlog/SyndicationService.asmx/GetEntryCommentsRss?guid=7594b6d6-c632-409a-88f5-122937000802</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
          <font size="3">Here is the first of four talks on Microsoft Windows Workflow Foundation
      that are appearing on Carl Franklin's dnrTV. This one was broadcast on June 2. Each
      of the following ones should appear in subsequent weeks.</font>
        </p>
        <p>
          <font color="#000000">
            <a href="http://dnrtv.com/default.aspx?showID=21">
              <font size="3">http://dnrtv.com/default.aspx?showID=2</font>
            </a>
          </font>
          <font size="3">1</font>
        </p>
        <a href="http://www.intellectualhedonism.com/2006/06/02/dnrTV21MichaelStiefelOnWindowsWorkflowFoundation1Of4.aspx">
          <font size="3">
          </font>
        </a>
        <p>
          <font size="3">
          </font>
        </p>
        <img width="0" height="0" src="http://www.reliablesoftware.com/DasBlog/aggbug.ashx?id=7594b6d6-c632-409a-88f5-122937000802" />
      </body>
      <title>Workflow Talk on dnrTV</title>
      <guid>http://www.reliablesoftware.com/DasBlog/PermaLink,guid,7594b6d6-c632-409a-88f5-122937000802.aspx</guid>
      <link>http://www.reliablesoftware.com/DasBlog/PermaLink,guid,7594b6d6-c632-409a-88f5-122937000802.aspx</link>
      <pubDate>Mon, 05 Jun 2006 04:06:36 GMT</pubDate>
      <description>&lt;p&gt;
   &lt;font size=3&gt;Here is the first of four talks on Microsoft Windows Workflow Foundation
   that are appearing on Carl Franklin's dnrTV. This one was broadcast on June 2. Each
   of the following ones should appear in subsequent weeks.&lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
   &lt;font color=#000000&gt;&lt;a href="http://dnrtv.com/default.aspx?showID=21"&gt;&lt;font size=3&gt;http://dnrtv.com/default.aspx?showID=2&lt;/font&gt;
   &lt;/font&gt;&lt;font size=3&gt;1&lt;/font&gt;&gt;
&lt;/p&gt;
&lt;a href="http://www.intellectualhedonism.com/2006/06/02/dnrTV21MichaelStiefelOnWindowsWorkflowFoundation1Of4.aspx"&gt;&lt;font size=3&gt;&lt;/font&gt;&lt;/a&gt; 
&lt;p&gt;
   &lt;font size=3&gt;&lt;/font&gt; 
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.reliablesoftware.com/DasBlog/aggbug.ashx?id=7594b6d6-c632-409a-88f5-122937000802" /&gt;</description>
      <comments>http://www.reliablesoftware.com/DasBlog/CommentView,guid,7594b6d6-c632-409a-88f5-122937000802.aspx</comments>
      <category>All;Microsoft .NET;Workflow</category>
    </item>
    <item>
      <trackback:ping>http://www.reliablesoftware.com/DasBlog/Trackback.aspx?guid=6a2d683a-059a-4c72-8cc4-b06fa503d03d</trackback:ping>
      <pingback:server>http://www.reliablesoftware.com/DasBlog/pingback.aspx</pingback:server>
      <pingback:target>http://www.reliablesoftware.com/DasBlog/PermaLink,guid,6a2d683a-059a-4c72-8cc4-b06fa503d03d.aspx</pingback:target>
      <dc:creator>weblogcomments@reliablesoftware.com (Michael Stiefel)</dc:creator>
      <wfw:commentRss>http://www.reliablesoftware.com/DasBlog/SyndicationService.asmx/GetEntryCommentsRss?guid=6a2d683a-059a-4c72-8cc4-b06fa503d03d</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
          <font size="3">Microsoft's Indigo platform will unify all the divergent transport
      technologies (ASMX, WSE, COM+, MSMQ, Remoting) that are in use today. For building
      a service on the .NET platform this is the technology you will use.<br /><br />
      What technology should you use today?<br /><br />
      The ASMX platform's programming model is the same as Indigo's. Attributes, indicating
      what technologies (security, reliability, etc.) you want the infrastructure to use
      are applied to methods. Hence, a converter will be provided to convert ASMX code to
      Indigo code.<br /><br />
      Does this mean ASMX should be the technology of choice? I would argue that WSE is
      the better technology to use. WSE's programming model is not that of Indigo. Classes
      and inheritance are used to interact with the WSE infrastructure. WSE will interoperate
      with Indigo. Nonetheless, the conceptual model of WSE is identical to that of Indigo.<br /><br />
      ASMX is tied to the HTTP transport and its request / response protocol. It encourages
      programmers to think of a service call as a remote procedure call with programming
      types, not as an interoperable, versioned XML document message validated by XML Schema. 
      <br /><br />
      Service developers need to think of request / response as one of several possible
      message exchange patterns (MEP). The most fundamental MEP, the one all MEPs are built
      from, as the WS-Addressing spec makes clear, is the one-way asynchronous message.
      Business services tend to be asynchronous; you apply for a loan and you do not hear
      back for days.<br /><br />
      Service messages can go through intermediaries before reaching the ultimate recipient.
      Each message segment may go over transports other than HTTP.<br /><br />
      WSE's transport classes allow you to build services that use different MEPs over various
      transports. The SOAP envelope classes make it easy to build the SOAP message body
      as XML, or serialized XML objects. You learn to think in terms of XML documents and
      messages, not execution environment dependent types.<br /><br />
      Using this conceptual model your services will last longer, and be easier to evolve
      in a business environment. That will be of more use to your business than using a
      technology that has a better upgrade path, but will have to be rewritten sooner because
      it is poorly designed and implemented.</font>
        </p>
        <img width="0" height="0" src="http://www.reliablesoftware.com/DasBlog/aggbug.ashx?id=6a2d683a-059a-4c72-8cc4-b06fa503d03d" />
      </body>
      <title>Indigo, WSE, or ASMX for Developing .NET Web Services</title>
      <guid>http://www.reliablesoftware.com/DasBlog/PermaLink,guid,6a2d683a-059a-4c72-8cc4-b06fa503d03d.aspx</guid>
      <link>http://www.reliablesoftware.com/DasBlog/PermaLink,guid,6a2d683a-059a-4c72-8cc4-b06fa503d03d.aspx</link>
      <pubDate>Tue, 08 Mar 2005 16:21:11 GMT</pubDate>
      <description>		&lt;p&gt;
   &lt;font size="3"&gt;Microsoft's Indigo platform will unify all the divergent transport
   technologies (ASMX, WSE, COM+, MSMQ, Remoting) that are in use today. For building
   a service on the .NET platform this is the technology you will use.&lt;br /&gt;
   &lt;br /&gt;
   What technology should you use today?&lt;br /&gt;
   &lt;br /&gt;
   The ASMX platform's programming model is the same as Indigo's. Attributes, indicating
   what technologies (security, reliability, etc.) you want the infrastructure to use
   are applied to methods. Hence, a converter will be provided to convert ASMX code to
   Indigo code.&lt;br /&gt;
   &lt;br /&gt;
   Does this mean ASMX should be the technology of choice? I would argue that WSE is
   the better technology to use. WSE's programming model is not that of Indigo. Classes
   and inheritance are used to interact with the WSE infrastructure. WSE will interoperate
   with Indigo. Nonetheless, the conceptual model of WSE is identical to that of Indigo.&lt;br /&gt;
   &lt;br /&gt;
   ASMX is tied to the HTTP transport and its request / response protocol. It encourages
   programmers to think of a service call as a remote procedure call with programming
   types, not as an interoperable, versioned XML document message validated by XML Schema. 
   &lt;br /&gt;
   &lt;br /&gt;
   Service developers need to think of request / response as one of several possible
   message exchange patterns (MEP). The most fundamental MEP, the one all MEPs are built
   from, as the WS-Addressing spec makes clear, is the one-way asynchronous message.
   Business services tend to be asynchronous; you apply for a loan and you do not hear
   back for days.&lt;br /&gt;
   &lt;br /&gt;
   Service messages can go through intermediaries before reaching the ultimate recipient.
   Each message segment may go over transports other than HTTP.&lt;br /&gt;
   &lt;br /&gt;
   WSE's transport classes allow you to build services that use different MEPs over various
   transports. The SOAP envelope classes make it easy to build the SOAP message body
   as XML, or serialized XML objects. You learn to think in terms of XML documents and
   messages, not execution environment dependent types.&lt;br /&gt;
   &lt;br /&gt;
   Using this conceptual model your services will last longer, and be easier to evolve
   in a business environment. That will be of more use to your business than using a
   technology that has a better upgrade path, but will have to be rewritten sooner because
   it is poorly designed and implemented.&lt;/font&gt; 
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.reliablesoftware.com/DasBlog/aggbug.ashx?id=6a2d683a-059a-4c72-8cc4-b06fa503d03d" /&gt;</description>
      <comments>http://www.reliablesoftware.com/DasBlog/CommentView,guid,6a2d683a-059a-4c72-8cc4-b06fa503d03d.aspx</comments>
      <category>All;Microsoft .NET</category>
    </item>
    <item>
      <trackback:ping>http://www.reliablesoftware.com/DasBlog/Trackback.aspx?guid=3119b45c-0a34-4cb5-bdfa-c65d01261264</trackback:ping>
      <pingback:server>http://www.reliablesoftware.com/DasBlog/pingback.aspx</pingback:server>
      <pingback:target>http://www.reliablesoftware.com/DasBlog/PermaLink,guid,3119b45c-0a34-4cb5-bdfa-c65d01261264.aspx</pingback:target>
      <dc:creator>weblogcomments@reliablesoftware.com (Michael Stiefel)</dc:creator>
      <wfw:commentRss>http://www.reliablesoftware.com/DasBlog/SyndicationService.asmx/GetEntryCommentsRss?guid=3119b45c-0a34-4cb5-bdfa-c65d01261264</wfw:commentRss>
      <slash:comments>2</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
          <font size="4">
            <font size="3">When the speakers on the .NET track of the Syscon Edge
      2004 conference got together, Carl Franklin and I were talking about why people think
      that C# is the "official language" for .NET. I told him that even though most of my
      consulting is in C#, I think that attitude is wrong. I believe it is important to
      elaborate why I feel this way.<br /><br />
      People who feel that VB.NET is an inferior language to C#, or that somehow C# is a
      "better language", or the "official language" for accessing the .NET Framework Class
      Library are just plain wrong. My personal opinion is that I prefer C# to VB.NET because
      I like the compact syntax among other things, but that is a personal judgement.<br /><br />
      People who talk that way about VB.NET are confusing three issues. 
      <br /><br />
      First suitability to access the Framework Class Library (FCL). Every example in my
      book "Application Development Using C# and .NET" has been translated into VB.NET and
      works exactly the same way. I have used the same courseware for both C# training and
      VB.NET training with the only difference that the examples were in the different languages.
      From the point of view of the FCL, everything C# can do, VB.NET can do as well. 
      <br /><br />
      Second issue: suitability to a given task. Equality before the FCL, or the Common
      Language Runtime is not everything. Perl.NET can do things that C# cannot. Does that
      make Perl.NET a better language than C#? No. It just makes it a better choice in some
      cases. If you need to use unsafe mode, you need C#. You cannot overload operators
      in VB.NET. You might find VB.NET's late binding feature more convenient than using
      the reflection API in C#. You might like background compilation in VB.NET. It is is
      possible, that for certain features the IL that C# generates is more efficient than
      the IL that VB.NET does. I do not know if this is true, but even if it is, it probably
      does not matter for most applications. After all, in some performance situations managed
      C++ is better than C#. For people interested in the differences between the languages
      look at O'Reilly's <em>C# and VB.NET Conversion</em> pocket reference.<br /><br />
      FInally: de gustibus non disputandum est, there are matters of personal preference.
      I like C#'s compactness. I think it has certain advantages, but that is a matter of
      taste. Taste is important even in technical matters, but do not confuse taste with
      other factors, or mistake taste for intuition.<br /><br />
      I wish VB.NET programmers a long and productive life. VB.NET programmers should not
      feel inferior</font>.</font>
        </p>
        <img width="0" height="0" src="http://www.reliablesoftware.com/DasBlog/aggbug.ashx?id=3119b45c-0a34-4cb5-bdfa-c65d01261264" />
      </body>
      <title>Does .NET Have an "Official Language"?</title>
      <guid>http://www.reliablesoftware.com/DasBlog/PermaLink,guid,3119b45c-0a34-4cb5-bdfa-c65d01261264.aspx</guid>
      <link>http://www.reliablesoftware.com/DasBlog/PermaLink,guid,3119b45c-0a34-4cb5-bdfa-c65d01261264.aspx</link>
      <pubDate>Mon, 01 Mar 2004 04:01:16 GMT</pubDate>
      <description>		&lt;p&gt;
   &lt;font size="4"&gt; &lt;font size="3"&gt;When the speakers on the .NET track of the Syscon Edge
   2004 conference got together, Carl Franklin and I were talking about why people think
   that C# is the "official language" for .NET. I told him that even though most of my
   consulting is in C#, I think that attitude is wrong. I believe it is important to
   elaborate why I feel this way.&lt;br /&gt;
   &lt;br /&gt;
   People who feel that VB.NET is an inferior language to C#, or that somehow C# is a
   "better language", or the "official language" for accessing the .NET Framework Class
   Library are just plain wrong. My personal opinion is that I prefer C# to VB.NET because
   I like the compact syntax among other things, but that is a personal judgement.&lt;br /&gt;
   &lt;br /&gt;
   People who talk that way about VB.NET are confusing three issues. 
   &lt;br /&gt;
   &lt;br /&gt;
   First suitability to access the Framework Class Library (FCL). Every example in my
   book "Application Development Using C# and .NET" has been translated into VB.NET and
   works exactly the same way. I have used the same courseware for both C# training and
   VB.NET training with the only difference that the examples were in the different languages.
   From the point of view of the FCL, everything C# can do, VB.NET can do as well. 
   &lt;br /&gt;
   &lt;br /&gt;
   Second issue: suitability to a given task. Equality before the FCL, or the Common
   Language Runtime is not everything. Perl.NET can do things that C# cannot. Does that
   make Perl.NET a better language than C#? No. It just makes it a better choice in some
   cases. If you need to use unsafe mode, you need C#. You cannot overload operators
   in VB.NET. You might find VB.NET's late binding feature more convenient than using
   the reflection API in C#. You might like background compilation in VB.NET. It is is
   possible, that for certain features the IL that C# generates is more efficient than
   the IL that VB.NET does. I do not know if this is true, but even if it is, it probably
   does not matter for most applications. After all, in some performance situations managed
   C++ is better than C#. For people interested in the differences between the languages
   look at O'Reilly's &lt;em&gt;C# and VB.NET Conversion&lt;/em&gt; pocket reference.&lt;br /&gt;
   &lt;br /&gt;
   FInally: de gustibus non disputandum est, there are matters of personal preference.
   I like C#'s compactness. I think it has certain advantages, but that is a matter of
   taste. Taste is important even in technical matters, but do not confuse taste with
   other factors, or mistake taste for intuition.&lt;br /&gt;
   &lt;br /&gt;
   I wish VB.NET programmers a long and productive life. VB.NET programmers should not
   feel inferior&lt;/font&gt;.&lt;/font&gt; 
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.reliablesoftware.com/DasBlog/aggbug.ashx?id=3119b45c-0a34-4cb5-bdfa-c65d01261264" /&gt;</description>
      <comments>http://www.reliablesoftware.com/DasBlog/CommentView,guid,3119b45c-0a34-4cb5-bdfa-c65d01261264.aspx</comments>
      <category>All;Microsoft .NET</category>
    </item>
  </channel>
</rss>