<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://weblogs.asp.net/utility/FeedStylesheets/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/"><channel><title>Ted Graham on .NET</title><link>http://weblogs.asp.net/tgraham/default.aspx</link><description>Interesting issues and tidbits about software development, generally using .NET</description><dc:language>en</dc:language><generator>CommunityServer 2007 SP1 (Debug Build: 20510.895)</generator><item><title>Loading the assembly for a custom log4net appender</title><link>http://weblogs.asp.net/tgraham/archive/2007/05/02/loading-the-assembly-for-a-custom-log4net-appender.aspx</link><pubDate>Wed, 02 May 2007 19:45:00 GMT</pubDate><guid isPermaLink="false">c06e2b9d-981a-45b4-a55f-ab0d8bbfdc1c:2481740</guid><dc:creator>Ted_Graham</dc:creator><slash:comments>1</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://weblogs.asp.net/tgraham/rsscomments.aspx?PostID=2481740</wfw:commentRss><comments>http://weblogs.asp.net/tgraham/archive/2007/05/02/loading-the-assembly-for-a-custom-log4net-appender.aspx#comments</comments><description>As I described recently, I have built a custom appender that inherits from SmtpAppender but supports SSL sending using .NET 2.0. However, when I configure my web application to use it, I get an error that: log4net:ERROR XmlHierarchyConfigurator: Could...(&lt;a href="http://weblogs.asp.net/tgraham/archive/2007/05/02/loading-the-assembly-for-a-custom-log4net-appender.aspx"&gt;read more&lt;/a&gt;)&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=2481740" width="1" height="1"&gt;</description><category domain="http://weblogs.asp.net/tgraham/archive/tags/.NET/default.aspx">.NET</category><category domain="http://weblogs.asp.net/tgraham/archive/tags/log4net/default.aspx">log4net</category></item><item><title>A log4net appender that uses SmtpClient</title><link>http://weblogs.asp.net/tgraham/archive/2007/04/20/a-log4net-appender-that-uses-smtpclient.aspx</link><pubDate>Fri, 20 Apr 2007 21:36:00 GMT</pubDate><guid isPermaLink="false">c06e2b9d-981a-45b4-a55f-ab0d8bbfdc1c:2304984</guid><dc:creator>Ted_Graham</dc:creator><slash:comments>4</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://weblogs.asp.net/tgraham/rsscomments.aspx?PostID=2304984</wfw:commentRss><comments>http://weblogs.asp.net/tgraham/archive/2007/04/20/a-log4net-appender-that-uses-smtpclient.aspx#comments</comments><description>Google Apps provides free email hosting for small businesses. However, their SMTP server requires SSL authentication for sending outbound emails, so you can&amp;#39;t use use log4net to send emails based on the content of logged messages. Ron Grabowski suggested...(&lt;a href="http://weblogs.asp.net/tgraham/archive/2007/04/20/a-log4net-appender-that-uses-smtpclient.aspx"&gt;read more&lt;/a&gt;)&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=2304984" width="1" height="1"&gt;</description><category domain="http://weblogs.asp.net/tgraham/archive/tags/.NET/default.aspx">.NET</category><category domain="http://weblogs.asp.net/tgraham/archive/tags/log4net/default.aspx">log4net</category></item><item><title>A realistic log4net config</title><link>http://weblogs.asp.net/tgraham/archive/2007/03/15/a-realistic-log4net-config.aspx</link><pubDate>Thu, 15 Mar 2007 16:34:00 GMT</pubDate><guid isPermaLink="false">c06e2b9d-981a-45b4-a55f-ab0d8bbfdc1c:2034161</guid><dc:creator>Ted_Graham</dc:creator><slash:comments>7</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://weblogs.asp.net/tgraham/rsscomments.aspx?PostID=2034161</wfw:commentRss><comments>http://weblogs.asp.net/tgraham/archive/2007/03/15/a-realistic-log4net-config.aspx#comments</comments><description>Most log4net config file examples show the simplest case. Here is a more realistic example of a production log4net config that uses multiple appenders. This comes from an ASP.NET application, but the same technique will work in a server or client application...(&lt;a href="http://weblogs.asp.net/tgraham/archive/2007/03/15/a-realistic-log4net-config.aspx"&gt;read more&lt;/a&gt;)&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=2034161" width="1" height="1"&gt;</description><category domain="http://weblogs.asp.net/tgraham/archive/tags/.NET+best+practices/default.aspx">.NET best practices</category><category domain="http://weblogs.asp.net/tgraham/archive/tags/.NET/default.aspx">.NET</category><category domain="http://weblogs.asp.net/tgraham/archive/tags/ASP.NET/default.aspx">ASP.NET</category><category domain="http://weblogs.asp.net/tgraham/archive/tags/General+Software+Development/default.aspx">General Software Development</category><category domain="http://weblogs.asp.net/tgraham/archive/tags/C_2300_/default.aspx">C#</category><category domain="http://weblogs.asp.net/tgraham/archive/tags/.NET+FAQ/default.aspx">.NET FAQ</category><category domain="http://weblogs.asp.net/tgraham/archive/tags/log4net/default.aspx">log4net</category></item><item><title>Software Startup Series</title><link>http://weblogs.asp.net/tgraham/archive/2007/03/09/software-startup-series.aspx</link><pubDate>Fri, 09 Mar 2007 16:30:00 GMT</pubDate><guid isPermaLink="false">c06e2b9d-981a-45b4-a55f-ab0d8bbfdc1c:1978101</guid><dc:creator>Ted_Graham</dc:creator><slash:comments>2</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://weblogs.asp.net/tgraham/rsscomments.aspx?PostID=1978101</wfw:commentRss><comments>http://weblogs.asp.net/tgraham/archive/2007/03/09/software-startup-series.aspx#comments</comments><description>My series highlighting helpful information for software startups is now in the 8th week. I started this as a way to communicate helpful information with my partners, but it is starting to get some traffic and take on a life of its own. The micro-ISV movement...(&lt;a href="http://weblogs.asp.net/tgraham/archive/2007/03/09/software-startup-series.aspx"&gt;read more&lt;/a&gt;)&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=1978101" width="1" height="1"&gt;</description><category domain="http://weblogs.asp.net/tgraham/archive/tags/General+Software+Development/default.aspx">General Software Development</category></item><item><title>Installing VS 2003 AFTER VS 2005</title><link>http://weblogs.asp.net/tgraham/archive/2007/01/14/installing-vs-2003-after-vs-2005.aspx</link><pubDate>Sun, 14 Jan 2007 17:33:00 GMT</pubDate><guid isPermaLink="false">c06e2b9d-981a-45b4-a55f-ab0d8bbfdc1c:1406099</guid><dc:creator>Ted_Graham</dc:creator><slash:comments>1</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://weblogs.asp.net/tgraham/rsscomments.aspx?PostID=1406099</wfw:commentRss><comments>http://weblogs.asp.net/tgraham/archive/2007/01/14/installing-vs-2003-after-vs-2005.aspx#comments</comments><description>Like most developers, I&amp;#39;ve already upgraded to VS 2005. However, a product which I am releasing soon uses .NET 1.1 for the client side to ease installation. So I had to install VS 2003 after having VS 2005 installed. Luckily, and thanks to MS, it...(&lt;a href="http://weblogs.asp.net/tgraham/archive/2007/01/14/installing-vs-2003-after-vs-2005.aspx"&gt;read more&lt;/a&gt;)&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=1406099" width="1" height="1"&gt;</description><category domain="http://weblogs.asp.net/tgraham/archive/tags/.NET/default.aspx">.NET</category><category domain="http://weblogs.asp.net/tgraham/archive/tags/Visual+Studio/default.aspx">Visual Studio</category></item><item><title>Razr survives the washing machine</title><link>http://weblogs.asp.net/tgraham/archive/2007/01/11/razr-survives-the-washing-machine.aspx</link><pubDate>Fri, 12 Jan 2007 03:31:00 GMT</pubDate><guid isPermaLink="false">c06e2b9d-981a-45b4-a55f-ab0d8bbfdc1c:1393433</guid><dc:creator>Ted_Graham</dc:creator><slash:comments>2</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://weblogs.asp.net/tgraham/rsscomments.aspx?PostID=1393433</wfw:commentRss><comments>http://weblogs.asp.net/tgraham/archive/2007/01/11/razr-survives-the-washing-machine.aspx#comments</comments><description>Following a long night of poker on Saturday, I started a load of laundry. After transferring it to the dryer, I heard a suspicious thumping and found my Razr had gone through the full cycle. I figured it was dead, but I took out the battery and the sim...(&lt;a href="http://weblogs.asp.net/tgraham/archive/2007/01/11/razr-survives-the-washing-machine.aspx"&gt;read more&lt;/a&gt;)&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=1393433" width="1" height="1"&gt;</description><category domain="http://weblogs.asp.net/tgraham/archive/tags/Community+News/default.aspx">Community News</category></item><item><title>Subversion Hosting</title><link>http://weblogs.asp.net/tgraham/archive/2007/01/02/subversion-hosting.aspx</link><pubDate>Tue, 02 Jan 2007 23:19:00 GMT</pubDate><guid isPermaLink="false">c06e2b9d-981a-45b4-a55f-ab0d8bbfdc1c:1352326</guid><dc:creator>Ted_Graham</dc:creator><slash:comments>2</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://weblogs.asp.net/tgraham/rsscomments.aspx?PostID=1352326</wfw:commentRss><comments>http://weblogs.asp.net/tgraham/archive/2007/01/02/subversion-hosting.aspx#comments</comments><description>I&amp;#39;m always shocked when I encounter people and projects that aren&amp;#39;t using version control. After years of knowing that I can rollback to a previous version, working on files that aren&amp;#39;t versioned scares me. I keep everything possible checked...(&lt;a href="http://weblogs.asp.net/tgraham/archive/2007/01/02/subversion-hosting.aspx"&gt;read more&lt;/a&gt;)&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=1352326" width="1" height="1"&gt;</description><category domain="http://weblogs.asp.net/tgraham/archive/tags/General+Software+Development/default.aspx">General Software Development</category></item><item><title>Copyright for Software Companies</title><link>http://weblogs.asp.net/tgraham/archive/2006/12/27/copyright-for-software-companies.aspx</link><pubDate>Wed, 27 Dec 2006 15:09:00 GMT</pubDate><guid isPermaLink="false">c06e2b9d-981a-45b4-a55f-ab0d8bbfdc1c:1321985</guid><dc:creator>Ted_Graham</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://weblogs.asp.net/tgraham/rsscomments.aspx?PostID=1321985</wfw:commentRss><comments>http://weblogs.asp.net/tgraham/archive/2006/12/27/copyright-for-software-companies.aspx#comments</comments><description>&lt;p&gt;Most programmers only think about copyright when management decrees that every file needs a copyright notice at the top or bottom.&amp;nbsp; Next month, I&amp;rsquo;m sure a junior developer somewhere will be assigned to update the copyright date on a source tree to show 2007, while the features that would make that product a success languish unimplemented.&amp;nbsp; &lt;/p&gt;&lt;p&gt;Read more about &lt;a href="http://www.moneyandsoftware.com/2006/12/18/copyright-for-software-companies/"&gt;copyright for software companies&lt;/a&gt; on my business blog, &lt;a href="http://weblogs.asp.net/controlpanel/blogs/www.MoneyAndSoftware.com"&gt;Money and Software&lt;/a&gt;.&lt;/p&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=1321985" width="1" height="1"&gt;</description><category domain="http://weblogs.asp.net/tgraham/archive/tags/General+Software+Development/default.aspx">General Software Development</category></item><item><title>Google Search API fails sporadically with "502 Bad Gateway"</title><link>http://weblogs.asp.net/tgraham/archive/2006/11/22/google-search-api-fails-sporadically-with-502-bad-gateway.aspx</link><pubDate>Wed, 22 Nov 2006 19:37:00 GMT</pubDate><guid isPermaLink="false">c06e2b9d-981a-45b4-a55f-ab0d8bbfdc1c:999752</guid><dc:creator>Ted_Graham</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://weblogs.asp.net/tgraham/rsscomments.aspx?PostID=999752</wfw:commentRss><comments>http://weblogs.asp.net/tgraham/archive/2006/11/22/google-search-api-fails-sporadically-with-502-bad-gateway.aspx#comments</comments><description>&lt;p class="MsoPlainText" style="margin: 0in 0in 0pt"&gt;&lt;font face="Courier New"&gt;I heard about Google&amp;#39;s &lt;/font&gt;&lt;a href="http://code.google.com/apis/soapsearch/"&gt;&lt;font face="Courier New"&gt;web service interface&lt;/font&gt;&lt;/a&gt;&lt;font face="Courier New"&gt; to the search database back when it was released, but today was my first attempt to use it.&lt;span&gt;&amp;nbsp; &lt;/span&gt;I&amp;#39;m trying to learn python, but the SOAP toolkits for python seem to be in a state of flux so I switched back to C# rather than figure out which python libraries to download.&lt;span&gt;&amp;nbsp; &lt;/span&gt;&lt;/font&gt;&lt;/p&gt;&lt;p class="MsoPlainText" style="margin: 0in 0in 0pt"&gt;&lt;font face="Courier New"&gt;&lt;/font&gt;&lt;/p&gt;&lt;p class="MsoPlainText" style="margin: 0in 0in 0pt"&gt;&lt;font face="Courier New"&gt;I experienced two problems, one minor and one major.&lt;span&gt;&amp;nbsp; &lt;/span&gt;The &lt;/font&gt;&lt;a href="http://code.google.com/apis/soapsearch/reference.html#searchrequest"&gt;&lt;font face="Courier New"&gt;doSearch method &lt;/font&gt;&lt;/a&gt;&lt;font face="Courier New"&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;takes a bunch of strings, and if you pass null in, you get back weird errors talking about no signature match and java.lang.String.&lt;span&gt;&amp;nbsp; &lt;/span&gt;Passing String.Empty fixes that.&lt;span&gt;&amp;nbsp; &lt;/span&gt;&lt;/font&gt;&lt;/p&gt;&lt;p class="MsoPlainText" style="margin: 0in 0in 0pt"&gt;&lt;font face="Courier New"&gt;&lt;/font&gt;&lt;/p&gt;&lt;p class="MsoPlainText" style="margin: 0in 0in 0pt"&gt;&lt;font face="Courier New"&gt;The second problem is that, requests to search sporadically fail with &amp;quot;502: Bad Gateway&amp;quot;.&lt;span&gt;&amp;nbsp; &lt;/span&gt;From my googling (ah, the irony) for a solution, this has been a problem since January 2006, and is still unsolved.&lt;span&gt;&amp;nbsp; &lt;/span&gt;&lt;/font&gt;&lt;/p&gt;&lt;p class="MsoPlainText" style="margin: 0in 0in 0pt"&gt;&lt;font face="Courier New"&gt;&lt;/font&gt;&lt;/p&gt;&lt;p class="MsoPlainText" style="margin: 0in 0in 0pt"&gt;&lt;font face="Courier New"&gt;The solution on the forums seems to be catch the exception and try again; I didn&amp;#39;t expect that to work, but it did.&lt;span&gt;&amp;nbsp; &lt;/span&gt;I wrote a console app that sent the same string to the gateway 30 times, and it seemed to randomly error out.&lt;span&gt;&amp;nbsp; &lt;/span&gt;A snippet of the output is below:&lt;/font&gt;&lt;/p&gt;&lt;p class="MsoPlainText" style="margin: 0in 0in 0pt"&gt;&lt;font face="Courier New"&gt;&lt;/font&gt;&lt;/p&gt;&lt;p class="MsoPlainText" style="margin: 0in 0in 0pt"&gt;&lt;font face="Courier New"&gt;12:27:14.593 - The request failed with HTTP status 502: Bad Gateway.&lt;/font&gt;&lt;/p&gt;&lt;p class="MsoPlainText" style="margin: 0in 0in 0pt"&gt;&lt;font face="Courier New"&gt;12:27:19.046 - Success, found 782000 items.&lt;/font&gt;&lt;/p&gt;&lt;p class="MsoPlainText" style="margin: 0in 0in 0pt"&gt;&lt;font face="Courier New"&gt;12:27:32.625 - Success, found 782000 items.&lt;/font&gt;&lt;/p&gt;&lt;p class="MsoPlainText" style="margin: 0in 0in 0pt"&gt;&lt;font face="Courier New"&gt;12:27:35.000 - Success, found 782000 items.&lt;/font&gt;&lt;/p&gt;&lt;p class="MsoPlainText" style="margin: 0in 0in 0pt"&gt;&lt;font face="Courier New"&gt;12:27:35.984 - The request failed with HTTP status 502: Bad Gateway.&lt;/font&gt;&lt;/p&gt;&lt;p class="MsoPlainText" style="margin: 0in 0in 0pt"&gt;&lt;font face="Courier New"&gt;12:27:39.843 - Success, found 782000 items.&lt;/font&gt;&lt;/p&gt;&lt;p class="MsoPlainText" style="margin: 0in 0in 0pt"&gt;&lt;font face="Courier New"&gt;12:27:42.593 - Success, found 782000 items.&lt;/font&gt;&lt;/p&gt;&lt;p class="MsoPlainText" style="margin: 0in 0in 0pt"&gt;&lt;font face="Courier New"&gt;&lt;/font&gt;&lt;/p&gt;&lt;p class="MsoPlainText" style="margin: 0in 0in 0pt"&gt;&lt;font face="Courier New"&gt;This makes this obviously unsuitable for anything more than playful experimentation, but since the API doesn&amp;#39;t return ads, I guess Google doesn&amp;#39;t care. &lt;/font&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=999752" width="1" height="1"&gt;</description><category domain="http://weblogs.asp.net/tgraham/archive/tags/.NET+best+practices/default.aspx">.NET best practices</category><category domain="http://weblogs.asp.net/tgraham/archive/tags/.NET/default.aspx">.NET</category><category domain="http://weblogs.asp.net/tgraham/archive/tags/General+Software+Development/default.aspx">General Software Development</category><category domain="http://weblogs.asp.net/tgraham/archive/tags/C_2300_/default.aspx">C#</category><category domain="http://weblogs.asp.net/tgraham/archive/tags/Web+Services/default.aspx">Web Services</category></item><item><title>Web Service performance numbers--plenty fast for UI work</title><link>http://weblogs.asp.net/tgraham/archive/2006/11/15/Web-Service-performance-numbers_2D002D00_plenty-fast-for-UI-work.aspx</link><pubDate>Wed, 15 Nov 2006 23:12:00 GMT</pubDate><guid isPermaLink="false">c06e2b9d-981a-45b4-a55f-ab0d8bbfdc1c:934884</guid><dc:creator>Ted_Graham</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://weblogs.asp.net/tgraham/rsscomments.aspx?PostID=934884</wfw:commentRss><comments>http://weblogs.asp.net/tgraham/archive/2006/11/15/Web-Service-performance-numbers_2D002D00_plenty-fast-for-UI-work.aspx#comments</comments><description>&lt;p style="margin: 0in 0in 0pt" class="MsoPlainText"&gt;&lt;font face="Courier New"&gt;While designing Web Services, the question of &amp;quot;interface granularity&amp;quot; often comes up.&lt;span&gt;&amp;nbsp; &lt;/span&gt;Conventional wisdom is that Web Service calls are slow, so the interface must be quite coarse to prevent performance problems.&lt;/font&gt;&lt;/p&gt;&lt;p style="margin: 0in 0in 0pt" class="MsoPlainText"&gt;&amp;nbsp;&lt;/p&gt;&lt;p style="margin: 0in 0in 0pt" class="MsoPlainText"&gt;&lt;font face="Courier New"&gt;Four years ago, a partner and I built a 2-tier system, a rich client app that talked directly to a database.&lt;span&gt;&amp;nbsp; &lt;/span&gt;Towards the end of the development cycle, the users said, &amp;quot;We know we said this was for internal use, but we want to use this application over the Internet.&amp;quot; &lt;/font&gt;&lt;/p&gt;&lt;p style="margin: 0in 0in 0pt" class="MsoPlainText"&gt;&amp;nbsp;&lt;/p&gt;&lt;p style="margin: 0in 0in 0pt" class="MsoPlainText"&gt;&lt;font face="Courier New"&gt;Bam! That is the kind of major requirements change that can kill projects.&lt;span&gt;&amp;nbsp; &lt;/span&gt;After some research, we factored the database calls into an IDataAccess interface that had two implementors: the original database layer and a web service layer that then called the original database layer.&lt;span&gt;&amp;nbsp; &lt;/span&gt;On startup, the app figures out which interface to use.&lt;span&gt;&amp;nbsp; &lt;/span&gt;As our research and prototyping showed, web services are plenty fast for this scenario.&lt;span&gt;&amp;nbsp; &lt;/span&gt;&lt;/font&gt;&lt;/p&gt;&lt;p style="margin: 0in 0in 0pt" class="MsoPlainText"&gt;&amp;nbsp;&lt;/p&gt;&lt;p style="margin: 0in 0in 0pt" class="MsoPlainText"&gt;&lt;font face="Courier New"&gt;My current project is also a rich client backed by web services, and we are discussing how quickly the UI needs to respond to the user.&lt;span&gt;&amp;nbsp; &lt;/span&gt;Microsoft&amp;#39;s &lt;a href="http://msdn2.microsoft.com/en-us/library/ms740089.aspx"&gt;performance guidelines&lt;/a&gt;&amp;nbsp;&lt;/font&gt;&lt;font face="Courier New"&gt;suggest one threshold, &amp;quot;A good guideline for interactive response is 500 milliseconds.&amp;quot;&lt;/font&gt;&lt;/p&gt;&lt;p style="margin: 0in 0in 0pt" class="MsoPlainText"&gt;&amp;nbsp;&lt;/p&gt;&lt;p style="margin: 0in 0in 0pt" class="MsoPlainText"&gt;&lt;font face="Courier New"&gt;Jim Webber&amp;nbsp;&lt;/font&gt;&lt;font face="Courier New"&gt;&lt;a href="http://webservices.org/weblog/jim_webber/even_if_you_think_you_can_beat_waldo_you_can_t_beat_einstein"&gt;estimates&lt;/a&gt; that SOAP adds 14 milliseconds round trip.&lt;span&gt;&amp;nbsp; &lt;/span&gt;Network latency is usually less than 50 milliseconds round trip in the US, increasing roughly linearly to a rough maximum of 300 milliseconds worldwide.&lt;span&gt;&amp;nbsp; &lt;/span&gt;&lt;/font&gt;&lt;/p&gt;&lt;p style="margin: 0in 0in 0pt" class="MsoPlainText"&gt;&amp;nbsp;&lt;/p&gt;&lt;p style="margin: 0in 0in 0pt" class="MsoPlainText"&gt;&lt;font face="Courier New"&gt;In my experience, a hit to an optimized database costs roughly 20 ms, plus latency to the database machine of another 5-10 ms.&lt;span&gt;&amp;nbsp; &lt;/span&gt;So we are looking at 14 + 50 + 20 + 10 = 94ms.&lt;span&gt;&amp;nbsp; &lt;/span&gt;Add in another 50 ms for authentication, authorization and business logic on the server, which leaves the UI well under the 500 ms limit.&lt;span&gt;&amp;nbsp; &lt;/span&gt;Anyone have numbers for how much SSL increases latency? &lt;/font&gt;&lt;/p&gt;&lt;p style="margin: 0in 0in 0pt" class="MsoPlainText"&gt;&amp;nbsp;&lt;/p&gt;&lt;p style="margin: 0in 0in 0pt" class="MsoPlainText"&gt;&lt;font face="Courier New"&gt;I just did some performance testing that supports these numbers as reasonable.&lt;span&gt;&amp;nbsp; &lt;/span&gt;Using a unit test that connects to the web service and uses it to insert a row in a database (everything on the same machine), I was seeing average call times of 15 ms.&lt;span&gt;&amp;nbsp; &lt;/span&gt;That leaves room for a lot of latency before the application slows down.&lt;/font&gt;&lt;/p&gt;&lt;p style="margin: 0in 0in 0pt" class="MsoPlainText"&gt;&amp;nbsp;&lt;/p&gt;&lt;p style="margin: 0in 0in 0pt" class="MsoPlainText"&gt;&lt;font face="Courier New"&gt;On my project four years ago, we were forced into a finer grained (more talkative) interface by previous decisions.&lt;span&gt;&amp;nbsp; &lt;/span&gt;These days, I&amp;#39;m choosing this architecture with my eyes open, and I like the view.&lt;/font&gt;&lt;/p&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=934884" width="1" height="1"&gt;</description><category domain="http://weblogs.asp.net/tgraham/archive/tags/.NET+best+practices/default.aspx">.NET best practices</category><category domain="http://weblogs.asp.net/tgraham/archive/tags/Software+Process/default.aspx">Software Process</category><category domain="http://weblogs.asp.net/tgraham/archive/tags/Advanced+.NET+Techniques/default.aspx">Advanced .NET Techniques</category><category domain="http://weblogs.asp.net/tgraham/archive/tags/.NET/default.aspx">.NET</category><category domain="http://weblogs.asp.net/tgraham/archive/tags/ASP.NET/default.aspx">ASP.NET</category><category domain="http://weblogs.asp.net/tgraham/archive/tags/Windows+Forms/default.aspx">Windows Forms</category><category domain="http://weblogs.asp.net/tgraham/archive/tags/General+Software+Development/default.aspx">General Software Development</category></item></channel></rss>