<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://weblogs.asp.net/utility/FeedStylesheets/atom.xsl" media="screen"?><feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en"><title type="html">Glavs Blog</title><subtitle type="html">The dotDude of .Net</subtitle><id>http://weblogs.asp.net/pglavich/atom.aspx</id><link rel="alternate" type="text/html" href="http://weblogs.asp.net/pglavich/default.aspx" /><link rel="self" type="application/atom+xml" href="http://weblogs.asp.net/pglavich/atom.aspx" /><generator uri="http://communityserver.org" version="3.0.20510.895">Community Server</generator><updated>2007-12-16T21:04:07Z</updated><entry><title>New feeds for the ASP.NET Podcast</title><link rel="alternate" type="text/html" href="http://weblogs.asp.net/pglavich/archive/2008/05/08/new-feeds-for-the-asp-net-podcast.aspx" /><id>http://weblogs.asp.net/pglavich/archive/2008/05/08/new-feeds-for-the-asp-net-podcast.aspx</id><published>2008-05-08T01:08:30Z</published><updated>2008-05-08T01:08:30Z</updated><content type="html">&lt;p&gt;Wally has created some new feeds for the ASP.NET Podcast&amp;nbsp; There is still the &lt;a href="http://www.scalabledevelopment.com/ftp/ScalabilityWithDotNet.xml"&gt;same general feed&lt;/a&gt;.&amp;nbsp; It will have all shows and all of the variations of the shows in it.&amp;nbsp; These include WMV, MP4/M4V, MP3, and whatever else one can throw in it. The rest of the feeds are:  &lt;ul&gt; &lt;li&gt;&lt;a href="http://www.scalabledevelopment.com/ftp/ASPNETPodcast-wmv.xml"&gt;WMV feed&lt;/a&gt;.  &lt;li&gt;&lt;a href="http://www.scalabledevelopment.com/ftp/ASPNETPodcast-MP4.xml"&gt;MP4/M4V feed&lt;/a&gt;.  &lt;li&gt;&lt;a href="http://www.scalabledevelopment.com/ftp/ASPNETPodcast-MP3.xml"&gt;MP3 feed&lt;/a&gt;.&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;If you have any problems, let me know ASAP! &lt;/p&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=6167558" width="1" height="1"&gt;</content><author><name>Glav</name><uri>http://weblogs.asp.net/members/Glav.aspx</uri></author><category term="AJAX" scheme="http://weblogs.asp.net/pglavich/archive/tags/AJAX/default.aspx" /><category term="ASP.NET" scheme="http://weblogs.asp.net/pglavich/archive/tags/ASP.NET/default.aspx" /><category term=".NET" scheme="http://weblogs.asp.net/pglavich/archive/tags/.NET/default.aspx" /><category term="podcast" scheme="http://weblogs.asp.net/pglavich/archive/tags/podcast/default.aspx" /><category term="ASP.NET AJAX" scheme="http://weblogs.asp.net/pglavich/archive/tags/ASP.NET+AJAX/default.aspx" /></entry><entry><title>Latest Podcasts</title><link rel="alternate" type="text/html" href="http://weblogs.asp.net/pglavich/archive/2008/05/05/latest-podcasts.aspx" /><id>http://weblogs.asp.net/pglavich/archive/2008/05/05/latest-podcasts.aspx</id><published>2008-05-05T11:49:39Z</published><updated>2008-05-05T11:49:39Z</updated><content type="html">&lt;p&gt;Wally has put up some new podcasts around using Google maps and virtual earth with ASP.NET AJAX.&lt;/p&gt; &lt;p&gt;You can check em out at the following links:&lt;/p&gt; &lt;p&gt;&lt;a href="http://aspnetpodcast.com/CS11/blogs/asp.net_podcast/archive/2008/05/01/asp-net-podcast-110-integrating-asp-net-ajax-with-google-maps.aspx"&gt;Integrating ASP.NET AJAX with Google Maps.&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;a href="http://aspnetpodcast.com/CS11/blogs/asp.net_podcast/archive/2008/05/05/asp-net-podcast-show-111-asp-net-ajax-with-virtual-earth.aspx"&gt;ASP.NET AJAX with Virtual Earth&lt;/a&gt;&lt;/p&gt; &lt;p&gt;These podcasts allow you to explore mapping possibilities with the 2 popular mapping services currently available.&amp;nbsp; in combination with ASP.NET AJAX. &lt;/p&gt; &lt;p&gt;Check em out and get geographical !&lt;/p&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=6159063" width="1" height="1"&gt;</content><author><name>Glav</name><uri>http://weblogs.asp.net/members/Glav.aspx</uri></author><category term="AJAX" scheme="http://weblogs.asp.net/pglavich/archive/tags/AJAX/default.aspx" /><category term="ASP.NET" scheme="http://weblogs.asp.net/pglavich/archive/tags/ASP.NET/default.aspx" /><category term=".NET" scheme="http://weblogs.asp.net/pglavich/archive/tags/.NET/default.aspx" /><category term="podcast" scheme="http://weblogs.asp.net/pglavich/archive/tags/podcast/default.aspx" /><category term="ASP.NET AJAX" scheme="http://weblogs.asp.net/pglavich/archive/tags/ASP.NET+AJAX/default.aspx" /></entry><entry><title>WiX - Painful at best</title><link rel="alternate" type="text/html" href="http://weblogs.asp.net/pglavich/archive/2008/04/29/wix-painful-at-best.aspx" /><id>http://weblogs.asp.net/pglavich/archive/2008/04/29/wix-painful-at-best.aspx</id><published>2008-04-29T05:35:25Z</published><updated>2008-04-29T05:35:25Z</updated><content type="html">&lt;p&gt;So I finally got WiX to create an installer for me after many hours of poor documentation, obscure errors and bizarre angle bracket syntax.&lt;/p&gt; &lt;p&gt;The latest error I have really annoyed me as there was no obvious indication what the error was and how to resolve it, which is really the purpose of this post. To share this so that others may benefit, and because my memory is so poor, I need to record it for later use :-)&lt;/p&gt; &lt;p&gt;Basically I got this:&lt;/p&gt; &lt;p&gt;&lt;font size="2" face="Courier New"&gt;candle.exe : error CNDL0001: Cannot set column 'Attributes' with value 239 because it is greater than the maximum allowed value for this column, 127.&lt;/font&gt;&lt;/p&gt; &lt;p&gt;Nice. I wont bore you with the vulgarities that I produced trying to decipher this message, but it ended up being the fact that I had put a &lt;font size="2" face="Courier New"&gt;&amp;lt;sql:sqlDatabase&amp;gt;&lt;/font&gt; server definition was inside a feature element rather than outside on its own.&lt;/p&gt; &lt;p&gt;So I had put this:&lt;/p&gt; &lt;p&gt;&lt;font size="2" face="Courier New"&gt;&amp;lt;sql:sqlDatabase Id="SqlDatabase" Server="[DATABASESERVERNAME]" Database="[DATABASENAME]" /&amp;gt;&lt;/font&gt;&lt;/p&gt; &lt;p&gt;inside a &lt;font size="2" face="Courier New"&gt;&amp;lt;Component&amp;gt;&lt;/font&gt; tag. &lt;/p&gt; &lt;p&gt;Placing the &lt;font size="2" face="Courier New"&gt;&amp;lt;sql:sqlDatabase&amp;gt;&lt;/font&gt; tag back outside the &lt;font size="2" face="Courier New"&gt;&amp;lt;Component&amp;gt;&lt;/font&gt; tag fixed this issue.&lt;/p&gt; &lt;p&gt;Hope it saves others similar frustration.&lt;/p&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=6140210" width="1" height="1"&gt;</content><author><name>Glav</name><uri>http://weblogs.asp.net/members/Glav.aspx</uri></author><category term=".NET" scheme="http://weblogs.asp.net/pglavich/archive/tags/.NET/default.aspx" /><category term="Visual Studio" scheme="http://weblogs.asp.net/pglavich/archive/tags/Visual+Studio/default.aspx" /><category term="SQL Server" scheme="http://weblogs.asp.net/pglavich/archive/tags/SQL+Server/default.aspx" /></entry><entry><title>Remix in Oz</title><link rel="alternate" type="text/html" href="http://weblogs.asp.net/pglavich/archive/2008/04/28/remix-in-oz.aspx" /><id>http://weblogs.asp.net/pglavich/archive/2008/04/28/remix-in-oz.aspx</id><published>2008-04-28T06:05:36Z</published><updated>2008-04-28T06:05:36Z</updated><content type="html">&lt;p&gt;&lt;a href="http://www.microsoft.com/australia/remix08/index.aspx"&gt;Remix&lt;/a&gt;, is heading downunder and registrations are now open. You can register &lt;a href="http://www.microsoft.com/australia/remix08/index.aspx"&gt;here&lt;/a&gt;.This event is especially cool for the many people who did not get a chance to attend the actual Mix event in the United States (which is many of us). &lt;/p&gt; &lt;p&gt;Dates and locations are:&lt;/p&gt; &lt;h5&gt;&lt;b&gt;Sydney&lt;/b&gt;&lt;/h5&gt;&amp;nbsp;&amp;nbsp; May 20 &lt;br&gt;&amp;nbsp;&amp;nbsp; Powerhouse Museum&lt;br&gt;&amp;nbsp;&amp;nbsp; Harris Street, Ultimo  &lt;h5&gt;&lt;b&gt;Melbourne&lt;/b&gt;&lt;/h5&gt;&amp;nbsp;&amp;nbsp; May 22&lt;br&gt;&amp;nbsp;&amp;nbsp; Melbourne Town Hall&lt;br&gt;&amp;nbsp;&amp;nbsp; Cnr Swanston &amp;amp; Collins&lt;br&gt;&amp;nbsp;&amp;nbsp; Street, Melbourne  &lt;p&gt;There will be heaps of quality technical content from a bunch of &lt;a href="http://www.microsoft.com/australia/remix08/sessions.aspx"&gt;local technical rockstars&lt;/a&gt;, and I will be attending and participating as an expert in one of the "Ask the Experts" areas.&lt;/p&gt; &lt;p&gt;Look forward to seeing you there!&lt;/p&gt; &lt;p&gt;Oh, by the way, &lt;strong&gt;each&lt;/strong&gt; attendee receives a copy of Expression Studio 2 (rrp$1040) for &lt;strong&gt;free&lt;/strong&gt; when they register!&lt;/p&gt; &lt;p align="center"&gt;&lt;a href="http://weblogs.asp.net/australia/remix08/index.aspx"&gt;&lt;img border="0" alt="The Next Web Now" src="http://www.microsoft.com/australia/remix08/images/bling/nextweb_08.jpg"&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=6138134" width="1" height="1"&gt;</content><author><name>Glav</name><uri>http://weblogs.asp.net/members/Glav.aspx</uri></author><category term="AJAX" scheme="http://weblogs.asp.net/pglavich/archive/tags/AJAX/default.aspx" /><category term="ASP.NET" scheme="http://weblogs.asp.net/pglavich/archive/tags/ASP.NET/default.aspx" /><category term=".NET" scheme="http://weblogs.asp.net/pglavich/archive/tags/.NET/default.aspx" /><category term="Web 2.0" scheme="http://weblogs.asp.net/pglavich/archive/tags/Web+2.0/default.aspx" /><category term="MVP" scheme="http://weblogs.asp.net/pglavich/archive/tags/MVP/default.aspx" /><category term="ASP.NET AJAX" scheme="http://weblogs.asp.net/pglavich/archive/tags/ASP.NET+AJAX/default.aspx" /><category term="Silverlight" scheme="http://weblogs.asp.net/pglavich/archive/tags/Silverlight/default.aspx" /></entry><entry><title>MCTS in WCF</title><link rel="alternate" type="text/html" href="http://weblogs.asp.net/pglavich/archive/2008/04/20/mcts-in-wcf.aspx" /><id>http://weblogs.asp.net/pglavich/archive/2008/04/20/mcts-in-wcf.aspx</id><published>2008-04-20T07:55:24Z</published><updated>2008-04-20T07:55:24Z</updated><content type="html">&lt;p&gt;So a little while ago, I &lt;a href="http://weblogs.asp.net/pglavich/archive/2007/12/02/wcf-beta-exam.aspx"&gt;mentioned that I did a WCF beta exam&lt;/a&gt; for a Microsoft Certified Technical Specialist. Its been a long time since I did that and I had kinda forgotten about it, but today I received the good news that I am now a MCTS in WCF!&lt;/p&gt; &lt;p&gt;WooHoo!&lt;/p&gt; &lt;p&gt;I really thought I had bombed that exam due to the very little prep that I had done, but fortunately that is not the case.&lt;/p&gt; &lt;p&gt;I would love to hear from anybody else (particularly any fellow australians) who have also done the beta exam and received their congratulatory email.&lt;/p&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=6114325" width="1" height="1"&gt;</content><author><name>Glav</name><uri>http://weblogs.asp.net/members/Glav.aspx</uri></author><category term=".NET" scheme="http://weblogs.asp.net/pglavich/archive/tags/.NET/default.aspx" /><category term="WCF" scheme="http://weblogs.asp.net/pglavich/archive/tags/WCF/default.aspx" /><category term="Architecture" scheme="http://weblogs.asp.net/pglavich/archive/tags/Architecture/default.aspx" /></entry><entry><title>Reducing page load times with UpdatePanels and timers</title><link rel="alternate" type="text/html" href="http://weblogs.asp.net/pglavich/archive/2008/04/07/reducing-page-load-times-with-updatepanels-and-timers.aspx" /><id>http://weblogs.asp.net/pglavich/archive/2008/04/07/reducing-page-load-times-with-updatepanels-and-timers.aspx</id><published>2008-04-07T12:18:31Z</published><updated>2008-04-07T12:18:31Z</updated><content type="html">&lt;p&gt;I have demo'ed this technique before and talked about it various times, but I recently used this on another engagement which really helped alleviate some of the initial page load times and size.&lt;/p&gt; &lt;p&gt;In my scenario, we had a page utilising the &lt;a href="http://www.codeplex.com/AtlasControlToolkit"&gt;AJAX Control toolkit&lt;/a&gt; and which utilised the excellent Tab control to contain a number of separate display elements.&lt;/p&gt; &lt;p&gt;&lt;a href="http://www.theglavs.com/article_Images/ReducingpageloadtimeswithUpdatePanelsand_F0B4/image.png"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" border="0" alt="image" src="http://www.theglavs.com/article_Images/ReducingpageloadtimeswithUpdatePanelsand_F0B4/image_thumb.png" width="480" height="136"&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;The page itself had a number of other toolkit control on it, and quite a few GridView controls (notorious for excessive viewstate and page bloat). Page size and speed was paramount on this project so I wanted to be able to bring up the page as quick as possible -BUT- we had to retain all the functionality we had introduced.&lt;/p&gt; &lt;p&gt;The page weighed in at approximately 210kb. Utilising the delayed load technique I was able to reduce that to approx. 130Kb and retain every bit of functionality so far.&lt;/p&gt; &lt;p&gt;The theory is this:&lt;/p&gt; &lt;ul&gt; &lt;li&gt;The initial tab has the controls defined as normal.  &lt;li&gt;Each subsequent tab content is encased in an Panel with the visibility set to false (to prevent its content from being rendered)  &lt;li&gt;The invisible panel is also encased in an UpdatePanel.  &lt;li&gt;Each UpdatePanel has an async trigger that points to an &amp;lt;Asp:Timer control.  &lt;li&gt;Initial the timer control is not enabled.  &lt;li&gt;When the page loads, it activates the first timer control.  &lt;li&gt;The timer control tick event, sets the invisible panel to visible, disables itself, then enables the next timer.  &lt;li&gt;Next timer sets its invisible panel to visible=true, disables itself, and enables the next timer.  &lt;li&gt;Process continues.&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;I have provided a demonstration of this via videocast &lt;a href="http://www.theglavs.com/DownloadItem.aspx?FileID=59"&gt;here&lt;/a&gt; with full source code &lt;a href="http://www.theglavs.com/DownloadItem.aspx?FileID=60"&gt;here&lt;/a&gt;. &lt;/p&gt; &lt;p&gt;In this trivial example, there is one page with all tabs being loaded as normal, and another using the delay load technique. The standard page has a size of around 50Kb. The page using delay load has an initial load size of approximately 25kb which is half the size.&lt;/p&gt; &lt;p&gt;Obviously, the bigger pages get, you can see how you might be able to have a rather weighty page that initially only loads a small subset of the page, then uses delay load to load the other sections.&lt;/p&gt; &lt;p&gt;I have found this technique valuable, and it can easily be changed to suit your needs. Hope you find it of value too.&lt;/p&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=6072783" width="1" height="1"&gt;</content><author><name>Glav</name><uri>http://weblogs.asp.net/members/Glav.aspx</uri></author><category term="AJAX" scheme="http://weblogs.asp.net/pglavich/archive/tags/AJAX/default.aspx" /><category term="ASP.NET" scheme="http://weblogs.asp.net/pglavich/archive/tags/ASP.NET/default.aspx" /><category term=".NET" scheme="http://weblogs.asp.net/pglavich/archive/tags/.NET/default.aspx" /><category term="podcast" scheme="http://weblogs.asp.net/pglavich/archive/tags/podcast/default.aspx" /><category term="ASP.NET AJAX" scheme="http://weblogs.asp.net/pglavich/archive/tags/ASP.NET+AJAX/default.aspx" /><category term="AJAX Control toolkit" scheme="http://weblogs.asp.net/pglavich/archive/tags/AJAX+Control+toolkit/default.aspx" /></entry><entry><title>ASP.NET MVC and IE8 WebActivities</title><link rel="alternate" type="text/html" href="http://weblogs.asp.net/pglavich/archive/2008/03/14/asp-net-mvc-and-ie8-webactivities.aspx" /><id>http://weblogs.asp.net/pglavich/archive/2008/03/14/asp-net-mvc-and-ie8-webactivities.aspx</id><published>2008-03-14T01:23:10Z</published><updated>2008-03-14T01:23:10Z</updated><content type="html">&lt;p&gt;One of the great things in &lt;a href="http://www.readify.net"&gt;readify&lt;/a&gt; is the ability to do Professional Development at scheduled intervals to keep up to speed with the latest industry technologies and advancements. My latest foray into this (amongst other things) has been looking at the &lt;a href="http://weblogs.asp.net/scottgu/archive/2007/10/14/asp-net-mvc-framework.aspx"&gt;ASP.NET MVC framework&lt;/a&gt; and &lt;a href="http://weblogs.asp.net/scottgu/archive/2007/10/14/asp-net-mvc-framework.aspx"&gt;Internet Explorer 8 WebActivities&lt;/a&gt;. Both of these technologies are quite cool and I wanted a way to learn about them both and link them in some way where I could learn about them at the same time.&lt;/p&gt; &lt;p&gt;To that end, I created a &lt;a href="http://www.theglavs.com/DownloadItem.aspx?FileID=57"&gt;solution in Visual Studio 2008&lt;/a&gt; which utilises the ASP.NET MVC framework and allows a user to enter some fields to create an IE8 Web Activity definition. You can then view the XML definition, and click the 'Add' button to add that activity to Internet Explorer 8 as a proper web activity.&lt;/p&gt; &lt;p&gt;The web activity generated is not particularly functional, but does allow previews, icon definition, execute actions, however has no current support for parameters. Again, not really intended as a fully fledged utility or application, but a good way to learn about both the MVC framework and IE8 activities.&lt;/p&gt; &lt;p&gt;The solution can be downloaded &lt;a href="http://www.theglavs.com/DownloadItem.aspx?FileID=57"&gt;here&lt;/a&gt;.&lt;/p&gt; &lt;p&gt;Obviously, you need Visual Studio 2008, the &lt;a href="http://www.microsoft.com/downloads/details.aspx?FamilyId=38CC4CF1-773A-47E1-8125-BA3369BF54A3&amp;amp;displaylang=en"&gt;ASP.NET MVC preview 2 framework&lt;/a&gt;, and have &lt;a href="http://weblogs.asp.net/scottgu/archive/2007/10/14/asp-net-mvc-framework.aspx"&gt;Internet Explorer 8 beta&lt;/a&gt; installed.&lt;/p&gt; &lt;p&gt;Feel free to download, play, chop up etc...&lt;/p&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=5964112" width="1" height="1"&gt;</content><author><name>Glav</name><uri>http://weblogs.asp.net/members/Glav.aspx</uri></author><category term="ASP.NET" scheme="http://weblogs.asp.net/pglavich/archive/tags/ASP.NET/default.aspx" /><category term=".NET" scheme="http://weblogs.asp.net/pglavich/archive/tags/.NET/default.aspx" /><category term="readify" scheme="http://weblogs.asp.net/pglavich/archive/tags/readify/default.aspx" /><category term="MVC" scheme="http://weblogs.asp.net/pglavich/archive/tags/MVC/default.aspx" /><category term="Architecture" scheme="http://weblogs.asp.net/pglavich/archive/tags/Architecture/default.aspx" /><category term="Internet Explorer 8" scheme="http://weblogs.asp.net/pglavich/archive/tags/Internet+Explorer+8/default.aspx" /></entry><entry><title>Why wont you just work....</title><link rel="alternate" type="text/html" href="http://weblogs.asp.net/pglavich/archive/2008/02/25/why-wont-you-just-work.aspx" /><id>http://weblogs.asp.net/pglavich/archive/2008/02/25/why-wont-you-just-work.aspx</id><published>2008-02-24T22:32:44Z</published><updated>2008-02-24T22:32:44Z</updated><content type="html">&lt;p&gt;In a &lt;a href="http://weblogs.asp.net/pglavich/archive/2007/05/22/vsts-and-vstesthost-exe-not-on-talking-terms.aspx"&gt;previous post&lt;/a&gt; on some problems I had with VS2005 and unit testing where running unit tests always gave me this:&lt;/p&gt; &lt;p&gt;&lt;a href="http://www.theglavs.com/article_Images/Whywontyoujustwork_85F4/image.png"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="207" alt="image" src="http://www.theglavs.com/article_Images/Whywontyoujustwork_85F4/image_thumb.png" width="391" border="0"&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;I reported that uninstalling and re-installing the test components of Visual Studio fixed it up. Well I am getting the exact same behaviour with VS2008 now. So, I thought I would uninstall the unit test component of VS2008, then re-install it, and all would be good.&lt;/p&gt; &lt;p&gt;Not quite, uninstalling it, then re-installing it did nothing. On further examination, the tools didn't actually uninstall. Currently, I have uninstalled the entire Team test tools selection as you can see below. &lt;/p&gt; &lt;p&gt;&lt;a href="http://www.theglavs.com/article_Images/Whywontyoujustwork_85F4/image_3.png"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="330" alt="image" src="http://www.theglavs.com/article_Images/Whywontyoujustwork_85F4/image_thumb_3.png" width="340" border="0"&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;However, I still have all the functionality to run unit tests in VS2008! So not only can I not run unit tests, I cannot even uninstall anything! &lt;/p&gt; &lt;p&gt;&lt;a href="http://www.theglavs.com/article_Images/Whywontyoujustwork_85F4/image_4.png"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="287" alt="image" src="http://www.theglavs.com/article_Images/Whywontyoujustwork_85F4/image_thumb_4.png" width="397" border="0"&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;Please..... why wont you just work? I have better things to do with my time....&lt;/p&gt; &lt;p&gt;For anyone interested in the details, it has issues trying to load the &lt;font face="Courier New" size="2"&gt;Microsoft.VisualStudio.QualityTools.Common.dll&lt;/font&gt; assembly as shown by the exception text below;&lt;/p&gt; &lt;p&gt;&lt;font face="Courier New" size="2"&gt;Could not load file or assembly 'Microsoft.VisualStudio.QualityTools.Common, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a' or one of its dependencies. The system cannot find the file specified.&lt;/font&gt;&lt;/p&gt; &lt;p&gt;Now this (and all the Quality tools assemblies) are located in the PrivateAssemblies folder, just like they are on a colleagues machine, and yet they cannot be found.&lt;/p&gt; &lt;p&gt;&lt;font color="#ff0000"&gt;&lt;strong&gt;Update&lt;/strong&gt;:&lt;/font&gt; I got jack of it not working after multiple attempts at uninstalling and re-installing the test components, and simply copied all the &lt;font face="Courier New" size="2"&gt;Microsoft.VisualStudio.QualityTools.*&lt;/font&gt; assemblies from the &lt;font face="Courier New" size="2"&gt;PrivateAssemblies&lt;/font&gt; folder into the &lt;font face="Courier New" size="2"&gt;...\Common7\IDE&lt;/font&gt; folder. It is now working as expected.&lt;/p&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=5855659" width="1" height="1"&gt;</content><author><name>Glav</name><uri>http://weblogs.asp.net/members/Glav.aspx</uri></author><category term=".NET" scheme="http://weblogs.asp.net/pglavich/archive/tags/.NET/default.aspx" /><category term="Visual Studio" scheme="http://weblogs.asp.net/pglavich/archive/tags/Visual+Studio/default.aspx" /></entry><entry><title>WCF &amp; ASP.NET Role Provider</title><link rel="alternate" type="text/html" href="http://weblogs.asp.net/pglavich/archive/2008/02/08/wcf-amp-asp-net-role-provider.aspx" /><id>http://weblogs.asp.net/pglavich/archive/2008/02/08/wcf-amp-asp-net-role-provider.aspx</id><published>2008-02-08T05:08:22Z</published><updated>2008-02-08T05:08:22Z</updated><content type="html">&lt;p&gt;So I was talking to &lt;a href="http://shea.strickland.com.au/AboutMe/tabid/146/Default.aspx"&gt;Shea Strickland&lt;/a&gt; a relatively new starter in &lt;a href="http://www.readify.net"&gt;readify&lt;/a&gt; who is doing some WCF work and asked&amp;nbsp; about the role provider support in WCF. He pointed me to an &lt;a href="http://www.leastprivilege.com/RolePrincipalVsRoleProviderPrincipal.aspx"&gt;article by Dominick Baier&lt;/a&gt; who mentioned that the RoleProviderPrincipal in WCF will actually cause a database call each time an IsInRole check is performed.&lt;/p&gt; &lt;p&gt;After some experimentation, this was confirmed by myself to be absolutely true. If a service request comes in, and during the course of that request, you make 3 IsInRole checks (perhaps at various layers of the domain model for example), then the database will get 3 requests to execute a stored proc to check the users role.&lt;/p&gt; &lt;p&gt;By contract, the ASP.NET RolePrincipal will get all the users roles when the first IsInRole check is performed, and then subsequent role checks will not hit the database at all, but rather check against the roles that are in memory.&lt;/p&gt; &lt;p&gt;I was somewhat disappointed by this as it meant that potentially, a lot of extra DB work is being performed, and not exactly what I would call best practice. Luckily, WCF is pretty easy to extend, and again, with the help of an article by &lt;a href="http://www.leastprivilege.com/RolePrincipalVsRoleProviderPrincipal.aspx"&gt;Dominick Baier&lt;/a&gt;, I created a custom authorisation policy (implements IAuthorizationPolicy) which could be plugged into WCF, and use the standard ASP.NET RolePrincipal, thus getting the behaviour we are after.&lt;/p&gt; &lt;p&gt;To that end, I have created a small library with the authorisation policy code ready for you to download and use.&lt;/p&gt; &lt;p&gt;Simply download the library &lt;a href="http://www.theglavs.com/DownloadItem.aspx?FileID=56"&gt;here&lt;/a&gt;, then make a change to your configuration file as shown below.&lt;/p&gt; &lt;p&gt;&lt;a href="http://www.theglavs.com/article_Images/WCFASP.NETRoleProvider_10305/image.png"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="181" alt="image" src="http://www.theglavs.com/article_Images/WCFASP.NETRoleProvider_10305/image_thumb.png" width="644" border="0"&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;I would consider this a pretty common requirement if you are using the ASP.NET Role Providers in WCF, so this is why I have made this available. In addition, its a pretty small piece of code, but its still not that easy to discern via just spelunking around WCF (as Dominick already mentioned).&lt;/p&gt; &lt;p&gt;So hopefully this is useful for others.&lt;/p&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=5735270" width="1" height="1"&gt;</content><author><name>Glav</name><uri>http://weblogs.asp.net/members/Glav.aspx</uri></author><category term=".NET" scheme="http://weblogs.asp.net/pglavich/archive/tags/.NET/default.aspx" /><category term="WCF" scheme="http://weblogs.asp.net/pglavich/archive/tags/WCF/default.aspx" /><category term="Architecture" scheme="http://weblogs.asp.net/pglavich/archive/tags/Architecture/default.aspx" /></entry><entry><title>ASP.NET, CSS &amp; Control Adapters</title><link rel="alternate" type="text/html" href="http://weblogs.asp.net/pglavich/archive/2008/02/04/asp-net-css-amp-control-adapters.aspx" /><id>http://weblogs.asp.net/pglavich/archive/2008/02/04/asp-net-css-amp-control-adapters.aspx</id><published>2008-02-04T11:06:04Z</published><updated>2008-02-04T11:06:04Z</updated><content type="html">&lt;p&gt;I thought I'd pass on some link love to &lt;a href="http://damianpedwards.spaces.live.com/"&gt;Damian Edwards&lt;/a&gt;, the resident &lt;a href="http://www.readify.net"&gt;readify&lt;/a&gt; CSS god. Here recently did an &lt;a href="http://www.readify.net/rdn.aspx"&gt;RDN&lt;/a&gt; presentation on using CSS effectively with ASP.NET and the first of a series of articles on that very subject can be found &lt;a href="http://damianpedwards.spaces.live.com/blog/cns!A079DE667E1958B3!562.entry"&gt;here&lt;/a&gt;.&lt;/p&gt; &lt;p&gt;its a great article and well worth your time to read, especially if you want to make ASP.NET are good CSS citizen.&lt;/p&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=5706673" width="1" height="1"&gt;</content><author><name>Glav</name><uri>http://weblogs.asp.net/members/Glav.aspx</uri></author><category term="AJAX" scheme="http://weblogs.asp.net/pglavich/archive/tags/AJAX/default.aspx" /><category term="ASP.NET" scheme="http://weblogs.asp.net/pglavich/archive/tags/ASP.NET/default.aspx" /><category term=".NET" scheme="http://weblogs.asp.net/pglavich/archive/tags/.NET/default.aspx" /><category term="ASP.NET AJAX" scheme="http://weblogs.asp.net/pglavich/archive/tags/ASP.NET+AJAX/default.aspx" /></entry><entry><title>WCF - Handling Generic Messages</title><link rel="alternate" type="text/html" href="http://weblogs.asp.net/pglavich/archive/2008/01/19/wcf-handling-generic-messages.aspx" /><id>http://weblogs.asp.net/pglavich/archive/2008/01/19/wcf-handling-generic-messages.aspx</id><published>2008-01-19T07:22:46Z</published><updated>2008-01-19T07:22:46Z</updated><content type="html">&lt;p&gt;I had a requirement for a client where we were upgrading a web site that had a business web service exposed, and we had to create a new service that was identical in operation to the old (from a consumer perspective).&lt;/p&gt; &lt;p&gt;The situation we had though, was somewhat of a reversal on what I normally do (and I suspect what most people do). Typically, I would create a service, and the consumer would query its interface, and generate the appropriate client code to consume it. In this scenario, we had a service and consumer, and we had to mimic the old service so that the consumer could continue "consuming" as if nothing had changed. Furthermore, because the consumer was using a much older technology set, the messages being sent by that consumer were not quite compliant with the latest standards. So I had to create a service that essentially allowed a non compliant consumer to operate unchanged.&lt;/p&gt; &lt;p&gt;Initially, I tried generating interfaces using the SVCUTIL tool in WCF from the existing WSDL and then exposed those interfaces using a basic http binding. This sort of worked. Firstly, the generated interface had an incorrect soap action attribute (as I detailed in a previous post &lt;a href="http://weblogs.asp.net/pglavich/archive/2007/12/16/wcf-and-interoperability.aspx"&gt;here&lt;/a&gt;). This was relatively easy to overcome with a little bit of code.&lt;/p&gt; &lt;p&gt;Once this was done however, calls from the consumer would get to the service ok, but the object being passed in by the consumer would always come through as NULL. It seemed that the serialised data from the consumer, was not getting deserialised correctly on the service end.&lt;/p&gt; &lt;p&gt;The original service definition looked something like:&lt;/p&gt; &lt;p&gt;&lt;font face="Courier New" size="2"&gt;&lt;font color="#0080c0"&gt;public&lt;/font&gt; void SubmitOrder(&lt;font color="#0080ff"&gt;Order&lt;/font&gt; orderRequest);&lt;/font&gt;&lt;/p&gt; &lt;p&gt;The &lt;font face="Courier New" size="2"&gt;orderRequest&lt;/font&gt; object was always coming through as NULL.&lt;/p&gt; &lt;p&gt;As with a lot of projects, time was short and the pressure was on.&lt;/p&gt; &lt;p&gt;I didn't have to do much processing of the &lt;font face="Courier New" size="2"&gt;orderRequest&lt;/font&gt;, simply get its contents as one big XML blob and pass it downstream to a legacy processing component so I didn't really have to do much with the data. Get the object, serialise it as XML, send it on. It was quite frustrating, and attempting to find out what exactly the differences were in terms of serialisation seemed not only a painful task, but a rather time consuming one.&lt;/p&gt; &lt;p&gt;So, I decided to implement a generic WCF service that simply accepted whatever data was sent to an endpoint, and pass it on to the legacy component. The more I thought about it, the better an idea it seemed because:&lt;/p&gt; &lt;ul&gt; &lt;li&gt;Deserialising the incoming data into an object, and the serialising it again to pass it downstream was an excessive waste of time and cycles.  &lt;li&gt;The business service exposed was only one method end the expectations was this is how it would remain for sometime.  &lt;li&gt;The level of validation on the data being passed downstream was quite high so even though it could accept almost anything, only the correctly structured and formatted data would be accepted and processed.&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;So with that in mind, I created a generic service that accepted any service calls to a particular endpoint, extracted out the body of the SOAP message, and passed it on downstream.&lt;/p&gt; &lt;p&gt;The code looked like this:&lt;/p&gt; &lt;p&gt;Interface:&lt;/p&gt; &lt;p&gt;&lt;font face="Courier New" size="2"&gt;[&lt;font color="#0080c0"&gt;MatchAllEndpoints&lt;/font&gt;]&lt;br&gt;[&lt;font color="#0080c0"&gt;ServiceContract&lt;/font&gt;(SessionMode = &lt;font color="#0080c0"&gt;SessionMode&lt;/font&gt;.Allowed)]&lt;br&gt;&lt;font color="#0000ff"&gt;public interface&lt;/font&gt; &lt;font color="#0080c0"&gt;ICatchAll&lt;/font&gt;&lt;br&gt;{&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; [&lt;font color="#0080c0"&gt;OperationContract&lt;/font&gt;(IsOneWay = false, Action = "*", ReplyAction = "*")]&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color="#0080c0"&gt;Message&lt;/font&gt; ProcessMessage(&lt;font color="#0080c0"&gt;Message&lt;/font&gt; message);&lt;br&gt;}&lt;/font&gt;  &lt;p&gt;Notice the Action parameter of the OperationContract attribute specifies '*' to indicate that any SoapAction is acceptible for this method.&lt;/p&gt; &lt;p&gt;Secondly, notice the &lt;font face="Courier New" size="2"&gt;[&lt;font color="#0080c0"&gt;MatchAllEndpoints&lt;/font&gt;]&lt;/font&gt; attribute. Lets look at its code:&lt;/p&gt; &lt;p&gt;&lt;font face="Courier New" size="2"&gt;class &lt;font color="#0080c0"&gt;MatchAllEndpoints&lt;/font&gt; : &lt;font color="#0080c0"&gt;Attribute&lt;/font&gt;, &lt;font color="#0080c0"&gt;IContractBehavior&lt;/font&gt;&lt;br&gt;{&lt;br&gt;&lt;/font&gt;&lt;font face="Courier New" size="2"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color="#0000ff"&gt;public void&lt;/font&gt; AddBindingParameters(&lt;font color="#0080c0"&gt;ContractDescription&lt;/font&gt; contractDescription, &lt;font color="#0080c0"&gt;ServiceEndpoint&lt;/font&gt; endpoint, BindingParameterCollection bindingParameters)&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; } &lt;/font&gt; &lt;p&gt;&lt;font face="Courier New" size="2"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color="#0000ff"&gt;public void&lt;/font&gt; ApplyClientBehavior(&lt;font color="#0080c0"&gt;ContractDescription&lt;/font&gt; contractDescription, &lt;font color="#0080c0"&gt;ServiceEndpoint&lt;/font&gt; endpoint, &lt;font color="#0080c0"&gt;ClientRuntime&lt;/font&gt; clientRuntime)&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; } &lt;/font&gt; &lt;p&gt;&lt;font face="Courier New" size="2"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color="#0000ff"&gt;public void&lt;/font&gt; ApplyDispatchBehavior(&lt;font color="#0080c0"&gt;ContractDescription&lt;/font&gt; contractDescription, &lt;font color="#0080c0"&gt;ServiceEndpoint&lt;/font&gt; endpoint, &lt;font color="#0080c0"&gt;DispatchRuntime&lt;/font&gt; dispatchRuntime)&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; dispatchRuntime.EndpointDispatcher.AddressFilter = new System.ServiceModel.Dispatcher.&lt;font color="#0080c0"&gt;MatchAllMessageFilter&lt;/font&gt;();&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; } &lt;/font&gt; &lt;p&gt;&lt;font face="Courier New" size="2"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color="#0000ff"&gt;public void&lt;/font&gt; Validate(&lt;font color="#0080c0"&gt;ContractDescription&lt;/font&gt; contractDescription, &lt;font color="#0080c0"&gt;ServiceEndpoint&lt;/font&gt; endpoint)&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; { &lt;/font&gt;&lt;font face="Courier New" size="2"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; } &lt;/font&gt; &lt;p&gt;&lt;font face="Courier New" size="2"&gt;}&lt;/font&gt;  &lt;p&gt;The only method we really implement is the &lt;font face="Courier New" size="2"&gt;ApplyDispatchBehavior&lt;/font&gt;. In this we set the AddressFilter to a MatchAllMessageFilter which determines the criteria upon which we want to deal with messages and ensures we get all the messages directed at a specific endpoint. This means it is irrelevant what service is actually called. If its directed at the endpoint exposed by this service, then we will get it.&lt;/p&gt; &lt;p&gt;Next comes the service itself:&lt;/p&gt; &lt;p&gt;&lt;font face="Courier New" size="2"&gt;&lt;font color="#0000ff"&gt;public class&lt;/font&gt; &lt;font color="#0080c0"&gt;CatchAllService&lt;/font&gt; : &lt;font color="#0080c0"&gt;ICatchAll&lt;/font&gt;&lt;br&gt;{&lt;br&gt;&amp;nbsp; &lt;font face="Courier New" size="2"&gt;&lt;font color="#0000ff"&gt;public&lt;/font&gt;&lt;/font&gt; Message ProcessMessage(Message message)&lt;br&gt;&amp;nbsp; {&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color="#008000"&gt;// Create a buffered copy of the message in memory so we can read it AND take a another copy&lt;/font&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; MessageBuffer buffer = message.CreateBufferedCopy(8192); &lt;/font&gt; &lt;p&gt;&lt;font face="Courier New" size="2"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color="#008000"&gt;// Get a copy of the original message. This will be used to read and extract the body.&lt;/font&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Message msgCopy = buffer.CreateMessage(); &lt;/font&gt; &lt;p&gt;&lt;font face="Courier New" size="2"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color="#008000"&gt;// Take another copy of the same message. This will be used to return to the service. Returning an identical message forms part of&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; // the acknowledgement in this case.&lt;/font&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Message returnMsg = buffer.CreateMessage(); &lt;/font&gt; &lt;p&gt;&lt;font face="Courier New" size="2"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color="#008000"&gt;// Use the msgCopy to get an XML Dictionary reader to extract the body contents. Once this message has been read and consumed,&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; // it can no longer be consumed again (this is why we took a second copy above&lt;/font&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; System.Xml.XmlDictionaryReader xrdr = msgCopy.GetReaderAtBodyContents();&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color="#0000ff"&gt;string&lt;/font&gt; bodyData = xrdr.ReadOuterXml(); &lt;/font&gt; &lt;p&gt;&lt;font face="Courier New" size="2"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color="#008000"&gt;// Send the body of the message, which is the order, to be processed.&lt;/font&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; DomainObject.ProcessOrder(bodyData); &lt;/font&gt; &lt;p&gt;&lt;font face="Courier New" size="2"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color="#008000"&gt;// Return the second copy of the message we took previously.&lt;/font&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color="#0000ff"&gt;return&lt;/font&gt; returnMsg;&lt;br&gt;&amp;nbsp; }&lt;br&gt;}&lt;/font&gt;  &lt;p&gt;This little puppy took me a while to get right. All I wanted to do was get the body of the SOAP message as a big string. There are a myriad of methods on the Message object which seem to suggest you can use them to do this (such as Message.GetBody&amp;lt;T&amp;gt;() ) but it took sometime to experiment and get the right one.&lt;/p&gt; &lt;p&gt;Firstly, I grab a copy of the message in a MessageBuffer. If I dont do this, once I have read the message, I can do anything with it again. That is, once consumed, its a done deal. I needed the message again to return to the client as they compare what they sent with what is returned to act as an acknowledgement (I didn't come up with this method, I just had to make it work the same...)&lt;/p&gt; &lt;p&gt;So from the buffered message, I create a new message which I can read and consume. The second one is what we return to the consumer/client.&lt;/p&gt; &lt;p&gt;Next I construct an &lt;font face="Courier New" size="2"&gt;XmlDictionaryReader&lt;/font&gt; from the message itself by calling &lt;font face="Courier New" size="2"&gt;GetReaderAtBodyContents&lt;/font&gt; on the message object. From this I can read the OuterXml to get the body as a string and pass it on.&lt;/p&gt; &lt;p&gt;Lastly I return a copy of the message.&lt;/p&gt; &lt;p&gt;Finally, the configuration file to expose this service is pretty basic:&lt;/p&gt; &lt;p&gt;&lt;font face="Courier New" color="#800000" size="2"&gt;&amp;lt;services&amp;gt;&lt;br&gt;&amp;nbsp; &amp;lt;service &lt;font color="#ff0000"&gt;name&lt;/font&gt;="&lt;font color="#0000ff"&gt;GlavsStuff.CatchAllService&lt;/font&gt;"&amp;gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;endpoint &lt;font color="#ff0000"&gt;binding&lt;/font&gt;="&lt;font color="#0000ff"&gt;basicHttpBinding&lt;/font&gt;" &lt;font color="#ff0000"&gt;name&lt;/font&gt;="&lt;font color="#0000ff"&gt;GlavsStuff.CatchAllServiceEndpoint&lt;/font&gt;" contract="&lt;font color="#0000ff"&gt;GlavsStuff.ICatchAll&lt;/font&gt;" /&amp;gt;&lt;br&gt;&amp;nbsp; &amp;lt;/service&amp;gt;&lt;br&gt;&amp;lt;/services&amp;gt;&lt;/font&gt;  &lt;p&gt;Nothing special here.&lt;/p&gt; &lt;p&gt;And thats it. A generic message handler that can accept pretty much any service call at that endpoint.&lt;/p&gt; &lt;p&gt;One more thing. This service was hosted within Internet Information Server so there was an accompanying .SVC file. If your still reading this, then I figure listing the contents of that file is probably unecessary.&lt;/p&gt; &lt;p&gt;Note: Parts of this were taken from the Generic router example on the &lt;a href="http://netfx3.com"&gt;netfx3&lt;/a&gt; site. I'd put a direct link here but things have moved around a bit and i cannot directly find it again.&lt;/p&gt; &lt;p&gt;This is currently working very well. Now I know about the inability to expose a decent set of metadata from this endpoint, but the client was not concerned about this. As long as the service call worked. In the end, I took a copy of the original WSDL and XSD documents, and placed them within the site so that they could query against that (with some minor modifications).&lt;/p&gt; &lt;p&gt;I hope this has been helpful.&lt;/p&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=5618882" width="1" height="1"&gt;</content><author><name>Glav</name><uri>http://weblogs.asp.net/members/Glav.aspx</uri></author><category term="ASP.NET" scheme="http://weblogs.asp.net/pglavich/archive/tags/ASP.NET/default.aspx" /><category term=".NET" scheme="http://weblogs.asp.net/pglavich/archive/tags/.NET/default.aspx" /><category term="WCF" scheme="http://weblogs.asp.net/pglavich/archive/tags/WCF/default.aspx" /></entry><entry><title>Reminder - WPF Training with Ian Griffiths</title><link rel="alternate" type="text/html" href="http://weblogs.asp.net/pglavich/archive/2008/01/16/reminder-wpf-training-with-ian-griffiths.aspx" /><id>http://weblogs.asp.net/pglavich/archive/2008/01/16/reminder-wpf-training-with-ian-griffiths.aspx</id><published>2008-01-16T11:26:34Z</published><updated>2008-01-16T11:26:34Z</updated><content type="html">&lt;p&gt;Just a reminder, &lt;a href="http://www.readify.net"&gt;readify&lt;/a&gt; are hosting another WPF industrial strength training workshop with &lt;a href="http://www.interact-sw.co.uk/iangblog/"&gt;Ian Griffiths&lt;/a&gt; from Pluralsight as your host. If you want to get up speed with WPF and learn to make it really work for you, this is a great course.&lt;/p&gt; &lt;p&gt;Some of the items he will cover include;&lt;/p&gt; &lt;ul&gt; &lt;li&gt;WPF Framework Architecture  &lt;li&gt;Using Controls – a new approach to UI components  &lt;li&gt;Layout  &lt;li&gt;Data Binding  &lt;li&gt;Styling and Templates  &lt;li&gt;Graphics  &lt;li&gt;Resource Management  &lt;li&gt;Building Custom Controls  &lt;li&gt;Text, Typography, and Documents  &lt;li&gt;Printing  &lt;li&gt;Building Connected WPF Applications&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;More info can be found &lt;a href="http://www.readify.net.au/applied+wpf.aspx"&gt;here&lt;/a&gt;.&lt;/p&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=5608617" width="1" height="1"&gt;</content><author><name>Glav</name><uri>http://weblogs.asp.net/members/Glav.aspx</uri></author><category term=".NET" scheme="http://weblogs.asp.net/pglavich/archive/tags/.NET/default.aspx" /><category term="WPF" scheme="http://weblogs.asp.net/pglavich/archive/tags/WPF/default.aspx" /><category term="readify" scheme="http://weblogs.asp.net/pglavich/archive/tags/readify/default.aspx" /></entry><entry><title>ASP.NET Podcast Show #107 - Paul and Wally talk about 2007 &amp; look forward to 2008</title><link rel="alternate" type="text/html" href="http://weblogs.asp.net/pglavich/archive/2008/01/08/asp-net-podcast-show-107-paul-and-wally-talk-about-2007-amp-look-forward-to-2008.aspx" /><id>http://weblogs.asp.net/pglavich/archive/2008/01/08/asp-net-podcast-show-107-paul-and-wally-talk-about-2007-amp-look-forward-to-2008.aspx</id><published>2008-01-08T06:43:05Z</published><updated>2008-01-08T06:43:05Z</updated><content type="html">&lt;p&gt;Here is the annual year end podcast that Wally and myself try and put out as a kind of summary of the year and to also highlight some of the things that may play a big part in the future.&lt;/p&gt; &lt;p&gt;&lt;i&gt;&lt;b&gt;&lt;a href="http://www.scalabledevelopment.com/ftp/ScalabilityWithDotNet.xml"&gt;Subscribe&lt;/a&gt; &amp;lt;-- What every good developer should do!&lt;br&gt;&lt;/p&gt;&lt;/b&gt;&lt;/i&gt; &lt;p&gt;Original Url: &lt;a href="http://aspnetpodcast.com/CS11/blogs/asp.net_podcast/archive/2008/01/05/asp-net-podcast-show-107-paul-and-wally-talk-about-2007-look-forward-to-2008.aspx"&gt;http://aspnetpodcast.com/CS11/blogs/asp.net_podcast/archive/2008/01/05/asp-net-podcast-show-107-paul-and-wally-talk-about-2007-look-forward-to-2008.aspx&lt;/a&gt; &lt;p&gt;&lt;a href="http://www.aspnetpodcast.com/PodcastFiles/ASPNETPodcast20080103-2007to2008.mp3"&gt;Download&lt;/a&gt; &lt;p&gt;Show Notes: &lt;ul&gt; &lt;li&gt;&lt;a href="http://weblogs.asp.net/glav"&gt;Paul &lt;/a&gt;looks back on 2007  &lt;li&gt;Paul looks forward into 2008  &lt;li&gt;&lt;a href="http://www.morewally.com/"&gt;Wally &lt;/a&gt;just rambles................ &lt;/li&gt;&lt;/ul&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=5567194" width="1" height="1"&gt;</content><author><name>Glav</name><uri>http://weblogs.asp.net/members/Glav.aspx</uri></author><category term="AJAX" scheme="http://weblogs.asp.net/pglavich/archive/tags/AJAX/default.aspx" /><category term="ASP.NET" scheme="http://weblogs.asp.net/pglavich/archive/tags/ASP.NET/default.aspx" /><category term=".NET" scheme="http://weblogs.asp.net/pglavich/archive/tags/.NET/default.aspx" /><category term="podcast" scheme="http://weblogs.asp.net/pglavich/archive/tags/podcast/default.aspx" /><category term="Web 2.0" scheme="http://weblogs.asp.net/pglavich/archive/tags/Web+2.0/default.aspx" /><category term="Silverlight" scheme="http://weblogs.asp.net/pglavich/archive/tags/Silverlight/default.aspx" /></entry><entry><title>MVP Again - woohoo!</title><link rel="alternate" type="text/html" href="http://weblogs.asp.net/pglavich/archive/2008/01/02/mvp-again-woohoo.aspx" /><id>http://weblogs.asp.net/pglavich/archive/2008/01/02/mvp-again-woohoo.aspx</id><published>2008-01-02T02:51:02Z</published><updated>2008-01-02T02:51:02Z</updated><content type="html">&lt;p&gt;Like probably many MVP's who get re-assessed this time of year, this post is an announcement of me being re-awarded MVP status for another year.&lt;/p&gt; &lt;p&gt;Big thanks to everyone who helped me get it but special thanks to Microsoft (obviously), my company, &lt;a href="http://www.readify.net"&gt;readify&lt;/a&gt; and also a friend and colleague who actually helps me more than he probably realises, &lt;a href="http://weblogs.asp.net/wallym/"&gt;Wally McClure&lt;/a&gt; (yes, that's Sir Wally for the un-initiated).&lt;/p&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=5533793" width="1" height="1"&gt;</content><author><name>Glav</name><uri>http://weblogs.asp.net/members/Glav.aspx</uri></author><category term="ASP.NET" scheme="http://weblogs.asp.net/pglavich/archive/tags/ASP.NET/default.aspx" /><category term=".NET" scheme="http://weblogs.asp.net/pglavich/archive/tags/.NET/default.aspx" /><category term="MVP" scheme="http://weblogs.asp.net/pglavich/archive/tags/MVP/default.aspx" /><category term="Community News" scheme="http://weblogs.asp.net/pglavich/archive/tags/Community+News/default.aspx" /></entry><entry><title>WCF and interoperability</title><link rel="alternate" type="text/html" href="http://weblogs.asp.net/pglavich/archive/2007/12/16/wcf-and-interoperability.aspx" /><id>http://weblogs.asp.net/pglavich/archive/2007/12/16/wcf-and-interoperability.aspx</id><published>2007-12-16T11:04:07Z</published><updated>2007-12-16T11:04:07Z</updated><content type="html">&lt;p&gt;I was trying to create an endpoint using WCF that was to look almost identical to an existing endpoint hat was created using some java tools (we were creating a new .Net app and had to mimic some older endpoints).The endpoint seemed ok at first glance according to the WSDL so I generated a client from it using the SVCUTIL.EXE tool and was going to use the interface from that to base my new service off.&lt;/p&gt; &lt;p&gt;I performed the service generation and all looked initially ok. I thought I would regenerate the proxies based off my newly created service just to make sure everything looked right, but my newly generated proxies had no methods at all.&lt;/p&gt; &lt;p&gt;Now to cut a long story short, I found a post &lt;a href="http://blogs.sun.com/arungupta/entry/wcf_interop_workaround_for_incorrect"&gt;here&lt;/a&gt; that mentions an interoperability issue with WCF and Java based services. Apparently, some Java services can generate an entry in the WSDL that either contains a blank &lt;font face="Courier New" size="2"&gt;soapAction&lt;/font&gt; attribute or none at all.&lt;/p&gt; &lt;p&gt;&lt;font face="Courier New" size="2"&gt;&amp;lt;operation name="someOperation"&amp;gt;&lt;br&gt;&amp;nbsp; &amp;lt;soap:operation &lt;b&gt;soapAction=""&lt;/b&gt;&amp;gt;&lt;br&gt; ... &lt;br&gt;&amp;lt;/operation&amp;gt;&lt;/font&gt;&lt;/p&gt;More information in this can be found &lt;a href="http://blogs.sun.com/arungupta/entry/wcf_interop_workaround_for_incorrect"&gt;here&lt;/a&gt;. &lt;p&gt;What this does though is cause SVCUTIL.EXE to generate a ServiceContract with an attribute like this:&lt;/p&gt; &lt;p&gt;&lt;font face="Courier New" size="2"&gt;System.ServiceModel.OperationContractAttribute(Ation = "", ReplyAction = "*")]&lt;/font&gt;&lt;/p&gt; &lt;p&gt;However, what it needs to be is something like this:&lt;/p&gt; &lt;p&gt;&lt;font face="Courier New" size="2"&gt;[System.ServiceModel.OperationContractAttribute()]&lt;/font&gt;&lt;/p&gt; &lt;p&gt;and then life will be good and you will get all your expected methods. So I simply took a copy of the generated interface code, and changed to suit. Since SVCUTIL.EXE is a client side tool, its not like i will be regenerating this all the time, I merely used it as a shortcut to get the interface in as quick a time as possible. This technical hiccup caused me to use more time than anticipated, but its a pretty easy fix.&lt;/p&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=5461159" width="1" height="1"&gt;</content><author><name>Glav</name><uri>http://weblogs.asp.net/members/Glav.aspx</uri></author><category term="ASP.NET" scheme="http://weblogs.asp.net/pglavich/archive/tags/ASP.NET/default.aspx" /><category term=".NET" scheme="http://weblogs.asp.net/pglavich/archive/tags/.NET/default.aspx" /><category term="Visual Studio" scheme="http://weblogs.asp.net/pglavich/archive/tags/Visual+Studio/default.aspx" /><category term="WCF" scheme="http://weblogs.asp.net/pglavich/archive/tags/WCF/default.aspx" /><category term="General" scheme="http://weblogs.asp.net/pglavich/archive/tags/General/default.aspx" /></entry></feed>