On The Technical Health Of Fabse.Net

As some of you noticed, my blog was not available for about a day. There were actually two unrelated issues in a row affecting the availability of my blog.

The first one was related to Windows Update on my VM. There was some updating done but there was an outstanding restart. This somehow broke the connectivity between WordPress and MySQL. I am using WP Super Cache as a plugin for WordPress to cache all pages locally and so this database issue was going unnoticedd to most users except the Googlebot. It looks like requesting the robots.txt is not cached at all by WordPress. Google Webmaster Tools was sending emails to me notifying me about the issue of not being able to access the robots.txt file and postponing the indexing. At this point I simply restarted the virtual machine and it worked again. Have you tried turning it off and back on again?

My blog runs on a small VM in Microsoft Azure and the Azure storage in West Europe had a reduced availability yesterday affecting the VMs as well. Whatever reduced availability means. As a matter of fact, my VM was listed as running, but I could neither access my site nor could I RDP into it.

Microsoft requires at least two running VM instances in an availability set for their SLA to kick in. I am running only a single one to safe money. So I think it was actually my own fault/risk.

Regarding the near feature, I want to look into increasing the availability while reducing costs at the same time. I will definitely write about it here.

Add Gacutil To The External Tools List Of Visual Studio

I often have the need to rapidly add my build output to the global assembly cache of .Net. You can do this using a post build event but it really is not ideal. Therefore I added the gacutil command as an external command.

If you want to do this, you first have to figure out the location of your gacutil.exe. Please open the “Developer Command Prompt for Visual Studio”. You can then type “where gacutil” and it will tell you the location(s) of your executable.


Then you switch back to Visual Studio and select the “Tools” menu. Then “External Tools…”.

Click Add to insert a new Item and set it to the following values. Please notice the different argument values for installing and uninstalling from the GAC.


Title: Install to GAC
Command: C:\Program Files (x86)\...\gacutil.exe
Arguments: -i $(TargetPath)

Title: Uninstall from GAC
Command: C:\Program Files (x86)\...\gacutil.exe
Arguments: -u $(TargetName)

…and remember to replace the location of gacutil with your own as the command.

BizTalk WCF Service Publishing Wizard: World Wide Web service (W3SVC) on host "localhost" not available.

I tried to publish an orchestration using the WCF service publishing wizard and observed the following error:


And after clicking next I only observed:


Invalid project location “http://localhost/VIP.Orchestrations.ContractPositionProcessor”.

(Microsoft.BizTalk.Adapter.Wcf.Publishing.WebDirectory.WebDirectoryException) World Wide Web service (W3SVC) on host “localhost” not available.

The following Windows component may not be installed: Application Server -> Internet Information Services (IIS) -> Common Files.

Unknown error (0×80005000)

(System.Runtime.InteropServices.COMException) Unknown error (0×80005000)

The fix is to use the Server Manager to install the IIS 6 management compatibility feature:



Restarting the publishing wizard now works as expected:


Doing Transactions In Oracle Like You Know Them From SQL Server

I know how to do transactions in SQL Server. It is really easy, at least for me. In ORACLE, the keywords are slightly different and you have to use semicolons at the end of each statement. You also have to name your transaction but an empty string will do just fine.

Compare this for yourself:

set transaction name 'mytransaction';
update mytable set somecolumn = 'some value' where id = 22;
--SQL Server
begin tran
update mytable set somecolumn = 'some value' where id = 22

Correct Parameters For The BaseFunctoid.SetupResourceAssembly Method

If you are writing your own BizTalk Functoid you have to provide information about your Ressources used to describe your functoid name, details and icon. For this task, you have to call the SetupResourceAssembly function in your functoid constructor. Okay, but what are the correct parameter values? The MSDN article is not only not good but plain wrong.

resAsmName does NOT expect the name of the assembly, but the full qualified name of your resource dictionary.

If your resource is in your Project root folder and is called “Resource.resx” and your project has a default namespace of “My.Company.SuperFunctoid” than you would provide the value “My.Company.SuperFunctoid.Resource” as the value of the first parameter.

The second parameter is the assembly, which contains the resource dictionary. Here you could do Assembly.GetExecutingAssembly() to get it.

To make this more refactoring safe, I would suggest the following call instead:

This way, you can change your default namespace without fear of breaking “magic” strings.

Published my first printed article

I published an article! Cool, isn’t it? You can find it in web&mobile developer issue 01/14 (german). It was an interesting experience writing this article as I was writing about a subject which I am interested in myself for quite some time.

I am describing a way to collect telemetry data from a Windows Phone application and sending them back to a backend service. I am focusing my article around doing this in a decoupled fashion through the usage of Windows Azure ServiceBus Queues. The goal is to get some data to get insights in the way the users use an app like “How long do they run the app?”, “How often do they start the app?” or “Did they used feature x?”.

