Thursday, April 30, 2009

I have spent about four frustrating hours trying to get my Server 2008 to have the latest .Net on it. After trying to install the dontnetfx35.exe manually and it failing and reading the Microsoft blog that I should install a hot fox and if that failed I should repair my whole installation. So dutifully I did this; still the same problem!!

So I stuck with it and followed the “System Update Readiness Tool” and let it scan my component store. Whilst it was doing this I learnt about the new way that Vista and Server 2008 handle OS updates here. After the tool had run I followed the instructions and looked in the log files for any errors and low and behold it told me that it was missing a manifest with wcf, which I thought would be the reason why it could not install the latest .Net.

So armed with this looking in the registry (from Aarons post), I find the missing package that should have installed the wcf manifest and it gives me a Microsoft Knowledge Base (KB958481). Now I need to install MSU into Windows 2008 as it is not liking the MSI’s as they have blocks in them in order to check what version they are being installed on. But if you look at this update for dotnetfx35 you will see that it is made up of three separate updates – one of them .Net 2.0 which I need. You can download this here. So I install these two standalone patches and re-run the CRU check (1st stage). It has removed my six missing dotnet manifests, but added a whole bunch of new ones!

I need .Net 3.5 on this machine as I want to put SQL Server on this machine and I am getting frustrated as this has been about 6 hours! Then a brainwave, what about the Visual Studio WCU (Windows Component Update), so I stick the Visual Studio 2008 DVD and navigate to

Ok – After all of this – the simple thing to prevent all of this is not to setup IIS before you have installed the dotnet3.5 service pack on Windows Update. I found the best way to solve all of this was to just re-install the operating system. Leave it running over night and INSTALL WINDOWS UPDATES as the very first thing

Monday, April 27, 2009

TFS 2008 SP1 will not work with SQL Express 2008 as Express does not have Agent enabled.

You cannot upgrade from Express 2008 to the Standard 2008 as the setup program uses the shell of the installed instance. Instead you have to remove all instances (you can leave the shared tools installed) and then re-run setup from you Standard 2008 setup program

When TFS 2008 SP1 installs it assumes that your Analysis Service is on the default sql instance – mine wasn’t. You will need this to change your TFS setup to work.

It’s always wise to check that your client is Sql 2008 when you decide to install your server with no interface. I decided to have a light weight server and then had to upgrade my laptop as SQL Server 2005 obviously can’t connect to SQL Server 2008.

SQL Server 2008 shared tools need SP1 of Visual Studio installed!

You need over 3GB to install the Service Pack and that isn’t going to happen when you only have 2Gb free

Saturday, April 25, 2009

I have just spent a few happy days investigating Server Core and was looking forward to have a clean OS with no Internet Explorer. However I never realised that .Net would be able to be installed on this version of the Operating System. How crazy is that?!?! So you can have a nice IIS webserver running PHP, but then not run ASP.NET apps? That is ludicrous!

Whilst I was playing with this server, I was interested in having a baseline image of my server as I played with the new features. However everything I read said that I could use WBADMIN to run a backup. I typed it from the command line and it wasn’t there!

So whilst doing some searching about IIS I came across the solution. I saw this post about Role Management Tool.

From a previous post you will see that I destroyed all my servers and started to learn something about Windows 2008. So now my new 2x512Mb RAM sticks have arrived for my K7N420 Pro Motherboard. Now I could load Windows 2008 on it as the minimum is 512Mb RAM for this OS. I thought let’s install the new “Server Core System”, which to be fair was extremely quick to install and had me with a log on screen quite quickly.

However, I log in, change the password (its blank as default) and then suddenly release I don’t even have a GUI. Cool I thought, I only want this server to run a DB and TFS Server. So let’s configure it.

1) Let’s give it a name, type the following in the command window

hostname

which should give you something daft like

win-egmik5j3f4m

Not exactly the best machine name, so type the following (where Simain is going to be my machine name). I always like to reboot after a name change (old habits!)

netdom renamecomputer win-egmik5j3f4m /NewName:Simian /REBoot

2) Next I check the network settings so that I can use the GUI of my laptop, so I check the settings

ipconfig /all

and notice that there are no IP addresses or no network configured at all. So next lets see what interfaces are defined.

netsh interface ipv4 show interfaces

So this tells me I have “Local Area Connection” and some Loopback pseudo interface. Make a note of the index of your interface as you will need it later

Now I assume that I need to configure the Local Area Connection as it states it is DHCP, and I wanted my server to have a static IP.

Now all I have to do is change my DHCP server to give out IP from a range of 3 onwards, so that I never get a conflict.

So, now I have a machine on the network, I want to unplug all the peripherals and connect to it via Remote Desktop (mstsc). Let’s tell the registry and the firewall to allow remote desktop connections.

It appeared that my on-board NIC was not working as my new installation would not recognise it. So I took my “3C905C-TX-M Etherlink 10/100BT PCI NIC w/Management” from a server that was running Server 2003 and I knew was working. Plugged it in and it still did not recognise this one.

