<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	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/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	xmlns:georss="http://www.georss.org/georss" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" xmlns:media="http://search.yahoo.com/mrss/"
	>

<channel>
	<title>Alex M's Blog</title>
	<atom:link href="http://amaitland.wordpress.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://amaitland.wordpress.com</link>
	<description>Programming and Ramblings</description>
	<lastBuildDate>Sun, 30 Nov 2008 11:17:12 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.com/</generator>
<cloud domain='amaitland.wordpress.com' port='80' path='/?rsscloud=notify' registerProcedure='' protocol='http-post' />
<image>
		<url>http://s2.wp.com/i/buttonw-com.png</url>
		<title>Alex M's Blog</title>
		<link>http://amaitland.wordpress.com</link>
	</image>
	<atom:link rel="search" type="application/opensearchdescription+xml" href="http://amaitland.wordpress.com/osd.xml" title="Alex M&#039;s Blog" />
	<atom:link rel='hub' href='http://amaitland.wordpress.com/?pushpress=hub'/>
		<item>
		<title>.Net WebService &#8211; System.Net.WebException The operation has timed out</title>
		<link>http://amaitland.wordpress.com/2008/11/22/webserviceoperation-timedout/</link>
		<comments>http://amaitland.wordpress.com/2008/11/22/webserviceoperation-timedout/#comments</comments>
		<pubDate>Sat, 22 Nov 2008 18:08:48 +0000</pubDate>
		<dc:creator>amaitland</dc:creator>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[.net]]></category>
		<category><![CDATA[c#]]></category>
		<category><![CDATA[webservice exception]]></category>
		<category><![CDATA[webservice redundancy]]></category>
		<category><![CDATA[webservice retry]]></category>
		<category><![CDATA[webservices]]></category>

		<guid isPermaLink="false"></guid>
		<description><![CDATA[On occasion, our webservices stop responding without warning (They just hang it it takes a while for the App Pool to be recycled). When I went searching on the subject I found this article by Michael Freidgeim. His solution is to retry the webservice call under certain conditions. I have come up with a slight [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=amaitland.wordpress.com&amp;blog=5611467&amp;post=1&amp;subd=amaitland&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>On occasion, our webservices stop responding without warning (They just hang it it takes a while for the App Pool to be recycled). When I went searching on the subject I found <a title=" &lt;&lt; Dynamic Web Services reference URL in Visual Studio 2005 | Home | Multiple SCOPE folders in WEBDAV folder queries. &gt;&gt; Retry to call Web Service in case of &quot;The remote name could not be resolved&quot; error." href="http://geekswithblogs.net/mnf/archive/2006/09/07/90481.aspx" target="_blank">this</a> article by Michael Freidgeim. His solution is to retry the webservice call under certain conditions.</p>
<p>I have come up with a slight variation on this solution that rather than call the same webservice in the event of an Exception, calls another instance of the webservice (requires multiple instances of the same webservice to be hosted somewhere, can even be on the same machine in different App Pool).</p>
<p><code><span style="color:#0000FF;">public</span>&nbsp;<span style="color:#0000FF;">static</span>&nbsp;<span style="color:#0000FF;">class</span>&nbsp;<span style="color:#2B91AF;">WSHelper<span><br />
</span>{<span><br />
	&nbsp;&nbsp;<span style="color:#0000FF;">public</span>&nbsp;<span style="color:#0000FF;">delegate</span>&nbsp;<span style="color:#0000FF;">void</span>&nbsp;CallWebServiceDelegateWithUrl(<span style="color:#0000FF;">string</span>&nbsp;url);<span><br />
<span><br />
&nbsp;&nbsp;<span style="color:#0000FF;">private</span>&nbsp;<span style="color:#0000FF;">static</span>&nbsp;<span style="color:#0000FF;">readonly</span>&nbsp;ILog&nbsp;_log&nbsp;=&nbsp;LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);<span><br />
<span><br />
&nbsp;&nbsp;<span style="color:#0000FF;">public</span>&nbsp;<span style="color:#0000FF;">static</span>&nbsp;<span style="color:#0000FF;">void</span>&nbsp;RetryWebServiceCall(<span style="color:#0000FF;">string</span>[]&nbsp;urls,&nbsp;CallWebServiceDelegateWithUrl&nbsp;wsDelegate)<span><br />
&nbsp;&nbsp;{<span><br />
&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:#008000;">//&nbsp;Retry&nbsp;webservice&nbsp;call&nbsp;when&nbsp;special&nbsp;conditions&nbsp;are&nbsp;met&nbsp;(see&nbsp;below)<span><br />
</span><br />
&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:#0000FF;">for</span>&nbsp;(<span style="color:#0000FF;">int</span>&nbsp;i&nbsp;=&nbsp;0;&nbsp;i&nbsp;&lt;&nbsp;urls.Length;&nbsp;i++)<span><br />
&nbsp;&nbsp;&nbsp;&nbsp;{<span><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:#0000FF;">try<span><br />
</span><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<span><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:#008000;">//Execute&nbsp;the&nbsp;delegate<span><br />
</span><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:black;">wsDelegate(urls[i]);</span><span><br />
<span><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:#0000FF;">break</span>;<span><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<span><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:#0000FF;">catch</span>&nbsp;(<span style="color:#2B91AF;">Exception</span>&nbsp;ex)<span><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<span><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:#0000FF;">if</span>&nbsp;(ex&nbsp;<span style="color:#0000FF;">is</span>&nbsp;WebException)<span><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<span><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:#0000FF;">if</span>&nbsp;(i&nbsp;&lt;&nbsp;urls.Length&nbsp;-&nbsp;1)<span><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<span><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:black;">_log.Debug(”Attempt&nbsp;”&nbsp;+&nbsp;(i&nbsp;+&nbsp;1)&nbsp;+&nbsp;”&nbsp;failed.&nbsp;-&nbsp;”&nbsp;+&nbsp;urls[i],&nbsp;ex);</span><span><br />
<span><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:#0000FF;">continue</span>;&nbsp;<span style="color:#008000;">//try&nbsp;the&nbsp;next&nbsp;URL&nbsp;in&nbsp;the&nbsp;list<span><br />
</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<span><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:black;">_log.Error(ex);</span><span><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<span><br />
<span><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:#0000FF;">throw</span>;<span><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<span><br />
&nbsp;&nbsp;&nbsp;&nbsp;}<span><br />
&nbsp;&nbsp;}<span><br />
}</code></p>
<p>Sample usage</p>
<p><code>WSHelper.RetryWebServiceCall(urlList,&nbsp;delegate(string&nbsp;url)<span><br />
{<span><br />
&nbsp;&nbsp;using(Service&nbsp;service&nbsp;=&nbsp;new&nbsp;Service())<span><br />
&nbsp;&nbsp;{<span><br />
&nbsp;&nbsp;&nbsp;&nbsp;service.Url&nbsp;=&nbsp;url;<span><br />
&nbsp;&nbsp;&nbsp;&nbsp;response&nbsp;=&nbsp;service.Execure(request);<span><br />
&nbsp;&nbsp;}<span><br />
});</code></p>
<p>Just a few notes</p>
<ul>
<li>All exceptions are caught, so they can be logged, only the type of WebException is dealt with</li>
<li>urlList is a list of all available webservice URL&#8217;s</li>
<li>Using Log4Net</li>
</ul>
<p>My overall plan is to migrate our webservices to WCF, so hopefully that will resolve some of the issues we&#8217;re having (The webservice was developed by an external company, and the quality is not as I&#8217;d like).</p>
<p>Hope this helps some people out, if you have any comments/suggestions or alternate approaches, I&#8217;d love to hear them.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/amaitland.wordpress.com/1/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/amaitland.wordpress.com/1/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/amaitland.wordpress.com/1/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/amaitland.wordpress.com/1/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/amaitland.wordpress.com/1/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/amaitland.wordpress.com/1/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/amaitland.wordpress.com/1/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/amaitland.wordpress.com/1/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/amaitland.wordpress.com/1/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/amaitland.wordpress.com/1/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/amaitland.wordpress.com/1/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/amaitland.wordpress.com/1/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/amaitland.wordpress.com/1/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/amaitland.wordpress.com/1/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=amaitland.wordpress.com&amp;blog=5611467&amp;post=1&amp;subd=amaitland&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://amaitland.wordpress.com/2008/11/22/webserviceoperation-timedout/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/0d923cc10be819d76c39c926420a28b2?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">amaitland</media:title>
		</media:content>
	</item>
	</channel>
</rss>
