<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" 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:copyright="http://blogs.law.harvard.edu/tech/rss" xmlns:image="http://purl.org/rss/1.0/modules/image/">
    <channel>
        <title>Coding with C#</title>
        <link>http://geekswithblogs.net/aguest/category/471.aspx</link>
        <description>Coding practices and pitfalls using C#</description>
        <language>en-US</language>
        <copyright>Allen Guest</copyright>
        <managingEditor>uptaphunk69@hotmail.com</managingEditor>
        <generator>Subtext Version 0.0.0.0</generator>
        <item>
            <title>More AJAX</title>
            <link>http://geekswithblogs.net/aguest/archive/2005/12/22/63891.aspx</link>
            <description>&lt;P&gt;Looks like I am staying on my contract for another 6 months. While I am in the midst of finishing up my real projects, I am tasked with putting together an integration application with &lt;A href="http://maps.google.com"&gt;http://maps.google.com&lt;/A&gt;&amp;nbsp;and City of Seattle address data. What is quite funny is that even though I am utilizing C# on the backend to perform my queries, the application is 80% javascript. Who would have thought we were be reverting back to the client so heavily?&lt;/P&gt;
&lt;P&gt;Personally, I find .NET's mechanism of the full page postback to be quite archaic and it has always bothered me. Leveraging AJAX, my .NET server controls are nothing more than javascript renderers that communicate with the server for their data needs. I have to say that AJAX is a cleaner approach to client/server communication that the in the old days when we had to perform cross-frame postbacks to achieve similar effects.&lt;/P&gt;
&lt;P&gt;Update: Look to &lt;A href="http://web1.seattle.gov/dpd/GoogleDPD"&gt;http://web1.seattle.gov/dpd/GoogleDPD&lt;/A&gt; in the next few days for an Alpha version of some of the City of Seattle's permit and activity data linked with Google.&lt;/P&gt;&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=63891"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=63891" border="0"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;iframe src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;PageID=31016&amp;amp;SiteID=1" width=1 height=1 Marginwidth=0 Marginheight=0 Hspace=0 Vspace=0 Frameborder=0 Scrolling=No&gt;
&lt;script language='javascript1.1' src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Browser=NETSCAPE4&amp;amp;NoCache=True&amp;PageID=31016&amp;amp;SiteID=1"&gt;&lt;/script&gt;
&lt;noscript&gt;&lt;a href="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Click&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" target="_blank"&gt;
&lt;img src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" width="1" height="1" border="0"  alt=""&gt;&lt;/a&gt;
&lt;/noscript&gt;
&lt;/iframe&gt;
&lt;img src="http://geekswithblogs.net/aguest/aggbug/63891.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Allen Guest</dc:creator>
            <guid>http://geekswithblogs.net/aguest/archive/2005/12/22/63891.aspx</guid>
            <pubDate>Thu, 22 Dec 2005 12:20:00 GMT</pubDate>
            <wfw:comment>http://geekswithblogs.net/aguest/comments/63891.aspx</wfw:comment>
            <comments>http://geekswithblogs.net/aguest/archive/2005/12/22/63891.aspx#feedback</comments>
            <wfw:commentRss>http://geekswithblogs.net/aguest/comments/commentRss/63891.aspx</wfw:commentRss>
            <trackback:ping>http://geekswithblogs.net/aguest/services/trackbacks/63891.aspx</trackback:ping>
        </item>
        <item>
            <title>AJAX</title>
            <link>http://geekswithblogs.net/aguest/archive/2005/12/02/61909.aspx</link>
            <description>&lt;P&gt;&lt;FONT face=Arial&gt;I recently had the opportunity to dabble in a concept project utilizing AJAX and have been quite impressed with the implementation of a free library found at &lt;/FONT&gt;&lt;A href="http://www.schwarz-interactive.de/"&gt;&lt;FONT face=Arial&gt;http://www.schwarz-interactive.de/&lt;/FONT&gt;&lt;/A&gt;&lt;FONT face=Arial&gt;&amp;nbsp;for 1.1 or &lt;/FONT&gt;&lt;A href="http://dotnet2.schwarz-interactive.de/"&gt;&lt;FONT face=Arial&gt;http://dotnet2.schwarz-interactive.de/&lt;/FONT&gt;&lt;/A&gt;&lt;FONT face=Arial&gt;&amp;nbsp;for 2.0.&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Arial&gt;Implementation is as easy as setting a reference to the library, adding an entry to your web.config and decorating the exposed methods. The decorated methods are exposed to your client side javascript. When those methods are called from Javascript, an HTTP get is performed and the parameters are serialized / deserialized and the original marked up method is invoked. Quite elegant.&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Arial&gt;In addition the library supports direct support for the majority of the .NET base classes, including the DataSet - as well as exposing an IAJAXObjectConverter interface where you can supply support for serialization of your own custom classes. This gives the ability of the client code to directly access the server side object as a client side object. &lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Arial&gt;&lt;/FONT&gt;&amp;nbsp;&lt;/P&gt;&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=61909"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=61909" border="0"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;iframe src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;PageID=31016&amp;amp;SiteID=1" width=1 height=1 Marginwidth=0 Marginheight=0 Hspace=0 Vspace=0 Frameborder=0 Scrolling=No&gt;