Now the Vista drivers are different so I tried to download some drivers on the net, I copied them onto the new server and ran the exe. Still didn’t recognise the NIC after a reboot. So I went to the extracted location of the R41104.exe and navigated to

Bare in mind that this exe tries to extract the drivers to a Dell Location. Mine is not a Dell, so I extracted them to a “Drivers” folder.

x:\Drivers\R41104\Windows\Update\Source

Then type in the following command.

pnputil –i –a W9X90XBC.INF

My network is all up and running. I might go and see if this works with the on board nForce NIC

I originally installed Server 2008 from XP and installed it on a different partition and everything worked fine. However, I nuked the machine as I wanted to get rid of the XP Partition and I accidently lost the MBR (Master Boot Record).

So after trying to install Vista directly from the DVD. I kept getting the message above.

After a lot of research it ended up being that a Samsung SD-604 DVD has problems without the correct device drivers. However it was not listed here.

So the trick is to boot off the DVD and get to Boot Strap to recognise all your drives. Then say that you are going to repair your machine and navigate to the Command Prompt. Copy the DVD onto a folder called E:\Windows2008Setup and then install it from this command prompt.

Thursday, April 9, 2009

Sql Server 2008 Express does not come with the built in agent that most servers do. I have a simple E-Commerce shopping cart system and I have decided to use SQL Server Express as it is free for single processor machines and I don’t need anything fancy – just a simple DB to be honest.

Saturday, March 28, 2009

Google Updater is installed when you install any Google product. It then sits in the background and checks for updates. I don’t want it to on my server. I wanted a browser that wasn’t IE 6.0 and I didn’t want the bloat ware of IE 8.0. So I installed Google Chrome as a light weight browser, that would not constantly require Microsoft Updates.

So how do you get rid of the Google Updater?

1) Go to Scheduled Tasks.

Either by Control Panel –> Scheduled Tasks

Explorer –> Windows –> Tasks

2) You will see the Google Updater sat there. It will start a process when the processor is Idle for 10 mins. Just delete this task and Google wont update anymore.