Writing ‘throw ex;’ is almost always wrong!

So what is the difference between ‘throw ex;’ and ‘throw;’ in C#? The first statement recreates the stack trace while the latter one preserves it. Consider the following method, which will throw an exception if it gets called:

<span class="kwrd">private</span> <span class="kwrd">static</span> <span class="kwrd">void</span> Inner()
    <span class="kwrd">throw</span> <span class="kwrd">new</span> Exception();

And then you have two different methods implementing the two different coding styles:

<span class="kwrd">private</span> <span class="kwrd">static</span> <span class="kwrd">void</span> Rethrow()
    <span class="kwrd">try</span>
    <span class="kwrd">catch</span> (Exception ex)
        <strong><span class="kwrd">throw</span>;</strong>

<span class="kwrd">private</span> <span class="kwrd">static</span> <span class="kwrd">void</span> ThrowEx()
    <span class="kwrd">try</span>
    <span class="kwrd">catch</span> (Exception ex)
        <strong><span class="kwrd">throw</span> ex;</strong>

At last, you have a short console application to call both methods and print their stack trace:

<span class="kwrd">static</span> <span class="kwrd">void</span> Main(<span class="kwrd">string</span>[] args)
    <span class="kwrd">try</span>
       <strong> ThrowEx();</strong>
    <span class="kwrd">catch</span> (Exception ex)
<span class="rem">//...</span>
    <span class="kwrd">try</span>
       <strong> Rethrow();</strong>
    <span class="kwrd">catch</span> (Exception ex)

Here is the output:


As you can see, ‘throw;’ preserves the actual location, where the exception really was thrown.

There is hardly any case where you want to hide the actual location of an error, so the best is to just use ‘throw;’ as your default in a catch clause.

Things I Learned Today

I decided to just write down the stuff, I learned today in a random order, to let you know and (maybe) let you learn as well!

  • I really like the whisper sync inside the kindle apps and devices and today I learned about Calibre which can do the same thing but with many more devices. It can also convert your ebooks to the appropriate formats.
  • Even if your company uses Subversion for version control, you can still use git locally in a fully Git and Other Systems – Git and Subversion.
  • Does the new XBOX One plays XBOX 360 games? No.

Checklist For Recording Let’s Plays

My new hobby is to make let’s plays myself. Let’s plays are basically recordings of someone playing a video game and commenting on it at the same time. I really like doing it, because it is consuming media and producing content at the same time.

In my first parts, I had a learning curve which let me build up a checklist to avoid doing the same error again in the future:

Preparation before the recording

  • Camera
    • Are all the lights on? The normal webcams make better video images if there is much light around, so switch them on.
    • Do you look great (acceptable)? Many people will see you, so check yourself.
    • What is behind you? If you are not doing green screen, than you should remove everything behind you, which you do not want anyone to see.
  • Audio
    • Are there any noises? Close the windows, disable the ventilation, close the room door, wait until the children are asleep.
    • Is the mic positioning good? Try to place the mic as near to you as possible, but do not breath directly into it. Position your pop filter between you and mic (if you have one).
    • Prevent distractions! Switch off the phone, close Skype, close browser tabs which could make sounds like Facebook. Some pages have advertising with sounds as well and outlook will also receive a mail everytime Zwinkerndes Smiley
  • Setup
    • XSplit: Open it, load the right presentation for the game you are going to play. Test your shortcuts, setup sound volume and check if the correct microphone is selected.
    • The game: Start it!! Load the last save game and remember what has happened in the last part.
    • Setup the timer.

In-between the recording

  • Start the timer and the recording
  • Greet your audience
  • Tell them what has happened and what they should expect in this part but keep it short.
  • Start playing!
  • keep an eye on the timer.
  • When the time is over, find a good spot in your game to make a break and say goodbye to your audience. If you are needy, ask for thumbs up or for subscriptions Zwinkerndes Smiley
  • Wait 3 seconds after your last word and stop the recording

After the recording

  • Re-enable all distractions and open the window again, but do not wake up any children Zwinkerndes Smiley
  • Check whether the recording is appropriate for a public audience. Did someone else speak password or sensitive data? Was your desktop visible? In this case you may want to edit the movie.
  • Upload it to Youtube, but do not worry, it will not be visible right away even if your internet connection is fast.
  • Setup the title, the description and all other metadata of video.
  • Paint the video cover image and upload it to youtube as well
  • Set it to public right away or setup a scheduled release
  • Get yourself a short break and repeat with the next part

If you want to, you can have a look at me play XCOM: Enemy Unknown (german!):