&lt;script language='javascript1.1' src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Browser=NETSCAPE4&amp;amp;NoCache=True&amp;PageID=31016&amp;amp;SiteID=1"&gt;&lt;/script&gt;
&lt;noscript&gt;&lt;a href="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Click&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" target="_blank"&gt;
&lt;img src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" width="1" height="1" border="0"  alt=""&gt;&lt;/a&gt;
&lt;/noscript&gt;
&lt;/iframe&gt;
&lt;img src="http://geekswithblogs.net/aguest/aggbug/61909.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Allen Guest</dc:creator>
            <guid>http://geekswithblogs.net/aguest/archive/2005/12/02/61909.aspx</guid>
            <pubDate>Fri, 02 Dec 2005 11:54:00 GMT</pubDate>
            <wfw:comment>http://geekswithblogs.net/aguest/comments/61909.aspx</wfw:comment>
            <comments>http://geekswithblogs.net/aguest/archive/2005/12/02/61909.aspx#feedback</comments>
            <wfw:commentRss>http://geekswithblogs.net/aguest/comments/commentRss/61909.aspx</wfw:commentRss>
            <trackback:ping>http://geekswithblogs.net/aguest/services/trackbacks/61909.aspx</trackback:ping>
        </item>
        <item>
            <title>HttpHandlers : A Practical Example</title>
            <link>http://geekswithblogs.net/aguest/archive/2005/11/01/58797.aspx</link>
            <description>&lt;P&gt;I recently had the need to tunnel a protected resource through a firewall and found a great practical use for HttpHandlers.&lt;/P&gt;
&lt;P&gt;Click &lt;A href="http://geekswithblogs.net/aguest/articles/58795.aspx"&gt;http://geekswithblogs.net/aguest/articles/58795.aspx&lt;/A&gt;&amp;nbsp;to read walkthrough and complete code.&lt;/P&gt;&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=58797"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=58797" border="0"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;iframe src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;PageID=31016&amp;amp;SiteID=1" width=1 height=1 Marginwidth=0 Marginheight=0 Hspace=0 Vspace=0 Frameborder=0 Scrolling=No&gt;
&lt;script language='javascript1.1' src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Browser=NETSCAPE4&amp;amp;NoCache=True&amp;PageID=31016&amp;amp;SiteID=1"&gt;&lt;/script&gt;
&lt;noscript&gt;&lt;a href="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Click&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" target="_blank"&gt;
&lt;img src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" width="1" height="1" border="0"  alt=""&gt;&lt;/a&gt;
&lt;/noscript&gt;
&lt;/iframe&gt;
&lt;img src="http://geekswithblogs.net/aguest/aggbug/58797.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Allen Guest</dc:creator>
            <guid>http://geekswithblogs.net/aguest/archive/2005/11/01/58797.aspx</guid>
            <pubDate>Tue, 01 Nov 2005 10:50:00 GMT</pubDate>
            <wfw:comment>http://geekswithblogs.net/aguest/comments/58797.aspx</wfw:comment>
            <comments>http://geekswithblogs.net/aguest/archive/2005/11/01/58797.aspx#feedback</comments>
            <wfw:commentRss>http://geekswithblogs.net/aguest/comments/commentRss/58797.aspx</wfw:commentRss>
            <trackback:ping>http://geekswithblogs.net/aguest/services/trackbacks/58797.aspx</trackback:ping>
        </item>
        <item>
            <title>The interesting DropDownList ASP.NET control behavior</title>
            <link>http://geekswithblogs.net/aguest/archive/2005/09/26/55077.aspx</link>
            <description>&lt;P&gt;So if you've decided to use syntax such as this&lt;/P&gt;
