<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://blogs.msdn.com/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>Srinath Vasireddy : Smart Client</title><link>http://blogs.msdn.com/srinathv/archive/tags/Smart+Client/default.aspx</link><description>Tags: Smart Client</description><dc:language>en-US</dc:language><generator>CommunityServer 2.1 SP1 (Build: 61025.2)</generator><item><title>Seattle Code Camp </title><link>http://blogs.msdn.com/srinathv/archive/2005/10/24/484051.aspx</link><pubDate>Mon, 24 Oct 2005 07:36:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:484051</guid><dc:creator>srinathv</dc:creator><slash:comments>2</slash:comments><comments>http://blogs.msdn.com/srinathv/comments/484051.aspx</comments><wfw:commentRss>http://blogs.msdn.com/srinathv/commentrss.aspx?PostID=484051</wfw:commentRss><description>&lt;P&gt;&lt;FONT face=Tahoma color=#a52a2a size=2&gt;Today at &lt;A href="http://pacwest.ms/codecamp/sea/1/"&gt;Seattle Code Camp&lt;/A&gt;&amp;nbsp;day 2 -- &lt;A href="http://www.peterprovost.org/"&gt;Peter&lt;/A&gt; &amp;amp; &lt;A href="http://www.agileprogrammer.com/dotnetguy/"&gt;Brad&lt;/A&gt; gave the attendees a taste of Dependency Injection via ObjectBuilder (which is part our &lt;A href="http://practices.gotdotnet.com/projects/cab"&gt;CAB &lt;/A&gt;deliverable), TDD &amp;amp; Pair Programming, Model-View-Presenter, Monad and CAB.&amp;nbsp; The slides for the presentation will be posted at Peter's &lt;A href="http://www.peterprovost.org/"&gt;site&lt;/A&gt;.&amp;nbsp;&amp;nbsp;Both Peter &amp;amp; Brad fielded a lot of questions on all of the above topics. &lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT color=#a52a2a size=2&gt;&lt;FONT face=Tahoma&gt;One of the attendees asked about our the &lt;A href="http://msdn.microsoft.com/library/en-us/dnpag/html/offline.asp"&gt;Offline App Block&lt;/A&gt; &amp;amp; how would he replace the out of the box ConnectionDetectionStrategy (because the default implementation relies on wininet api's used by Internet Explorer).&amp;nbsp; I couldn't find the original article &amp;amp; code that came with&amp;nbsp;below implementation (I think this is from &lt;/FONT&gt;&lt;a href="http://blogs.msdn.com/dphill"&gt;&lt;FONT face=Tahoma&gt;David&lt;/FONT&gt;&lt;/A&gt;&lt;FONT face=Tahoma&gt;), it illustrates how to ping a web service to check for connectivity.&amp;nbsp; &lt;BR&gt;&lt;BR&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; mso-no-proof: yes; mso-fareast-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA"&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: maroon; FONT-FAMILY: Tahoma"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt;&lt;FONT color=#0000ff size=1&gt;using System;&lt;BR&gt;using System.Runtime.InteropServices;&lt;BR&gt;using System.Xml.XPath;&lt;BR&gt;using System.IO;&lt;BR&gt;using System.Configuration;&lt;BR&gt;using Microsoft.ApplicationBlocks.Common;&lt;BR&gt;using Microsoft.ApplicationBlocks.SmartClient.Offline;&lt;BR&gt;using System.Web;&lt;BR&gt;using System.Net;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;DIV class=Section1&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt;&lt;FONT color=#0000ff size=1&gt;namespace Microsoft.Samples.OfflineSampleClient&lt;BR&gt;{&lt;BR&gt;&amp;nbsp;/// &amp;lt;summary&amp;gt;&lt;BR&gt;&amp;nbsp;/// This is a simple implementation of a ConnectionDetectionStrategy.&lt;BR&gt;&amp;nbsp;/// It periodically pings the web server to see if is available.&lt;BR&gt;&amp;nbsp;/// &amp;lt;/summary&amp;gt;&lt;BR&gt;&amp;nbsp;public class PingWebServerStrategy : IConnectionDetectionStrategy, IProvider&lt;BR&gt;&amp;nbsp;{&lt;BR&gt;&amp;nbsp;&amp;nbsp;private int pollInterval;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt;&lt;FONT color=#0000ff size=1&gt;&amp;nbsp;&amp;nbsp;public const int MinimumPollingIntervalInSeconds = 1;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt;&lt;FONT color=#0000ff size=1&gt;&amp;nbsp;&amp;nbsp;public PingWebServerStrategy()&lt;BR&gt;&amp;nbsp;&amp;nbsp;{&lt;BR&gt;&amp;nbsp;&amp;nbsp;}&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt;&lt;FONT color=#0000ff size=1&gt;&amp;nbsp;&amp;nbsp;/// &amp;lt;summary&amp;gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;/// Getter property to retrieve the polling interval in seconds&lt;BR&gt;&amp;nbsp;&amp;nbsp;/// &amp;lt;/summary&amp;gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;/// &amp;lt;value&amp;gt;Polling interaval in seconds&amp;lt;/value&amp;gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;public int PollInterval { get { return pollInterval; }}&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt;&lt;FONT color=#0000ff size=1&gt;&amp;nbsp;&amp;nbsp;/// &amp;lt;summary&amp;gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;/// Query method to cause provider to actively detect the connection state&lt;BR&gt;&amp;nbsp;&amp;nbsp;/// &amp;lt;/summary&amp;gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;/// &amp;lt;returns&amp;gt;True if provider believes we are connected&amp;lt;/returns&amp;gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;public bool IsConnected()&lt;BR&gt;&amp;nbsp;&amp;nbsp;{&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;bool connected = true;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt;&lt;FONT color=#0000ff size=1&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;try&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;HttpWebRequest _webRequest2 = (HttpWebRequest)WebRequest.Create( "&lt;/FONT&gt;&lt;A href="http://localhost/OfflineSampleWebService/OfflineSampleWebService.asmx"&gt;&lt;FONT color=#0000ff size=1&gt;http://localhost/OfflineSampleWebService/OfflineSampleWebService.asmx&lt;/FONT&gt;&lt;/A&gt;&lt;FONT color=#0000ff size=1&gt;" );&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;_webRequest2.Credentials = System.Net.CredentialCache.DefaultCredentials;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;using ( HttpWebResponse myHttpWebResponse=(HttpWebResponse)_webRequest2.GetResponse() )&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if ( !_webRequest2.HaveResponse )&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;connected = false;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;catch( Exception ex )&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;connected = false;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt;&lt;FONT color=#0000ff size=1&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;return connected;&lt;BR&gt;&amp;nbsp;&amp;nbsp;}&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt;&lt;FONT color=#0000ff size=1&gt;&amp;nbsp;&amp;nbsp;/// &amp;lt;summary&amp;gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;/// IProvider.Initialize method implementation. Retrieves configuration information from app.config file&lt;BR&gt;&amp;nbsp;&amp;nbsp;/// &amp;lt;/summary&amp;gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;/// &amp;lt;param name="configurationNode"&amp;gt;XmlNode to parse for configuration information&amp;lt;/param&amp;gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;public void Initialize(XPathNavigator configurationNode)&lt;BR&gt;&amp;nbsp;&amp;nbsp;{&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;XPathNodeIterator iter = configurationNode.Select("pollingInterval");&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;iter.MoveNext();&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt;&lt;FONT color=#0000ff size=1&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;pollInterval = GetCurrentPollingInterval(iter.Current.Value);&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;if(pollInterval &amp;lt; MinimumPollingIntervalInSeconds)&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;throw new ConfigurationException(ProvidersResourceTable.GetString(ProvidersResourceTable.ConnectionManagerPollingIntervalMessage));&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;BR&gt;&amp;nbsp;&amp;nbsp;}&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt;&lt;FONT color=#0000ff size=1&gt;&amp;nbsp;&amp;nbsp;private int GetCurrentPollingInterval( string pollingIntervalString )&lt;BR&gt;&amp;nbsp;&amp;nbsp;{&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;try&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;return Convert.ToInt32(pollingIntervalString);&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;catch( FormatException e )&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;throw new ConfigurationException( ProvidersResourceTable.GetString( ProvidersResourceTable.PollingIntervalShouldBeNumeric ), e );&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;BR&gt;&amp;nbsp;&amp;nbsp;}&lt;BR&gt;&amp;nbsp;}&lt;BR&gt;}&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;/DIV&gt;&lt;/SPAN&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=484051" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/srinathv/archive/tags/Smart+Client/default.aspx">Smart Client</category></item></channel></rss>