IIS 7.5 Express kills IIS 8.0 Express

By James at May 30, 2012 15:44
Filed Under: MVC, Visual Studio, Web Development

I always love to use beta software, and with that comes the occasional, “oh great, what just happened?” moment.

I repaved my main machine last week, and really loving how Visual Studio 11 is shaping up, only installed that. Yesterday, I decided I needed to install Visual Studio 2010, did that, then ran the Web Platform Installer from www.asp.net/downloads to update the installation. This included IIS 7.5 Express.

The process went fine, until today, when I started working and none of my MVC 3/4 sites would work, even small “delme” projects. The browser would show a 500 Internal Server Error, with no other messages. Bingling, for IIS 8.0 Express, I ran across this page, http://learn.iis.net/page.aspx/1286/iis-80-express-readme/#KnownIssues, which states that “Side-by-side installations of IIS 8.0 Express and IIS 7.5 Express are not supported.” It goes on to say that the IIS 7.5 Express installer doesn’t check to see if IIS 8.0 Express is installed, so, there is the rub.

Fortunately the article goes on to talk about how to fix the issue.

1. Open Control Panel –> Programs and Features

2. Uninstall IIS 7.5 Express

3. Right click IIS 8.0 Express and click “Repair”

4. Open Registry Editor and delete the following key:

HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\IISExpress\7.5
I did all that, and my pages are working again. All better now.
James

Oh, fer cryin’ out loud. Close the darn tag!

By James at July 22, 2009 09:18
Filed Under: Web Development, Ajax and Javascript

I’ve been working on a side project for a while now. A big AJAX-y web application with tons of moving parts. Last night I was getting ready to publish a version for the client to review when I noticed something odd when viewing in Internet Explorer 8. It started out peculiar, turning out to be extremely frustrating.

How a portion of the page looked in Firefox 3.5

 ff_render

 

And how the same page looked in Internet Explorer 8 (with and without Compatibility Mode) Notice how the font style changes at “State”.

ie_render

I spent a good amount of time trying to figure out what the heck was going on. Thinking I had hosed a style somewhere, I opened up Firebug and inspected the element. This is what I saw. Ok, looks normal to me.

ff_html

But using Internet Explorer’s Developer Tools, I saw this. Notice how the span does not close, and the rest of the elements are a child of the span tag.

ie_html

So, going over the HTML in the ASPX page, I find this, I hadn’t closed the span tag properly. DOH!

badcode

Fixing the markup like such, makes the page render properly.

goodcode

So, is this a bug or a feature of Internet Explorer 8? Or, a bug or a feature of Firefox 3.5?  For me the moral of the story is to make sure that all my block element tags are properly closed.

Time to code,

James

Free training from Microsoft

By James at May 21, 2009 03:24
Filed Under: Microsoft, Technology in General, Web Development

Microsoft has released two sites with tons of free training. Yup, I checked it out and it's free.

"Ramp Up", http://msdn.microsoft.com/en-us/rampup/default.aspx, covers topics from moving from ASP or PHP to ASP.NET, ASP.NET, Mobile Developent and Sharepoint.

www.msdev.com has tons of webcasts and training materials, geared towards solution providers, however the content is available for all.

Check it out.

James

 

Joining Returned SQL Data Services Responses

By James at February 05, 2009 05:08
Filed Under: SQL Data Services, SQL Services, Web Development

In preparing for my talk on SDS at last month’s Code Camp, I needed to figure out a way to join to SQL Data Services responses. I came up with this method using LINQ. I don’t know if its the best way to do it, but it works for me. I’d appreciate any feedback.

 

1. Master Page – Page_Load calls GetPodcasts()

2. GetPodcasts() gets two SDS responses, podCastDoc and guestDoc, does some LINQ, then returns a System.Linq.Enumerable

3. A ListView on the Master Page is bound to the podcast object.

 