&lt;BLOCKQUOTE dir=ltr style="MARGIN-RIGHT: 0px"&gt;
&lt;P&gt;&lt;FONT face="Courier New" size=2&gt;myDropDownListBox.Items[0].Selected = true;&lt;/FONT&gt;&lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;P&gt;or&lt;/P&gt;
&lt;BLOCKQUOTE dir=ltr style="MARGIN-RIGHT: 0px"&gt;
&lt;P&gt;&lt;FONT face="Courier New" size=2&gt;ListItem foo = myDropDownListBox.Items.FindByValue(&amp;#8221;foo&amp;#8221;);&lt;BR&gt;foo.Selected = true;&lt;/FONT&gt;&lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;P&gt;you will get the 'A DropDownList cannot have multiple items selected' error.&lt;/P&gt;
&lt;P&gt;Seems to me that if the code sets the Selected attribute on an item in a list which by definition can only have one item selected, that the ListItem instance would set the SelectedIndex automatically for me. Seems like a no-brainer. I guess Microsoft found some sort of use for this error being thrown from a DropDownList control - just don't ask me what that could be.&lt;/P&gt;
&lt;P&gt;I guess I'd rather see that the DropDownList have DropDownList items if the Selected property was pretty much useless and will only cause errors if used in a DropDownList.&lt;/P&gt;&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=55077"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=55077" border="0"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;iframe src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;PageID=31016&amp;amp;SiteID=1" width=1 height=1 Marginwidth=0 Marginheight=0 Hspace=0 Vspace=0 Frameborder=0 Scrolling=No&gt;
&lt;script language='javascript1.1' src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Browser=NETSCAPE4&amp;amp;NoCache=True&amp;PageID=31016&amp;amp;SiteID=1"&gt;&lt;/script&gt;
&lt;noscript&gt;&lt;a href="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Click&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" target="_blank"&gt;
&lt;img src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" width="1" height="1" border="0"  alt=""&gt;&lt;/a&gt;
&lt;/noscript&gt;
&lt;/iframe&gt;
&lt;img src="http://geekswithblogs.net/aguest/aggbug/55077.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Allen Guest</dc:creator>
            <guid>http://geekswithblogs.net/aguest/archive/2005/09/26/55077.aspx</guid>
            <pubDate>Mon, 26 Sep 2005 18:00:00 GMT</pubDate>
            <wfw:comment>http://geekswithblogs.net/aguest/comments/55077.aspx</wfw:comment>
            <comments>http://geekswithblogs.net/aguest/archive/2005/09/26/55077.aspx#feedback</comments>
            <slash:comments>28</slash:comments>
            <wfw:commentRss>http://geekswithblogs.net/aguest/comments/commentRss/55077.aspx</wfw:commentRss>
            <trackback:ping>http://geekswithblogs.net/aguest/services/trackbacks/55077.aspx</trackback:ping>
        </item>
        <item>
            <title>Time for my yearly blog post</title>
            <link>http://geekswithblogs.net/aguest/archive/2005/09/22/54684.aspx</link>
            <description>&lt;P&gt;Well its been a great year. I'm thinking of moving on from my current contract - been 4 years slogging on at the same area. Longest contract I've ever had - heck, longest job I've ever had.&lt;/P&gt;
&lt;P&gt;Well, on to more interesting things -&amp;nbsp;like code. We have developed a unified Framework here where I am contracting at to centralize (aka reuse) more commonly used areas of functionality, mostly data access. All data access has been abstracted into static method calls such as (&lt;EM&gt;note class names have been changed&lt;/EM&gt;):&lt;/P&gt;
&lt;BLOCKQUOTE dir=ltr style="MARGIN-RIGHT: 0px"&gt;
&lt;P&gt;&lt;FONT face="Courier New" size=2&gt;DataSet myData = Framework.Data.Enterprise.EmployeeGateway.GetAllEmployees();&lt;/FONT&gt;&lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;P dir=ltr style="MARGIN-RIGHT: 0px"&gt;or, if a Business Object wrapper&amp;nbsp;was available, can be:&lt;/P&gt;
&lt;BLOCKQUOTE dir=ltr style="MARGIN-RIGHT: 0px"&gt;
&lt;P&gt;&lt;FONT face="Courier New" size=2&gt;EmployeeCollection&amp;nbsp;myEmployeeCollection = Framework.Data.Enterprise.BusinessObject.EmployeeGateway.GetAllEmployees();&lt;/FONT&gt;&lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;P dir=ltr style="MARGIN-RIGHT: 0px"&gt;An application that wants employee data simply calls one of the methods above. Simple, huh? Now, we wanted to deploy the application behind a firewall. We no longer had direct access to the database and all data requests had to know be funneled through web services. But who wanted to recode 398 stored procedures? Using a bit of reflection, I was able to potentially open up all of the static method calls so that an application running outside the firewall was able to make the same database call without knowing it was actually been funnelled through one (or more!) web services for its data. Code tidbit below:&lt;/P&gt;
&lt;BLOCKQUOTE dir=ltr style="MARGIN-RIGHT: 0px"&gt;
&lt;P dir=ltr style="MARGIN-RIGHT: 0px"&gt;&lt;FONT face="Courier New" size=2&gt;public class EmployeeGateway&lt;BR&gt;{&lt;BR&gt;&amp;nbsp; private EmployeeGateway() { }&lt;BR&gt;&amp;nbsp; public static DataSet GetAllEmployees()&lt;BR&gt;&amp;nbsp; {&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; return ExecDataSetQuery(&amp;#8220;GET_ALL_EMPLOYEES&amp;#8220;, null);&lt;BR&gt;&lt;/FONT&gt;&lt;FONT face="Courier New" size=2&gt;&amp;nbsp; }&lt;BR&gt;&amp;nbsp; private static DataSet ExecDataSetQuery(string sProc, SqlParameter[] parms)&lt;BR&gt;&amp;nbsp; {&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Connection factory returns either a SqlConnection or a WebService instance&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;// based on a Framework configuration file.&amp;nbsp;Connection information for a given&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; // data source was either an encrypted connection string or an encrypted web&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; // service endpoint.&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; object connection = ConnectionFactory.CreateConnection(DataSourceEnum.Employee);&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; DataSet ds = null;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (connection.GetType().Equals(typeof(SqlConnection))&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;using (SqlConnection sqlConnection = connection as SqlConnection)&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;&amp;nbsp; // standard SqlDataAdapter / Fill code here&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/FONT&gt;&lt;FONT face="Courier New" size=2&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; else if (connection.GetType().Equals(typeof(Framework.Web.Services.Enterprise.EmployeeGateway)))&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; using (Framework.Web.Services.Enterprise.EmployeeGateway webServiceConnection = connection as Framework.Web.Services.Enterprise.EmployeeGateway)&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;&amp;nbsp; try&lt;BR&gt;&amp;nbsp;&amp;nbsp;&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;&amp;nbsp;&amp;nbsp;&amp;nbsp; MethodInfo method = webServiceConnection.GetType().GetMethod(&lt;STRONG&gt;ExtractWebMethodName&lt;/STRONG&gt;(sProc);&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (null != method)&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ds = (DataSet)method.Invoke(webServiceConnection, Framework.Data.SqlController.&lt;STRONG&gt;ToObjectArray&lt;/STRONG&gt;(parms));&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; else&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; throw new Framework.Data.DataException(String.Format(&amp;#8220;Unable to locate&amp;nbsp;Web Service name of {0} on the {1} connection.&amp;#8220;, sProc, DataSourceEnum.Employee.ToString()));&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&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;&amp;nbsp; catch (System.Exception ex)&lt;BR&gt;&amp;nbsp;&amp;nbsp;&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;&amp;nbsp;&amp;nbsp;&amp;nbsp; // publish error to a central event log&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; throw new Framework.Data.DataException(String.Format(&amp;#8220;Failed to execute&amp;nbsp;Web Service {0}.&amp;#8220;, webServiceConnection.ToString()), ex);&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/FONT&gt;&lt;FONT face="Courier New" size=2&gt;&lt;BR&gt;&amp;nbsp;&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; else&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; throw new Framework.Data.DataException(String.Format(&amp;#8220;Unhandled connection request {0} returned from ConnectionFactory.&amp;#8220;, connection.ToString());&lt;/FONT&gt;&lt;FONT face="Courier New" size=2&gt;&lt;BR&gt;&amp;nbsp; }&lt;BR&gt;}&lt;/FONT&gt;&lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;P dir=ltr style="MARGIN-RIGHT: 0px"&gt;The caveats of course is that the Web Service proxy names need to match the stored procedure names. Not a bad tradeoff if you don't have to write all the web service proxy instantiations in your code and get them for free. The bolded function names above are included below for completeness.&lt;/P&gt;
&lt;BLOCKQUOTE dir=ltr style="MARGIN-RIGHT: 0px"&gt;
&lt;P dir=ltr style="MARGIN-RIGHT: 0px"&gt;&lt;FONT face="Courier New" size=2&gt;internal&amp;nbsp;static string ExtractWebMethodName(string sProc)&lt;BR&gt;{&lt;BR&gt;&amp;nbsp; string webMethodName = sProc;&lt;BR&gt;&amp;nbsp; int sProcSeperatorIndex = sProc.LastIndexOf(&amp;#8220;.&amp;#8220;);&lt;BR&gt;&amp;nbsp; if (sProcSeperatorIndex &amp;gt; -1)&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; webMethodName = sProc.SubString(sProcSeperatorIndex+1, sProc.Length - sProcSeperatorIndex);&lt;BR&gt;&amp;nbsp; return webMethodName;&lt;BR&gt;}&lt;/FONT&gt;&lt;/P&gt;
&lt;P dir=ltr style="MARGIN-RIGHT: 0px"&gt;&lt;FONT face="Courier New" size=2&gt;internal static Object[] ToObjectArray(SqlParameter[] parms)&lt;BR&gt;{&lt;BR&gt;&amp;nbsp; int parmLength = 0;&lt;BR&gt;&amp;nbsp; if (null != parms)&lt;BR&gt;&amp;nbsp; {&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; // figure out array length&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; foreach (SqlParameter parm in parms)&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (parm.Direction != ParameterDirection.Output)&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; parmLength++;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;BR&gt;&amp;nbsp; }&lt;BR&gt;&amp;nbsp; int index = 0;&lt;BR&gt;&amp;nbsp; object[] args = new object[parmLength];&lt;BR&gt;&amp;nbsp; if (null != parms)&lt;BR&gt;&amp;nbsp;&amp;nbsp;{&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; foreach (SqlParameter parm in parms)&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (parm.Direction != ParameterDirection.Output)&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;args[index++] = parm.Value;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;BR&gt;&amp;nbsp; }&lt;BR&gt;&amp;nbsp; return args;&lt;/FONT&gt;&lt;FONT face="Courier New" size=2&gt;&lt;BR&gt;}&lt;BR&gt;&lt;BR&gt;&lt;/P&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;/BLOCKQUOTE&gt;&lt;/FONT&gt;&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=54684"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=54684" border="0"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;iframe src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;PageID=31016&amp;amp;SiteID=1" width=1 height=1 Marginwidth=0 Marginheight=0 Hspace=0 Vspace=0 Frameborder=0 Scrolling=No&gt;
&lt;script language='javascript1.1' src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Browser=NETSCAPE4&amp;amp;NoCache=True&amp;PageID=31016&amp;amp;SiteID=1"&gt;&lt;/script&gt;
&lt;noscript&gt;&lt;a href="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Click&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" target="_blank"&gt;
&lt;img src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" width="1" height="1" border="0"  alt=""&gt;&lt;/a&gt;
&lt;/noscript&gt;
&lt;/iframe&gt;
&lt;img src="http://geekswithblogs.net/aguest/aggbug/54684.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Allen Guest</dc:creator>
            <guid>http://geekswithblogs.net/aguest/archive/2005/09/22/54684.aspx</guid>
            <pubDate>Thu, 22 Sep 2005 15:54:00 GMT</pubDate>
            <wfw:comment>http://geekswithblogs.net/aguest/comments/54684.aspx</wfw:comment>
            <comments>http://geekswithblogs.net/aguest/archive/2005/09/22/54684.aspx#feedback</comments>
            <slash:comments>3</slash:comments>
            <wfw:commentRss>http://geekswithblogs.net/aguest/comments/commentRss/54684.aspx</wfw:commentRss>
            <trackback:ping>http://geekswithblogs.net/aguest/services/trackbacks/54684.aspx</trackback:ping>
        </item>
        <item>
            <title>Event problems with controls with no ViewState.</title>
            <link>http://geekswithblogs.net/aguest/archive/2004/04/26/4374.aspx</link>
            <description>&lt;P&gt;&lt;FONT face=Verdana&gt;&lt;FONT face=Verdana&gt;&lt;FONT size=3&gt;&lt;FONT color=#000080 size=2&gt;&lt;STRONG&gt;DataGrid, ViewState and SelectedIndex&lt;/STRONG&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Verdana size=2&gt;The ViewState of an ASP.NET page is a hidden field that the&amp;nbsp;ASP.NET framework uses to maintain the state of a web page. When a user posts a page to the server, the server will restore the contents of the controls by parsing out the state and restoring the state in the Base64 encoded field. &lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Verdana size=2&gt;If you've worked with the DataGrid you know it has a tendency to increase the contents of the ViewState field by quite a bit - sometimes in excess of 100KB! To combat this, a variety of methods are employed - from overriding the Page.SavePagetoPersistenceMedium and Page.LoadPageFromPersistenceMedium and serializing it to Session state to the most obvious - setting the EnableViewState property to false. Saving the view state to Session can have scalability issues, but for web sites with minimal traffic this may be an option. The better solution IMHO is to remove disable the ViewState for the DataGrid by setting the EnableViewState property to false. &lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Verdana size=2&gt;A couple of additional issues rear their heads when you do this however. For starters, you must rebind your data to the Grid on every postback instead of the traditional (!isPostBack) check. You can cache this data yourself in the Page.Cache object to mitigate the database hit issue so that is no problem. As well, you will find out that the SelectedIndex property is now one post behind. This is due to the Page Life Cycle, whereby the SelectedIndexChanged event fires after the Load event. The SelectedIndex property is set correctly but it doesn't get set until after you bind. The solution is to &lt;EM&gt;rebind in the OnPreRender event instead&lt;/EM&gt;.&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Verdana size=2&gt;By setting the EnableViewState to false on my pages, I've reduced the size of the Request and Response by over 60% with no loss of funtionality.&lt;/FONT&gt;&lt;/P&gt;&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=4374"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=4374" border="0"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;iframe src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;PageID=31016&amp;amp;SiteID=1" width=1 height=1 Marginwidth=0 Marginheight=0 Hspace=0 Vspace=0 Frameborder=0 Scrolling=No&gt;
&lt;script language='javascript1.1' src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Browser=NETSCAPE4&amp;amp;NoCache=True&amp;PageID=31016&amp;amp;SiteID=1"&gt;&lt;/script&gt;
&lt;noscript&gt;&lt;a href="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Click&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" target="_blank"&gt;
&lt;img src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" width="1" height="1" border="0"  alt=""&gt;&lt;/a&gt;
&lt;/noscript&gt;
&lt;/iframe&gt;
&lt;img src="http://geekswithblogs.net/aguest/aggbug/4374.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Allen Guest</dc:creator>
            <guid>http://geekswithblogs.net/aguest/archive/2004/04/26/4374.aspx</guid>
            <pubDate>Mon, 26 Apr 2004 16:57:00 GMT</pubDate>
            <wfw:comment>http://geekswithblogs.net/aguest/comments/4374.aspx</wfw:comment>
            <comments>http://geekswithblogs.net/aguest/archive/2004/04/26/4374.aspx#feedback</comments>
            <slash:comments>3</slash:comments>
            <wfw:commentRss>http://geekswithblogs.net/aguest/comments/commentRss/4374.aspx</wfw:commentRss>
            <trackback:ping>http://geekswithblogs.net/aguest/services/trackbacks/4374.aspx</trackback:ping>
        </item>
        <item>
            <title>Javascript function naming from Server Controls</title>
            <link>http://geekswithblogs.net/aguest/archive/2004/04/22/4217.aspx</link>
            <description>&lt;P&gt;&lt;FONT face=Verdana size=2&gt;Ever have client side code generated out of your User Controls? You aren't protected by &lt;FONT color=#0000ff&gt;INamingContainer&lt;/FONT&gt; in your Javascript functions - here's a simple approach to handle this issue.&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;A href="http://geekswithblogs.net/aguest/articles/4213.aspx"&gt;&lt;FONT face=Verdana size=2&gt;http://geekswithblogs.net/aguest/articles/4213.aspx&lt;/FONT&gt;&lt;/A&gt;&lt;/P&gt;&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=4217"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=4217" border="0"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;iframe src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;PageID=31016&amp;amp;SiteID=1" width=1 height=1 Marginwidth=0 Marginheight=0 Hspace=0 Vspace=0 Frameborder=0 Scrolling=No&gt;
&lt;script language='javascript1.1' src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Browser=NETSCAPE4&amp;amp;NoCache=True&amp;PageID=31016&amp;amp;SiteID=1"&gt;&lt;/script&gt;
&lt;noscript&gt;&lt;a href="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Click&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" target="_blank"&gt;
&lt;img src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" width="1" height="1" border="0"  alt=""&gt;&lt;/a&gt;
&lt;/noscript&gt;
&lt;/iframe&gt;
&lt;img src="http://geekswithblogs.net/aguest/aggbug/4217.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Allen Guest</dc:creator>
            <guid>http://geekswithblogs.net/aguest/archive/2004/04/22/4217.aspx</guid>
            <pubDate>Thu, 22 Apr 2004 17:24:00 GMT</pubDate>
            <wfw:comment>http://geekswithblogs.net/aguest/comments/4217.aspx</wfw:comment>
            <comments>http://geekswithblogs.net/aguest/archive/2004/04/22/4217.aspx#feedback</comments>
            <wfw:commentRss>http://geekswithblogs.net/aguest/comments/commentRss/4217.aspx</wfw:commentRss>
            <trackback:ping>http://geekswithblogs.net/aguest/services/trackbacks/4217.aspx</trackback:ping>
        </item>
    </channel>
</rss>