I initially thought that I could take the disks out of the P6DBS and undo the Caddy and just copy the data onto my laptop. I forgot the old IDE vs SCSI differences (http://www.mindconnection.com/library/computertips/ide-scsi.htm). But I was reminded about the beauty of SCSI and the way you can just “span” disks together to be seen as one by the operating system.

I stole the memory from the 6BTA3 to boot the P6DBS. I noticed that although it had 5 HDD, it only had power cables for 4 devices. So the first step was to copy all the data onto my Western Digital My Book (http://support.wdc.com/product/spec.asp?groupid=110&lang=en&print=y) I always thought 1 Tb of data was overkill, but I am slowly filling it!

After I had copied 16Gb of data of 2 of the drives, I noticed that my P6DBS was a dual processor motherboard, I decided to take the Pentium III out of the 6BTA3 and plug it in. It worked! It just said that I had 2x Pentium II. Oh well, wasn’t even expecting it to work to be honest! Then the first mistake – flashing the BIOS!!!

I went to SuperMicro (http://www.supermicro.com/support/bios/archive.cfm) site to get a new BIOS and used (http://www.bootdisk.com/) to create a Boot disk. Well that completely fried my machine and it constantly beeped after turning it on. Which according the web was the Power Unit failing (http://www.wimsbios.com/faq/solveamibiosbeepcodes.jsp). So I ripped the Power Supply Unit (PSU) out of the 6BTA3 (that ATX case was just a motherboard now!) and used that. This made the constant beeps turn into 7 beeps (apparently the graphics card was now not seated), and after taking out the memory it had a different number of beeps! So I thought, I need to recover the BIOS.

I followed this (http://www.wimsbios.com/faq/howtorecoveracorruptbios.jsp) guide and ended up setting the motherboard jumper and even took the CMOS battery out and left it over night (was 3am by now!). By this time frustration made me read the manual and release that I should have renamed the backed up BIOS (super.rom). I wish I had followed the instructions to the letter!!

So now I had no way off renaming the rom file as I needed to boot the P6DBS and hold down CTRL and HOME with the floppy disk in and it should reflash the drive reading the super.rom file.

So onto destroying the other machine so that I could use the floppy drive!

Wednesday, March 18, 2009

It has long annoyed me taken other frameworks that need config sections defined and spending the time copying the sections over, it would be so much easier if the Framework told you what bit of configuration it was trying to load. So I always use this abstract class for all of my config sections.

Next derive from this class rather than the .Net Framework class. e.g.

public class EmailTemplatesSection : SimianConfigurationSection

Once this has been completed your application will report a simple configuration exception if it cannot find your section in the config file. This takes 5 minutes to implement, but helps so much when you are configuring frameworks.

This then allows a really simple pattern when you want your configuration section.

Monday, March 16, 2009

Extension methods are so cool in your web layer so that you can easily convert your things between Json and your object. All you have to do now is decorate your classes with the DataContract/DataMember attributes. How simple is that?

Wednesday, February 25, 2009

Designing and Implementing Controls For 70-564 Exam (13 percent)

Choose appropriate controls based on business requirements. May include but is not limited to: user controls, server controls, built-in controls, custom controls, third-party controls, Web parts Design controls for reusability. May include but is not limited to: user controls, server controls, inheritance for changing behavior Manage states for controls. May include but is not limited to: control state, view state, accessing form elements Leverage data-bound controls. May include but is not limited to: use gridviews, use sorting and paging callbacks when available, when to use custom sorting and paging, server-side pagination Choose appropriate validation controls based on business requirements. May include but is not limited to: server-side page validation (Page.IsValid), custom validator, validation groups, validation summary Identify the appropriate usage of ASP.NET AJAX. May include but is not limited to: implementing partial page updates with update panel, using ASP.NET AJAX controls, script services Manage JavaScript dependencies with server controls.

Designing the Presentation and Layout of an Application For 70-564 Test (16 percent)

Design complex layout with Master Pages. May include but is not limited to: strongly typed master pages, nested master pages Plan for various user agents. May include but is not limited to: markups for different browsers for mobile devices, screen readers, accessibility Design a brandable user interface by using themes. May include but is not limited to: shared themes across multiple applications, run time master page selection Design site navigation. May include but is not limited to: when to extend site map provider, treeview menu vs. site map path, programmatically manipulating site map nodes, overriding menu rendering by using control adapters, filtering site map nodes based on user roles Plan Web sites to support globalization. May include but is not limited to: custom resource provider vs. resource files, localize applications

Accessing Data and Services For 70-564 Test (18 percent)

Plan vendor-independent database interactions. May include but is not limited to: IDBconnection, IDBcommand, IDBadapter, IdataReader, Datareader vs. dataset Identify the appropriate usage of data source controls. May include but is not limited to: SQLDataSource, ObjectDataSource, XMLDataSource Leverage LINQ in data access design. May include but is not limited to: LINQtoSQL, lambda expressions, LINQtoObjects, LINQtoXML Identify opportunities to access and expose Web services. May include but is not limited to: WCF, ASMX, REST

Establishing ASP.NET Solution Structure For 70-564 Test (13 percent)

Determine when to use the Web Site model vs. a Web Application Project. May include but is not limited to: project file, references, namespace, user profile object, precompilation Establish an error-handling strategy. May include but is not limited to: Global.asax events, Web.config elements, TRY/CATCH blocks, error logging Manipulate configuration files to change ASP.NET behavior. May include but is not limited to: machine key, tracing, encrypting Web configuration data, custom configuration sections Identify a deployment strategy. May include but is not limited to: mangement application pools, Web deployment projects, pre-compilation, custom action classes

Design a state management strategy. May include but is not limited to: Cache, ViewState, Application object, Session object, cookies, cookieless session Identify the events of the page life cycle. May include but is not limited to: appending controls, PostBack model, accessing state, data binding Write HttpModules and HttpHandlers. May include but is not limited to: URL rewriting, SSO application, dynamically retrieve data Debug ASP.NET Web applications. May include but is not limited to: debug JavaScript, tracing, debug tools in IDE, examining HTTP headers Plan for long-running processes by using asynchronous pages. May include but is not limited to: AddonPreRenderCompleteAsync, RegisterAsyncTask

Applying security principles For 70-564 Exam (23 percent)

Identify appropriate security providers. May include but is not limited to: membership, role, profile, extending custom providers Decide which user-related information to store in a profile. May include but is not limited to: create user profile properties, extend membership objects, custom types Establish security settings in Web.config. May include but is not limited to: identity/impersonation, authentication, authorization (location nodes in Web.config) Identify vulnerable elements in applications. May include but is not limited to: SQL injection, cross-site scripting, protecting against bots Ensure that sensitive information in applications is protected. May include but is not limited to: hash and salt passwords, encrypting information

Monday, February 9, 2009

I thought I would share my ideas on regular expressions. What I don’t like about the RegularExpressionValidator is that you have to repeat your regular expressions over and over again. It would be so much better if you could place them in a single place. So I thought I would write about a solution I came up with a few years ago. So the first part is the list of Regular Expressions. I like the idea of putting them in their own config file.

The section allows us to have our own class that represents regular expressions. The interesting parts of the regular expressions are

The & is represented as a a escaped &amp; as it is in XML

We only have to define things like FirstName once and if the customer changes their mind, we change it in one place.

The password is minimum of 6 in length and must have an upper case, a lower case and one digit.

Most of the regular expressions allow for é and á and various other common accents

The post code has gone through lots of testing with customers and is the best I have found.

I realised that over the years I have never blogged any of my work as I never had time. So now I intend to address this matter and place little utilities and snippets up for other people. First I wanted to make all of my code look nice and neat, so I started looking at the following blog.