Method GetPodcasts()

   1: public void GetPodcasts()
   2: {
   3:     AT_Podcasts at_Podcasts = new AT_Podcasts();
   4:     AT_Guests at_Guests = new AT_Guests();
   5:     XElement podCastDoc = at_Podcasts.SelectPodcasts();
   6:     XElement guestDoc = at_Guests.SelectGuests();
   7:  
   8:     if (podCastDoc != null && guestDoc != null)
   9:     {
  10:         var podcasts = from podcast in podCastDoc.Descendants("at-podcastdata")
  11:                        join guest in guestDoc.Descendants("at-guest")
  12:                        on (string)podcast.Element("GuestID").Value
  13:                        equals (string)guest.Element("GuestName").Value
  14:                        orderby (DateTime)podcast.Element("PublishDate")
  15:                        select new
  16:                       {
  17:                           PodCastId = podcast.Element("PodCastDataId").Value,
  18:                           PodCastTitle = podcast.Element("PodCastTitle").Value,
  19:                           PodCastPublishDate = DateTime.Parse(podcast.Element("PublishDate").Value).ToLongDateString(),
  20:                           PodCastAbstract = podcast.Element("Abstract").Value,
  21:                           RunTime = podcast.Element("RunTime").Value,
  22:                           GuestID = podcast.Element("GuestID").Value,
  23:                           GuestName = guest.Element("FullGuestName").Value,
  24:                           GuestCompany = guest.Element("GuestCompany").Value
  25:                       };
  26:         lvPodCasts.DataSource = podcasts;
  27:         lvPodCasts.DataBind();
  28:     }
  29: }

 

Method at_Podcasts.SelectPodcasts()

   1: public XElement SelectPodcasts()
   2:     {
   3:         XElement atPodCasts;
   4:         AT_SDSConfig config = AT_SDSConfig.Create();
   5:         Uri container = config.GetPodCastDataContainer();
   6:         string uri = container.ToString() + "?q=";
   7:         var request = AT_SDSUtils.CreateRequest(config, new Uri(uri), "GET", string.Empty);
   8:         try
   9:         {
  10:             var response = (HttpWebResponse)request.GetResponse();
  11:             using (var stream = response.GetResponseStream())
  12:             using (var reader = new System.IO.StreamReader(stream))
  13:             {
  14:                 XmlTextReader r = new XmlTextReader(reader);
  15:                 atPodCasts = XElement.Load(r);
  16:                 return atPodCasts;
  17:             }
  18:         }
  19:         catch (WebException ex)
  20:         {
  21:             AT_SDSUtils.OutputException(ex);
  22:             return null;
  23:         }
  24:     }

NOTE: at_Guests.SelectGuests() is similar, just going into the Guest Container

 

Results of SelectPodcasts()

   1: <s:EntitySet xmlns:s="http://schemas.microsoft.com/sitka/2008/03/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:x="http://www.w3.org/2001/XMLSchema">  
   2:   <at-podcastdata>
   3:     <s:Id>getting-restful</s:Id>
   4:     <s:Version>539244</s:Version>
   5:     <PodCastDataId xsi:type="x:string">getting-restful</PodCastDataId>
   6:     <PodCastTitle xsi:type="x:string">Getting RESTful</PodCastTitle>
   7:     <RunTime xsi:type="x:string">48:25</RunTime>
   8:     <Description xsi:type="x:string">Volkan talks about how to work with REST and process the XML with LINQ</Description>
   9:     <AdminNotes xsi:type="x:string">Great episode</AdminNotes>
  10:     <Abstract xsi:type="x:string">REST, XML and LINQ</Abstract>
  11:     <IsPublished xsi:type="x:boolean">true</IsPublished>
  12:     <GuestID xsi:type="x:string">volkan-uzun</GuestID>
  13:     <CreateDate xsi:type="x:string">1/23/2009 12:00:00 AM</CreateDate>
  14:     <PublishDate xsi:type="x:string">2/20/2009 12:00:00 AM</PublishDate>
  15:   </at-podcastdata>
  16:   <at-podcastdata>
  17:     <s:Id>sql-data-services</s:Id>
  18:     <s:Version>539554</s:Version>
  19:     <PodCastDataId xsi:type="x:string">sql-data-services</PodCastDataId>
  20:     <PodCastTitle xsi:type="x:string">SQL Data Services</PodCastTitle>
  21:     <RunTime xsi:type="x:string">12:35</RunTime>
  22:     <Description xsi:type="x:string">Jennifer goes into detail about how to use SQL Data Services to run a web site.</Description>
  23:     <AdminNotes xsi:type="x:string">This is the first podcast</AdminNotes>
  24:     <Abstract xsi:type="x:string">Using SQL Data Services to run a website</Abstract>
  25:     <IsPublished xsi:type="x:boolean">true</IsPublished>
  26:     <GuestID xsi:type="x:string">jennifer-louie</GuestID>
  27:     <CreateDate xsi:type="x:string">1/24/2009 12:00:00 AM</CreateDate>
  28:     <PublishDate xsi:type="x:string">1/24/2009 12:00:00 AM</PublishDate>
  29:   </at-podcastdata>
  30:   <at-podcastdata>
  31:     <s:Id>working-with-office-2007</s:Id>
  32:     <s:Version>539227</s:Version>
  33:     <PodCastDataId xsi:type="x:string">working-with-office-2007</PodCastDataId>
  34:     <PodCastTitle xsi:type="x:string">Working with Office 2007</PodCastTitle>
  35:     <RunTime xsi:type="x:string">30:45</RunTime>
  36:     <Description xsi:type="x:string">In this episode, Joe talks about a cool macro he wrote that makes all the busy work his boss has him do, a lot more fun.</Description>
  37:     <AdminNotes xsi:type="x:string">Kinda flakey, but ok to publish</AdminNotes>
  38:     <Abstract xsi:type="x:string">Office 2007 Macros</Abstract>
  39:     <IsPublished xsi:type="x:boolean">true</IsPublished>
  40:     <GuestID xsi:type="x:string">joe-blow</GuestID>
  41:     <CreateDate xsi:type="x:string">1/23/2009 12:00:00 AM</CreateDate>
  42:     <PublishDate xsi:type="x:string">2/11/2009 12:00:00 AM</PublishDate>
  43:   </at-podcastdata>
  44: </s:EntitySet>

