<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
		>
<channel>
	<title>Comments on: Scaling Long Running Web Services</title>
	<atom:link href="http://www.udidahan.com/2008/07/30/scaling-long-running-web-services/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.udidahan.com/2008/07/30/scaling-long-running-web-services/</link>
	<description>Enterprise Development Expert &#38; SOA Specialist</description>
	<lastBuildDate>Sun, 14 Mar 2010 06:27:00 -0500</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.4</generator>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
		<item>
		<title>By: Long-Running Webservices without Polling &#171; Jonathan Dickinson</title>
		<link>http://www.udidahan.com/2008/07/30/scaling-long-running-web-services/comment-page-1/#comment-36153</link>
		<dc:creator>Long-Running Webservices without Polling &#171; Jonathan Dickinson</dc:creator>
		<pubDate>Mon, 01 Jun 2009 07:31:15 +0000</pubDate>
		<guid isPermaLink="false">http://www.udidahan.com/2008/07/30/scaling-long-running-web-services/#comment-36153</guid>
		<description>[...] read about how one could do this over at Udi Dahan&#8217;s blog, but this seems like a bad practice to me, most importantly - it uses polling. Most people seem to [...]</description>
		<content:encoded><![CDATA[<p>[...] read about how one could do this over at Udi Dahan&#8217;s blog, but this seems like a bad practice to me, most importantly &#8211; it uses polling. Most people seem to [...]</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: udidahan</title>
		<link>http://www.udidahan.com/2008/07/30/scaling-long-running-web-services/comment-page-1/#comment-35866</link>
		<dc:creator>udidahan</dc:creator>
		<pubDate>Sat, 20 Dec 2008 08:55:30 +0000</pubDate>
		<guid isPermaLink="false">http://www.udidahan.com/2008/07/30/scaling-long-running-web-services/#comment-35866</guid>
		<description>Simon,

&quot;Passive kinds of data&quot;, like countries, regions, etc were done in a similar manner.

The main difference was that they had a well known URI ahead of time as well as longer cache timeouts. Regardless, when that data was changed on the server, it would also update that resource/URI.</description>
		<content:encoded><![CDATA[<p>Simon,</p>
<p>&#8220;Passive kinds of data&#8221;, like countries, regions, etc were done in a similar manner.</p>
<p>The main difference was that they had a well known URI ahead of time as well as longer cache timeouts. Regardless, when that data was changed on the server, it would also update that resource/URI.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Simon Segal</title>
		<link>http://www.udidahan.com/2008/07/30/scaling-long-running-web-services/comment-page-1/#comment-35865</link>
		<dc:creator>Simon Segal</dc:creator>
		<pubDate>Sat, 20 Dec 2008 05:29:37 +0000</pubDate>
		<guid isPermaLink="false">http://www.udidahan.com/2008/07/30/scaling-long-running-web-services/#comment-35865</guid>
		<description>Udi

Love this approach. Were all the UI requests including more passive kinds of data (enumerated lists of regions for example) also handled by this single architectural approach in this scenario?</description>
		<content:encoded><![CDATA[<p>Udi</p>
<p>Love this approach. Were all the UI requests including more passive kinds of data (enumerated lists of regions for example) also handled by this single architectural approach in this scenario?</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Jonathan Dickinson</title>
		<link>http://www.udidahan.com/2008/07/30/scaling-long-running-web-services/comment-page-1/#comment-31483</link>
		<dc:creator>Jonathan Dickinson</dc:creator>
		<pubDate>Wed, 10 Sep 2008 13:24:04 +0000</pubDate>
		<guid isPermaLink="false">http://www.udidahan.com/2008/07/30/scaling-long-running-web-services/#comment-31483</guid>
		<description>How about using an async HTTP handler with your restful stuff. This way you are not wasting _bandwidth_ (far more expensive than CPU/Memory resources).

I.e.
string MyWSStart(string bla) -&gt; Returns URL &quot;wswait.ashx?id=100&quot;.
Open connection to wswait.ashx and wait for response.
string MyWSEnd() -&gt; Returns result.

I will have it up on my blog at http://www.geekswithblogs.net/jcdickinson/ in a few minutes.</description>
		<content:encoded><![CDATA[<p>How about using an async HTTP handler with your restful stuff. This way you are not wasting _bandwidth_ (far more expensive than CPU/Memory resources).</p>
<p>I.e.<br />
string MyWSStart(string bla) -&gt; Returns URL &#8220;wswait.ashx?id=100&#8243;.<br />
Open connection to wswait.ashx and wait for response.<br />
string MyWSEnd() -&gt; Returns result.</p>
<p>I will have it up on my blog at <a href="http://www.geekswithblogs.net/jcdickinson/" rel="nofollow">http://www.geekswithblogs.net/jcdickinson/</a> in a few minutes.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: udidahan</title>
		<link>http://www.udidahan.com/2008/07/30/scaling-long-running-web-services/comment-page-1/#comment-31122</link>
		<dc:creator>udidahan</dc:creator>
		<pubDate>Sat, 06 Sep 2008 08:56:34 +0000</pubDate>
		<guid isPermaLink="false">http://www.udidahan.com/2008/07/30/scaling-long-running-web-services/#comment-31122</guid>
		<description>Jan,

Glad you liked it.

Security is a big topic. The question is what threat profile we&#039;re trying to protect against. 

One option is for the same saga that created the resource to protect it with an ACL.

The thing is that you need to understand that probably the only way for an external attacker to know the guid/uri of the resource is for them to go for a man-in-the-middle attack. You&#039;d need HTTPS to protect against that. Once you have that on the request, and you don&#039;t allow anyone to list the response resources, you&#039;re probably secure enough not to need HTTPS on the response.</description>
		<content:encoded><![CDATA[<p>Jan,</p>
<p>Glad you liked it.</p>
<p>Security is a big topic. The question is what threat profile we&#8217;re trying to protect against. </p>
<p>One option is for the same saga that created the resource to protect it with an ACL.</p>
<p>The thing is that you need to understand that probably the only way for an external attacker to know the guid/uri of the resource is for them to go for a man-in-the-middle attack. You&#8217;d need HTTPS to protect against that. Once you have that on the request, and you don&#8217;t allow anyone to list the response resources, you&#8217;re probably secure enough not to need HTTPS on the response.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Jan Van Ryswyck</title>
		<link>http://www.udidahan.com/2008/07/30/scaling-long-running-web-services/comment-page-1/#comment-31056</link>
		<dc:creator>Jan Van Ryswyck</dc:creator>
		<pubDate>Fri, 05 Sep 2008 18:36:18 +0000</pubDate>
		<guid isPermaLink="false">http://www.udidahan.com/2008/07/30/scaling-long-running-web-services/#comment-31056</guid>
		<description>Hi Udi,

I listened to your latest DNR episode and after reading this post I must say that this is a really awesome approach. Thx for sharing.

I have a small nitpicking question though: what about security of the response resources (supposing that they contain sensitive information, which is not unlikely). I know its not easy to determine a GUID on the right time (before deleting the resource), but those kid hackers of today can do just about anything. Any thoughts about this topic?

Again, great stuff.</description>
		<content:encoded><![CDATA[<p>Hi Udi,</p>
<p>I listened to your latest DNR episode and after reading this post I must say that this is a really awesome approach. Thx for sharing.</p>
<p>I have a small nitpicking question though: what about security of the response resources (supposing that they contain sensitive information, which is not unlikely). I know its not easy to determine a GUID on the right time (before deleting the resource), but those kid hackers of today can do just about anything. Any thoughts about this topic?</p>
<p>Again, great stuff.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: udidahan</title>
		<link>http://www.udidahan.com/2008/07/30/scaling-long-running-web-services/comment-page-1/#comment-30812</link>
		<dc:creator>udidahan</dc:creator>
		<pubDate>Thu, 04 Sep 2008 04:00:14 +0000</pubDate>
		<guid isPermaLink="false">http://www.udidahan.com/2008/07/30/scaling-long-running-web-services/#comment-30812</guid>
		<description>Colin,

I do use REST where it makes sense - but primarily as a kind of message serialization mechanism.</description>
		<content:encoded><![CDATA[<p>Colin,</p>
<p>I do use REST where it makes sense &#8211; but primarily as a kind of message serialization mechanism.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Colin Jack</title>
		<link>http://www.udidahan.com/2008/07/30/scaling-long-running-web-services/comment-page-1/#comment-30776</link>
		<dc:creator>Colin Jack</dc:creator>
		<pubDate>Wed, 03 Sep 2008 21:49:50 +0000</pubDate>
		<guid isPermaLink="false">http://www.udidahan.com/2008/07/30/scaling-long-running-web-services/#comment-30776</guid>
		<description>@Udi
Yeah it definitely makes sense but I have one more question, do you use REST in your architectures and if so how do you find it works alongside SOA and DDD?</description>
		<content:encoded><![CDATA[<p>@Udi<br />
Yeah it definitely makes sense but I have one more question, do you use REST in your architectures and if so how do you find it works alongside SOA and DDD?</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: udidahan</title>
		<link>http://www.udidahan.com/2008/07/30/scaling-long-running-web-services/comment-page-1/#comment-29549</link>
		<dc:creator>udidahan</dc:creator>
		<pubDate>Wed, 20 Aug 2008 05:48:40 +0000</pubDate>
		<guid isPermaLink="false">http://www.udidahan.com/2008/07/30/scaling-long-running-web-services/#comment-29549</guid>
		<description>Colin,

What he&#039;s describing is using REST/HTTP to do messaging and pub/sub. I think that&#039;s great. However, from a &quot;how do I get my head thinking the right way&quot; perspective, I find that plain messaging and pub/sub is simpler to grasp. Once you understand the applicative protocol you want to set up, mapping that to resources and GETs and POSTs isn&#039;t very difficult.

Does that make sense?</description>
		<content:encoded><![CDATA[<p>Colin,</p>
<p>What he&#8217;s describing is using REST/HTTP to do messaging and pub/sub. I think that&#8217;s great. However, from a &#8220;how do I get my head thinking the right way&#8221; perspective, I find that plain messaging and pub/sub is simpler to grasp. Once you understand the applicative protocol you want to set up, mapping that to resources and GETs and POSTs isn&#8217;t very difficult.</p>
<p>Does that make sense?</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Colin Jack</title>
		<link>http://www.udidahan.com/2008/07/30/scaling-long-running-web-services/comment-page-1/#comment-29443</link>
		<dc:creator>Colin Jack</dc:creator>
		<pubDate>Mon, 18 Aug 2008 15:33:02 +0000</pubDate>
		<guid isPermaLink="false">http://www.udidahan.com/2008/07/30/scaling-long-running-web-services/#comment-29443</guid>
		<description>@Udi
Good point on the threads, hadn&#039;t thought that through.

Also I found this page quite interesting (particularly the distributed observer pattern near the end):

http://duncan-cragg.org/blog/post/distributed-observer-pattern-rest-dialogues/</description>
		<content:encoded><![CDATA[<p>@Udi<br />
Good point on the threads, hadn&#8217;t thought that through.</p>
<p>Also I found this page quite interesting (particularly the distributed observer pattern near the end):</p>
<p><a href="http://duncan-cragg.org/blog/post/distributed-observer-pattern-rest-dialogues/" rel="nofollow">http://duncan-cragg.org/blog/post/distributed-observer-pattern-rest-dialogues/</a></p>
]]></content:encoded>
	</item>
	<item>
		<title>By: udidahan</title>
		<link>http://www.udidahan.com/2008/07/30/scaling-long-running-web-services/comment-page-1/#comment-29118</link>
		<dc:creator>udidahan</dc:creator>
		<pubDate>Wed, 13 Aug 2008 07:51:12 +0000</pubDate>
		<guid isPermaLink="false">http://www.udidahan.com/2008/07/30/scaling-long-running-web-services/#comment-29118</guid>
		<description>Colin,

I agree with the first commenter on that post - Rob.
IIS and ASP.NET are not designed to do comet in a scalable way.

There is the other problem of synchronous communication from server to client where server threads end up being blocked while waiting for the communication to succeed.

Hope that helps.</description>
		<content:encoded><![CDATA[<p>Colin,</p>
<p>I agree with the first commenter on that post &#8211; Rob.<br />
IIS and ASP.NET are not designed to do comet in a scalable way.</p>
<p>There is the other problem of synchronous communication from server to client where server threads end up being blocked while waiting for the communication to succeed.</p>
<p>Hope that helps.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Colin Jack</title>
		<link>http://www.udidahan.com/2008/07/30/scaling-long-running-web-services/comment-page-1/#comment-29098</link>
		<dc:creator>Colin Jack</dc:creator>
		<pubDate>Tue, 12 Aug 2008 20:47:00 +0000</pubDate>
		<guid isPermaLink="false">http://www.udidahan.com/2008/07/30/scaling-long-running-web-services/#comment-29098</guid>
		<description>Great stuff

I wondered if you&#039;d looked at the duplex WCF functionality that should help remove the need to do so much polling in Silverlight apps:

http://weblogs.asp.net/dwahlin/archive/2008/06/16/pushing-data-to-a-silverlight-client-with-wcf-duplex-service-part-i.aspx

It&#039;s also really interesting reading this article. I worked on an XML over HTTP project many years ago that used many of these patterns for long running async jobs and it&#039;s good to see you&#039;ve adopted the same techniques.</description>
		<content:encoded><![CDATA[<p>Great stuff</p>
<p>I wondered if you&#8217;d looked at the duplex WCF functionality that should help remove the need to do so much polling in Silverlight apps:</p>
<p><a href="http://weblogs.asp.net/dwahlin/archive/2008/06/16/pushing-data-to-a-silverlight-client-with-wcf-duplex-service-part-i.aspx" rel="nofollow">http://weblogs.asp.net/dwahlin/archive/2008/06/16/pushing-data-to-a-silverlight-client-with-wcf-duplex-service-part-i.aspx</a></p>
<p>It&#8217;s also really interesting reading this article. I worked on an XML over HTTP project many years ago that used many of these patterns for long running async jobs and it&#8217;s good to see you&#8217;ve adopted the same techniques.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: udidahan</title>
		<link>http://www.udidahan.com/2008/07/30/scaling-long-running-web-services/comment-page-1/#comment-28952</link>
		<dc:creator>udidahan</dc:creator>
		<pubDate>Sat, 09 Aug 2008 21:30:32 +0000</pubDate>
		<guid isPermaLink="false">http://www.udidahan.com/2008/07/30/scaling-long-running-web-services/#comment-28952</guid>
		<description>Dan,

Glad you like it. Let me know how it works out for you.

I use XSD to define the structure of the data returned. Sometimes additional documentation is needed anyway.

BTW, the X in XML stands for eXtensible (which you already knew), but I&#039;m just reiterating that to say that it is quite easy to add elements in future releases without breaking existing code.</description>
		<content:encoded><![CDATA[<p>Dan,</p>
<p>Glad you like it. Let me know how it works out for you.</p>
<p>I use XSD to define the structure of the data returned. Sometimes additional documentation is needed anyway.</p>
<p>BTW, the X in XML stands for eXtensible (which you already knew), but I&#8217;m just reiterating that to say that it is quite easy to add elements in future releases without breaking existing code.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Dan Finucane</title>
		<link>http://www.udidahan.com/2008/07/30/scaling-long-running-web-services/comment-page-1/#comment-28820</link>
		<dc:creator>Dan Finucane</dc:creator>
		<pubDate>Wed, 06 Aug 2008 15:18:12 +0000</pubDate>
		<guid isPermaLink="false">http://www.udidahan.com/2008/07/30/scaling-long-running-web-services/#comment-28820</guid>
		<description>I love this solution especially the REST piece.  I have a system where sometimes the web service operation will complete in a minute or two and other times it may run for four hours.  Your solution is a perfect fit.  I have one question though - since the operation results are retrieved via plain vanilla HTTP GET&#039;s how would you document/communicate the content of an operations result.  Currently I use data contracts to describe the XML schema for the data I return.  If I use the REST approach you outline would you continue to use the data contract to document the schema of the result or would you leave the result structure out of the WSDL and communicate the form through supplemental documentation?

In some cases I could see leaving the schema out of the contract because it makes it easier to add elements in future releases without breaking existing code.</description>
		<content:encoded><![CDATA[<p>I love this solution especially the REST piece.  I have a system where sometimes the web service operation will complete in a minute or two and other times it may run for four hours.  Your solution is a perfect fit.  I have one question though &#8211; since the operation results are retrieved via plain vanilla HTTP GET&#8217;s how would you document/communicate the content of an operations result.  Currently I use data contracts to describe the XML schema for the data I return.  If I use the REST approach you outline would you continue to use the data contract to document the schema of the result or would you leave the result structure out of the WSDL and communicate the form through supplemental documentation?</p>
<p>In some cases I could see leaving the schema out of the contract because it makes it easier to add elements in future releases without breaking existing code.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: udidahan</title>
		<link>http://www.udidahan.com/2008/07/30/scaling-long-running-web-services/comment-page-1/#comment-28624</link>
		<dc:creator>udidahan</dc:creator>
		<pubDate>Sat, 02 Aug 2008 09:07:58 +0000</pubDate>
		<guid isPermaLink="false">http://www.udidahan.com/2008/07/30/scaling-long-running-web-services/#comment-28624</guid>
		<description>Chiph,

You&#039;re absolutely right - which is why the process which actually writes the response to the disk is the beginning of a saga which may have its final (delete) phase triggered either by a read, a certain number of reads, and/or time.</description>
		<content:encoded><![CDATA[<p>Chiph,</p>
<p>You&#8217;re absolutely right &#8211; which is why the process which actually writes the response to the disk is the beginning of a saga which may have its final (delete) phase triggered either by a read, a certain number of reads, and/or time.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Long running web services - Sunny Nagi</title>
		<link>http://www.udidahan.com/2008/07/30/scaling-long-running-web-services/comment-page-1/#comment-28561</link>
		<dc:creator>Long running web services - Sunny Nagi</dc:creator>
		<pubDate>Fri, 01 Aug 2008 01:21:03 +0000</pubDate>
		<guid isPermaLink="false">http://www.udidahan.com/2008/07/30/scaling-long-running-web-services/#comment-28561</guid>
		<description>[...] Udi Dahan has just posted an excellent blog post about long running web services. [...]</description>
		<content:encoded><![CDATA[<p>[...] Udi Dahan has just posted an excellent blog post about long running web services. [...]</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Interesting Finds: 2008.07.30~2008.08.01 - gOODiDEA.NET</title>
		<link>http://www.udidahan.com/2008/07/30/scaling-long-running-web-services/comment-page-1/#comment-28556</link>
		<dc:creator>Interesting Finds: 2008.07.30~2008.08.01 - gOODiDEA.NET</dc:creator>
		<pubDate>Thu, 31 Jul 2008 23:55:59 +0000</pubDate>
		<guid isPermaLink="false">http://www.udidahan.com/2008/07/30/scaling-long-running-web-services/#comment-28556</guid>
		<description>[...] Scaling Long Running Web Services [...]</description>
		<content:encoded><![CDATA[<p>[...] Scaling Long Running Web Services [...]</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: chiph</title>
		<link>http://www.udidahan.com/2008/07/30/scaling-long-running-web-services/comment-page-1/#comment-28550</link>
		<dc:creator>chiph</dc:creator>
		<pubDate>Thu, 31 Jul 2008 20:02:22 +0000</pubDate>
		<guid isPermaLink="false">http://www.udidahan.com/2008/07/30/scaling-long-running-web-services/#comment-28550</guid>
		<description>Like Mike said -- you&#039;d have to have something clean up the static files after a while.  In my experience, NTFS starts to have problems when you&#039;ve got 10,000+ items in a directory, so depending on your transaction volume, you&#039;d need to run the cleanup possibly several times during the day.  As well as schedule your defragger to run.

The trick would be knowing when an item becomes eligible for cleanup.  I&#039;m not sure you can delete it immediately after a successful (non-404 response) status request from the user (assuming you can even detect that under IIS, I don&#039;t know).  You might want to give them a little more time in case they have system problems at their end.</description>
		<content:encoded><![CDATA[<p>Like Mike said &#8212; you&#8217;d have to have something clean up the static files after a while.  In my experience, NTFS starts to have problems when you&#8217;ve got 10,000+ items in a directory, so depending on your transaction volume, you&#8217;d need to run the cleanup possibly several times during the day.  As well as schedule your defragger to run.</p>
<p>The trick would be knowing when an item becomes eligible for cleanup.  I&#8217;m not sure you can delete it immediately after a successful (non-404 response) status request from the user (assuming you can even detect that under IIS, I don&#8217;t know).  You might want to give them a little more time in case they have system problems at their end.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Mike</title>
		<link>http://www.udidahan.com/2008/07/30/scaling-long-running-web-services/comment-page-1/#comment-28535</link>
		<dc:creator>Mike</dc:creator>
		<pubDate>Thu, 31 Jul 2008 11:57:27 +0000</pubDate>
		<guid isPermaLink="false">http://www.udidahan.com/2008/07/30/scaling-long-running-web-services/#comment-28535</guid>
		<description>What process cleans up all the static resources?</description>
		<content:encoded><![CDATA[<p>What process cleans up all the static resources?</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: udidahan</title>
		<link>http://www.udidahan.com/2008/07/30/scaling-long-running-web-services/comment-page-1/#comment-28497</link>
		<dc:creator>udidahan</dc:creator>
		<pubDate>Wed, 30 Jul 2008 14:27:27 +0000</pubDate>
		<guid isPermaLink="false">http://www.udidahan.com/2008/07/30/scaling-long-running-web-services/#comment-28497</guid>
		<description>Klaus,

I actually have another sample with nServiceBus that demonstrates that, but it only works for ASP.NET pages. If you want to call the web service directly from the browser, there is no async model set up.</description>
		<content:encoded><![CDATA[<p>Klaus,</p>
<p>I actually have another sample with nServiceBus that demonstrates that, but it only works for ASP.NET pages. If you want to call the web service directly from the browser, there is no async model set up.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Klaus Hebsgaard</title>
		<link>http://www.udidahan.com/2008/07/30/scaling-long-running-web-services/comment-page-1/#comment-28495</link>
		<dc:creator>Klaus Hebsgaard</dc:creator>
		<pubDate>Wed, 30 Jul 2008 13:57:28 +0000</pubDate>
		<guid isPermaLink="false">http://www.udidahan.com/2008/07/30/scaling-long-running-web-services/#comment-28495</guid>
		<description>Could this not be handled using Asynchronous Pages in ASP.NET (see http://msdn.microsoft.com/en-us/magazine/cc163725.aspx ), as I understand it this technique works with WCF services as well....</description>
		<content:encoded><![CDATA[<p>Could this not be handled using Asynchronous Pages in ASP.NET (see <a href="http://msdn.microsoft.com/en-us/magazine/cc163725.aspx" rel="nofollow">http://msdn.microsoft.com/en-us/magazine/cc163725.aspx</a> ), as I understand it this technique works with WCF services as well&#8230;.</p>
]]></content:encoded>
	</item>
</channel>
</rss>