Results of SelectGuests()

   1: <s:EntitySet xmlns:s="http://schemas.microsoft.com/sitka/2008/03/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:x="http://www.w3.org/2001/XMLSchema">
   2:   <at-guest>
   3:     <s:Id>jennifer-louie</s:Id>
   4:     <s:Version>50343029</s:Version>
   5:     <GuestName xsi:type="x:string">jennifer-louie</GuestName>
   6:     <FullGuestName xsi:type="x:string">Jennifer Louie</FullGuestName>
   7:     <GuestEmail xsi:type="x:string">jennifer@jennifer.com</GuestEmail>
   8:     <GuestCompany xsi:type="x:string">Louie Software</GuestCompany>
   9:     <GuestBio xsi:type="x:string">Jennifer is a .NET Rock Star. She's really cute and hot!</GuestBio>
  10:     <PublishEmail xsi:type="x:boolean">true</PublishEmail>
  11:   </at-guest>
  12:   <at-guest>
  13:     <s:Id>james-johnson</s:Id>
  14:     <s:Version>50404939</s:Version>
  15:     <GuestName xsi:type="x:string">james-johnson</GuestName>
  16:     <FullGuestName xsi:type="x:string">James Johnson</FullGuestName>
  17:     <GuestEmail xsi:type="x:string">james@james.com</GuestEmail>
  18:     <GuestCompany xsi:type="x:string">Duringlunch</GuestCompany>
  19:     <GuestBio xsi:type="x:string">James is a .NET Developer who has been writing software since punch cards. He often remembers the time when his Computer Science PhD project got scattered to the wind, when he stumbled across a brand new orange screen monitor and his breath was taken away.</GuestBio>
  20:     <PublishEmail xsi:type="x:boolean">true</PublishEmail>
  21:   </at-guest>
  22:   <at-guest>
  23:     <s:Id>volkan-uzun</s:Id>
  24:     <s:Version>49928700</s:Version>
  25:     <GuestName xsi:type="x:string">volkan-uzun</GuestName>
  26:     <FullGuestName xsi:type="x:string">Volkan Uzun</FullGuestName>
  27:     <GuestEmail xsi:type="x:string">volkan@volkan.com</GuestEmail>
  28:     <GuestCompany xsi:type="x:string">Uzun Enterprises</GuestCompany>
  29:     <GuestBio xsi:type="x:string">Inland Empire .NET User's Group Most Valuable Member - 2007/2008. LINQ Expert. Nice Guy.</GuestBio>
  30:     <PublishEmail xsi:type="x:boolean">true</PublishEmail>
  31:   </at-guest>
  32: </s:EntitySet>

 

Back to the LINQ which does the join

   1: var podcasts = from podcast in podCastDoc.Descendants("at-podcastdata")
   2:    join guest in guestDoc.Descendants("at-guest")
   3:    on (string)podcast.Element("GuestID").Value
   4:    equals (string)guest.Element("GuestName").Value
   5:    orderby (DateTime)podcast.Element("PublishDate")
   6:    select new
   7:   {
   8:       PodCastId = podcast.Element("PodCastDataId").Value,
   9:       PodCastTitle = podcast.Element("PodCastTitle").Value,
  10:       PodCastPublishDate = DateTime.Parse(podcast.Element("PublishDate").Value).ToLongDateString(),
  11:       PodCastAbstract = podcast.Element("Abstract").Value,
  12:       RunTime = podcast.Element("RunTime").Value,
  13:       GuestID = podcast.Element("GuestID").Value,
  14:       GuestName = guest.Element("FullGuestName").Value,
  15:       GuestCompany = guest.Element("GuestCompany").Value
  16:   };
  17: lvPodCasts.DataSource = podcasts;
  18: lvPodCasts.DataBind();

watch-screencap

menu-screencap

 

Again, like I said. I’d appreciate your comments.

J

Offshore Contractor Speak

By James at December 17, 2008 11:03
Filed Under: Miscellaneous, Life in General, Web Development

We work with an offshore country based at GMT + 5:30 to develop an application for us. Communicating with the contractors has been trying to say the least. Emails just don’t seem to get the point across about what needs to be done, or how I should set things up on my side. And, it seems they want me to be awake at 2:30 AM my time to answer the phone. After two weeks of trying to move the application from staging to production, with multiple points of failure, it was time for a phone call.

Ring, ring.

Me: “Hello”

Them: “Hi James”

blah, blah, blah, and niceties exchanged.

Me: “Ok, so let me get this straight. On the production machine, you want me to set the connection string to the XYZ report to the staging database? Doesn’t this defeat the purpose?”

Them: “Yes, set the connection string to the staging database.”

Me: “Are you sure? You’re positive right? This is the production server.”

Them: “Yes, please set the connection string to the staging database on report XYZ.”

Me: “On the production server?”

Them: “Yes on the production server, set the connection string to the staging database.”

(this isn’t going well)

Me: “Ok. Then anything else?”

Them: “Yes, when we move to the production server, make sure to change the connection string to the production database.”

Me: “Sigh….”

BizSpark – Free Software for Startups

By James at November 06, 2008 02:41
Filed Under: Web Development

Microsoft just launched a new site aimed at helping out startups develop their ideas into innovative and kick ass products. Just like Windows Azure will help in keeping costs down for the new businesses and their IT infrastructure, BizSpark eliminates the high costs of purchasing software, and frees up the creativity to build out the ideas.

Of course there are some “gotcha’s”, but they appear to be pretty minimal.

More information can be found on the Microsoft Startup Zone site. http://www.microsoftstartupzone.com/BizSpark/Pages/At_a_Glance.aspx

I love the direction that Microsoft is leaning towards. Go check it out!

James

Is this being too much of a geek?

By James at November 02, 2008 06:57
Filed Under: Web Development, Life in General

With the announcement of Windows Azure, lots of people started grabbing domains relating to Azure. How geeky is this?

00AFFF.com

Guess who owns it?

Interestingly enough, Microsoft registered azure.com 14 years ago.

James

My SQL Fire Starter Interview

By James at June 05, 2008 03:13
Filed Under: Web Development, Inland Empire .NET UG

When I presented at SQL 2008 Fire Starter last May, my good friend Geoff Emery interviewed me for TechZulu.

So, for your geeky, drawling enjoyment... I give you this....

 

My Homies

By James at May 27, 2008 06:12
Filed Under: Life in General, Web Development

As I mentioned in a previous post, I presented at the SQL 2008 Firestarter event. What I didn't mention was a story about a bit of metaphysics and a prime example of how the Universe looks out for those believers.

Working on Latina Business.NET with Carmina, I ran across, at one of our customers, a toy machine that sold little plastic "homies". I thought they were cool and one day went with a ton of quarters and bought as many as I could. They all sit on my monitors and inspire me when building a web site for one of our customers. These little plastic figures are great. With a lot of detail, and fantastic expressions on their faces, having them look down on me while I'm working, gives me the ideas to build a great bakery, jumper, party supply or mercado web site.

I was having problems getting my site together. Computer issues, bits changing, work things, you name it, I had to deal with it. But what got me through were my homies. They kept staring down at me, and settled me down. I got my stuff together and was ready for the next day.

I packed my stuff up the night before and was ready to roll early. As I was heading downstairs to leave, a voice in my head said "take us with you". Usually when I'm heading out, all I can think of, is traffic, being on time, whatever. But this time, I stopped, looked at my system and said to myself "OK". I scooped up the two homies that always seem to call to me; my first one, and old dude sitting in a chair, and a crazy looking one selling bags of oranges.

I got to the event site without a hitch and things went smoothly. As it turns out I was the scheduled to be the first presenter for the Developer's Track. Taking a few minutes to check out the meeting room and setup, I did so, and took out my Old Dude, and Orange Guy, putting them on the podium. Not blatantly so, but in a position for them to watch over me unobtrusively. I was just getting ready to start my presentation, when I was interrupted that I needed to move rooms. A bigger room. So many people wanted to see my presentation, the organizers actually moved me to a bigger room.

I packed up my stuff, put Old Dude and Orange Guy in my shirt pocket, and moved over to the big place. Nice. My presentation went great; no issues, the demo gods where nice to me, intelligent questions were asked, and I got not one, but two rounds of applause. All the time my homies were watching me.

I head back to the speakers room to see what is going on. My two friends Geoff Emery and Matt Penner are having major problems with their demo, and their machine. No Internet connection, SQL Server is giving them fits, PowerPoint slides are jacked up. The demo gods are not happy. As I set my bag down and get behind my buddies, I fold my arms (what I usually do when concentrating) and I feel two little objects in my shirt pocket. My homies!

I put Old Dude and Orange Guy on their laptop, mostly just for grins, but then something amazing starts to happen. Things start coming together, Geoff decides to use his cell phone for connectivity, the machine decides to behave, both Geoff and Matt calm down. Their presentation is right after lunch. And they just rock. No more problems, no more issues.

In thinking about this I'm looking at my homies and see "HOMIESHOP" on the back. Doing a quick search I find www.homiesworld.com, with complete listings and descriptions of all the homies figures made so far.

Actually Orange Guy is named Orange Vato and Old Dude is Wizard. Read their descriptions, especially Wizard's and see if they make sense to you after this story.

Browsing around the Homies site, I really started liking it. They have created all these great characters, embracing their differences, while ending each description on a positive note.

You just gotta love your homies.

Firestarter 2008 ADO.NET Data Services Slides and Code

By James at May 18, 2008 09:47
Filed Under: Web Development, Microsoft

Yesterday I gave my presentation on ADO.NET Data Services at the Firestarter SQL 2008 event at the Microsoft Training Center in Irvine. I had a great time presenting, they even had to move my group to a bigger room, and it more than made up for the stress of trying to prepare a presentation with fluidly changing bits.

For your pre-beta, pre-CTP enjoyment I give you my slides and code firestarter-adodataservices.zip (588.30 kb)

If you have questions, drop me a line,

James 

About the author

James James is a five time and current Microsoft MVP in Client App Development, a Telerik Insider, a past Director on the INETA North America Board, a husband and dad, and has been developing software since the early days of Laser Discs and HyperCard stacks. As the Founder and President of the Inland Empire .NET User's Group, he has fondly watched it grow from a twice-a-month, early Saturday morning group of five in 2003, to a robust and rambunctious gathering of all types and sizes of .NET developers.

James loves to dig deep into the latest cutting edge technologies - sometimes with spectacular disasters - and spread the word about the latest and greatest bits, getting people excited about developing web sites and applications on the .NET platform, and using the best tools for the job. He tries to blog as often as he can, but usually gets distracted by EF, LINQ, MVC, ASP, SQL, XML, and most other types of acronyms. To keep calm James plays a mean Djembe and tries to practice his violin. You can follow him on twitter at @latringo.

And as usual, the comments, suggestions, writings and rants are my own, and really shouldn't reflect the opinions of my employer. That is, unless it really does.

James Twitter Feed

Recent Comments

Comment RSS

Month List