Navigation

Search

Categories

On this page

Thousands Separator When Formatting Numeric String in .NET (C#, VB.NET) Programming
Make Your ASP.NET Application FIPS Compliant for US Government Use
Upgrading or Replacing a Motherboard on Windows Server 2003 Machine
VS 2008: Windows SDK 6.0 Needed for WCF "Service Configuration Editor" Utility
Where Are the Third-Party ASP.NET Theme/Skin Galleries?
Version 1.7 of "MP3 Player Sample for ASP.NET with AJAX" Looks Good
Making Microsoft AJAX 1.0 Redistributable with Visual Studio 2005 Setup Projects
Microsoft Ajax 1.0 Extensions: Converting Existing ASP.NET Application Into AJAX-Enabled One
Notes on Upgrading Windows XP MCE 2005/IIS5 to Vista/IIS7
Creating Web-Based MP3 Player using ASP.NET 2.0, UltiDev Cassini Web Server and Macromedia Flash Player
Problem with Macromedia (Adobe) Flash Object on the ASP.NET Page Served by Visual Studio 2005 WebDev.WebServer2.exe
Next version of UltiDev Cassini ASP.NET Web Server is available for download!

Archive

Blogroll

Disclaimer
The opinions expressed herein are my own personal opinions and do not represent my employer's view in anyway.

RSS 2.0 | Atom 1.0 | CDF

Send mail to the author(s) E-mail

Total Posts: 48
This Year: 15
This Month: 0
This Week: 0
Comments: 8

Sign In
Pick a theme:

 Saturday, July 26, 2008
Saturday, July 26, 2008 10:18:35 AM (Eastern Standard Time, UTC-05:00) (  |  |  |  )

It's much easier to read large numbers when thousands are separated by commas. But I can never remember how the numeric format with thousands comma-separated is defined for .NET String.Format() method and for the databinding. So more as a note to self, here it is:

string output = string.Format("{0:#,#}", 123456789); // Will produce 123,456,789

The same goes for data binding data sources to data controls like DataGridView. Specify format as "{0:#,#}".

Comments [0] | | # 
 Wednesday, July 23, 2008
Wednesday, July 23, 2008 1:23:18 PM (Eastern Standard Time, UTC-05:00) (  |  |  )

If your ASP.NET 1.1 or 2.0 application throws "This implementation is not part of the Windows Platform FIPS validated cryptographic algorithms" exception, the easiest way to fix is to add 
      <machineKey validationKey="AutoGenerate,IsolateApps" decryptionKey="AutoGenerate,IsolateApps" validation="3DES" decryption="3DES"/>
line to the <system.web> section of the web.config file of your application.

FIPS compliance is required for software installed on US government computers. The compliance requirement can be turned on and off.

Source: http://support.microsoft.com/kb/911722

Comments [0] | | # 
 Monday, June 23, 2008
Monday, June 23, 2008 12:43:26 PM (Eastern Standard Time, UTC-05:00) (  |  |  |  |  )

Upgrading or replacing a motherboard on a machine running Windows Server 2003 (in my case it was Windows 2003 R2 Standard Edition with Service Pack 2 x64) is relatively straightforward, and more or less works as described in the MS Knowledge Base article: you start upgrade process by running Windows setup while old motherboard is in-place, and once upgrade process reboots the machine, you intercept it by turning the computer off and replacing the MoBo, and then allow upgrade process to continue. It worked alright, and wasn't too long a process.

What the KB article didn't mention is that after the upgrade a few things may be broken or missing. In my case there were two big things broken:

  • IE was corrupted in a way that prevented downloading files by clicking a link. Page browsing still worked and "Save target as..." worked, but clicking a link that redirects to a file download resulted in the strange error message: "The requested look-up key was not found in any active activation". My way to fix it was to upgrade IE6 to IE7, but since IE7 download links were those redirect links that didn't work, I had to install FireFox, which had a link accessible via "Save target as", and then I used FireFox to download and install IE7.

  • .NET Framework 2.0 has disappeared, wracking havoc making pretty much all applications (SQL Server Management console, ASP.NET apps in IIS) not working. Fixing it was not too bad though - I downloaded and installed .NET Framework 2.0 x64, then made a couple of runs of Windows Update to ensure the server won't try to reboot soon after being brought online, rebooted the machine just in case, and that was it.

Overall entire process, although not completely seamless or worry-free, took only about an hour, not counting time required to physically replace the board.


Comments [0] | | # 
 Thursday, May 15, 2008
Thursday, May 15, 2008 3:53:38 PM (Eastern Standard Time, UTC-05:00) (  |  |  |  )

After installing Visual Studio 2008 on a new machine and starting playing with a simple Windows Communication Foundation project, I attempted to change service's WCF settings using WCF Service Configuration Editor utility (SvcConfigEditor.exe). However, I got the "Windows SDK is not installed correctly" error. "Internets" were surprisingly mum on the subject, so I had to figure out the solution myself.

To fix the problem, I had to install Windows SDK 6.0 manually. After I did that, the problem went away. Just quit Visual Studio 2008 before installing Windows SDK.

Update: Even after reinstalling Windows SDK, first time right-clicking on the web.config in the Visual Studio '08 Solution Explorer does not bring "Edit WCF Configuration" item to the menu. However, after I did Tools | "WCF Service Configuration Editor", "Edit WCF Configuration" item started showing up upon right-clicking the .config file.

Comments [0] | | # 
 Tuesday, February 26, 2008
Tuesday, February 26, 2008 2:33:32 PM (Eastern Standard Time, UTC-05:00) (  |  |  |  )

When ASP.NET 2.0 and Visual Studio 2005 came out I hoped that ASP.NET themes will be developed en masse by third parties and sold like those on TemplateMonster.com. Today, tired of ugly GridViews in my apps, I decided to find an ASP.NET theme for at least a GridView, but to my surprise, the only thing I found was this, which is not even a skin. There are millions of sites, books and blogs telling how to make themes in ASP.NET 2.0, but it looks like market for third-party templates has never materialized. Given how fierce the competition in the graphics & UI design world is, I wonder why everyone is missing a chance to take this niche. Microsoft has a few starter themes, but just a few and without live test-drive sites - one has to download and install Visual Studio plug-ins and build the site to see it in action. All this is very strange: it's hard to believe there is no business model in making skinnable themes for ASP.NET applications.

Comments [0] | | # 
 Wednesday, August 01, 2007
Wednesday, August 01, 2007 10:02:17 AM (Eastern Standard Time, UTC-05:00) (  |  |  |  )

After releasing build 1.7 of my open-source redistributable ASP.NET-based MP3 player application, I used it for a while and I am pretty happy with its stability and functionality. The design goal for the project was to demo a concept of an easily-redistributable web application for SOHO market. With unquestionable popularity of web-based applications in the business world, removing complexity of the web hosting infrastructure to make home web applications possible as a category is poised to be the next big thing.

Comments [0] | | # 
 Saturday, June 30, 2007
Saturday, June 30, 2007 5:53:12 PM (Eastern Standard Time, UTC-05:00) (  |  )

MS AJAX is great, but if you wanted to make an installable application with it, there was no way of including AJAX into your MSI-based setup project. I made a Visual Studio manifest that makes MS AJAX Extensions a Visual Studio Setup Project prerequisite:

Comments [0] | | # 
 Friday, June 22, 2007
Friday, June 22, 2007 12:01:40 PM (Eastern Standard Time, UTC-05:00) (  |  |  )

To AJAX-enable your existing ASP.NET 2.0 application follow this video. It takes only a few minutes and essentially makes you create a dummy new Ajax-enabled ASP.NET application and then copy & paste relevant pieces of its web.config file into your application's web.config.

If you are planning to use Ajax Control Toolkit, then instead of creating dummy project from the "ASP.NET AJAX-Enabled Web Site" Visual Studio project template, create the dummy project using "AJAX Control Toolkit Web Site" template. Its web.config has additional entry in the <controls> section of the web.config that will be necessary for your application.

Comments [0] | | # 
 Wednesday, May 23, 2007
Wednesday, May 23, 2007 3:20:28 PM (Eastern Standard Time, UTC-05:00) (  |  |  |  )

Although usually I prefer to make a clean installation of a new OS to lose all the junk accumulated since last OS upgrade, this time I decided to upgrade our family Media Center box instead, because unlike my desktop the MCE box has just a few basic server apps, like IIS, email server, ORB, WebGuide, and of course MCE 2005.

Overall, upgrade was a success, but most of the drivers and applications had to be either upgraded or reinstalled. There were quite a few things to take care of:

  • Running Vista Upgrade Advisor was a good idea. It tells upfront which drivers, services and application will not, or may not work. The most important thing it told me was that I don't have enough space on drive C:, so since it was still an XP I used Norton Partition Magic to increased the C: partition size by 25 GB. I also downloaded some Vista drivers before starting the upgrade just in case my network card would not work after the upgrade.

  • Although ATI Catalyst software was not among those Vista Upgrade Advisor suggested to remove, the screen resolution settings were not preserved by the upgrade process. Moreover, standard MS ATI driver didn't support resolutions required by some HDTV sets. I had to visit ATI web site and download the latest driver and the Catalyst software. Once I've done that I was able to adjust the resolution back to what it used to be.

  • MCE settings partially survived. Scheduled series settings carried over fine, but Signal settings and Guide had to be specified again by going through the setup wizard. I had my recorded TV shows location in XP MCE changed from the default. While new MCE in Vista has found them, I still had to specified the location for new recordings. Thankfully, it was easy - the UI allowing to change the location of newly recorded shows is built into Vista's MCE app. Pictures and Music location settings have carried over with no problem.

  • The hardest part was to revive ASP.NET applications and sites after IIS was upgraded from IIS5 on XP to IIS 7.0 on Vista. The hardest problem was that caused by the remnants of some old version of .NET Framework 2.0. That caused application pools hosting .NET 2.0 to crash hard on the very first request while spitting out strange errors, like "The worker process failed to pre-load .Net Runtime version v2.0." to the application log. It took me two days of Internet searching to find the solution.

    ASP.NET 1.1 applications were also all not working. I had to run aspnet_regiis.exe from the 1.1 Framework to bring them back to life.

    In many cases I had to manually ACL folders containing ASP.NET applications with access rights for "NETWORK SERVICE" user account. I also had to change anonymous authentication account from IUSR_whatever to appPool identity.

    The bottom line is migration of ASP.NET web apps was not trivial.

  • Both Orb and WebGuide stopped working after the upgrade. I upgraded ORB with no problem and uninstalled the WebGuide so I could install Vista-specific version of the WG. It all went fine - that's after I was done fixing all the IIS7 glitches.

  • dasBlog 1.9 - the software running this blog - ended up being incompatible with Vista. I had to move this blog to another server running good ole' Windows 2003/IIS 6.0. After moving the app to another server, which was free of surprises, the final challenge was to redirect links going to old blog location pointing to IIS7/Vista to the new one. Unlike IIS6, IIS7 does not have a UI where you could choose "A redirection to a URL" as a destination for your virtual directory. Redirection in IIS7 can be done but it requires running a command-line utility. Fortunately that worked.

  • Unlike IIS, UltiDev Cassini Web Server underpinning WebGuide4 went through upgrade precess as smooth as it can be.

 

Comments [1] | | # 
 Monday, March 05, 2007
Monday, March 05, 2007 6:30:06 PM (Eastern Standard Time, UTC-05:00) (  |  |  |  )
Summary

UPDATE: This sample is an open-source project now.

This article describes how to build a redistributable ASP.NET application that allows users browse remote server's file system and pick folders with MP3 files to be played by embedded Macromedia Flash-based MP3 player.


Article Sources

Download article's C# source in a form of Visual Studio 2005 Solution comprising ASP.NET application and a Setup Project. Unzip the archive to "C:\".


End Result

UltiDevMP3Player-2-Thumbnail.PNG  

After building the project you will have an MSI-based setup package that can be installed on virtually any Windows-based PC. Installed application will be accessible from inside the LAN as an intranet application without having to install IIS.


Prerequisites

- Visual Studio 2005.
- UltiDev Cassini Web Server for ASP.NET 2.0. UltiDev Cassini is packaged together with the application into the Setup.exe so that the final application would not depend on IIS being present on target system.


Let's Begin (Getting Ducks in a Row)

A few weeks ago I stumbled upon a great piece of free software:Flash-based XSPF-compatible MP3 player. When embedded on a page, it can take playlist over HTTP and play it. Second nice thing was that XSPF play list format has XSD schema available. .NET Framework xsd.exe utility allows easy conversion of XSD schemas into C# or VB.NET classes incapsulating the structure of the data defined by the XSD, as well as implementing XML serialization to and from XML files conforming to the schema. So I had an XSPF-compatible MP3 player and a free code generating XSPF-compatible XML. That meant I could easily create XSPF-compatible playlists on a fly. Only if I had free ID3 tag (MP3 file metadata) access API...

Finding ID3v2 library for .NET was harder than I expected. However search was ultimately successful. The UltraID3Lib ended up being just what I needed. It's a nice library; may be just be a bit over the top object-oriented.

Final piece is UltiDev Cassini Web Server for ASP.NET 2.0. It's necessary because first, it can be packaged and shipped along with any ASP.NET application eliminating requirement for IIS. Second, unlike IIS UltiDev Cassini service works under "Local System" account, which enables access to any local file and folder on the server. One thing to note, while this is quite convenient to have a web server running under powerful account, it may pose a risk if the application is exposed on the web. It's best to work with the application inside protected local area network.

After you have downloaded the solution, unzip it on C:\. It will create "C:\UltiDevMusicPlayerSample" folder. If you want to put it in some other folder - you can do that too - simply adjust your project debugging settings later to point to the correct application folder (see below).


Application Flow

- Application has a single page (Default.aspx) containing the player control and file a system browser (Controls/PlayerControl.ascx and Controls/PlayerControl.ascx.cs).
- After user selected a folder with MP3 files, file system browser tree gets hidden and player control is re-rendered to point to the dynamically-generated playlist representing selected folder.
- Player control requests dynamic playlist and custom IHttpHandler (AppCode/PlaylistClass.cs and AppCode/xspf.cs) serves XSPF-encoded playlist containing songs in the selected folder. Playlist contains song information retrieved from songs' ID3v2 and ID3v1 MP3 tags.
- Player plays songs one by one: requesting each one from the custom IHttpHandler (Handlers/Song.ashx) serving songs from local file system. After song started playing player also requests song album artwork (cover art) from custom IHttpHandler (Handlers/CoverArt.ashx) which serves image extracted from song's ID3v2 tag.

Debugging

I had troubles getting Visual Studio 2005 internal web server to serve Flash component. I switched to UltiDev Cassini for debugging and that has solved the problem. Debugging with UltiDev Cassini is probably a good idea anyway since the application is eventually going to run under UltiDev Cassini.

To switch to UltiDev Cassini, bring up ASP.NET application's properties, select Start Options of the left, and check "Start External Program" radio-button. Enter "C:\Program Files\UltiDev\Cassini Web Server for ASP.NET 2.0\UltiDevCassinWebServer2.exe" as the program to be used for debugging, and specify "/run c:\UltiDevMusicPlayerSample\WebApp Default.aspx 4125" (no quotes) as command line arguments. If you have unzipped solution to a folder other than "C:\", then you will need to modify c:\UltiDevMusicPlayerSample\WebApp part of the command line arguments to point to the actual application location.
VS2005DebugSettingsForMP3App.PNG


Setup Project

Unlike regular ASP.NET application, this application is using regular (non-web) setup project for installer implementation. The reason for that is the Visual Studio web setup project is actually IIS setup project. Since we are using UltiDev Cassini instead of IIS, regular setup project is required instead.

Setup project packs UltiDev Cassini into Setup.exe bootstrapper and ensures application is registered with UltiDev Cassini during installation process and gets unregistered during uninstallation.

Creating a setup project for ASP.NET application bundled with UltiDev Cassini is not complex, but if you need step-by-step guide, please refer to this walk-through.

IMPORTANT: When installing the application, don't just click the .MSI file. You will need to run Setup.exe to ensure UltiDev Cassini web server gets installed on target system. This is especially true on Vista, where clicking .MSI and running Setup.exe are not nearly as functionally close as it used to be on Windows XP.

Build & Enjoy!

Comments [0] | | # 
Monday, March 05, 2007 4:22:37 PM (Eastern Standard Time, UTC-05:00) (  |  |  |  |  )

Recently I've been working on the small ASP.NET 2.0 app that has a page containing Macromedia (now Adobe) Flash object. When I tried debugging it with Visual Studio 2005 and its internal web server, the Flash piece has never been loaded by Internet Explorer - I am not even sure whether it was the Flash player that failed to load or the .SWF file. I wonder if anyone else had this issue. I could not check which component was not loaded because WebDev.WebServer2.exe serves only local applications, and I could not use an http tracer to see which request gets stuck.

I worked around the issue by switching to our own UltiDev Cassini for ASP.NET 2.0 for application debugging. It served all the bits and pieces required by Flash without a hitch.

Comments [0] | | # 
 Saturday, February 10, 2007
Saturday, February 10, 2007 3:57:09 PM (Eastern Standard Time, UTC-05:00) (  |  |  |  )

Here's how it works: for the last two years we at UltiDev LLC work mainly on HttpVPN - our flagship product and the main reason why our company exists. Once upon a time we've decided that making a simple redistributable web server software would be a great value-added piece completing HttpVPN offering and allowing us to probe prospective market for HttpVPN, gather contact information of people who may by interested in HttpVPN and setup our QA, build and release processes along the way. The experiment turned out to be as successful and we hoped it would be. We've got about 15,000 (and counting) installed UltiDev Cassini Web Server runtimes worldwide and we are receiving overwhelmingly positive feedback from users. All this also means that about every six months we have our Cassini task tracker full enough to suspend HttpVPN work for a few weeks and do another release or UltiDev Cassini. This time was no exception.

Although we always hope to keep our Cassini mid-version upgrade development cycle limited to three weeks, it took us usual five weeks to fix, test, fix again, test again and release the latest version of UltiDev Cassini Web Server. This release had two main points of focus: to eliminate all known installation/registration hurdles and to make UltiDev Cassini compatible with all 64-bit Windows platforms. 64 bit OSes are gaining popularity very rapidly thanks to the fact that most of the recent (and even not so recent - think Pentium D) CPUs from AMD and Intel are x64-compatible. Windows Vista comes in 32- and 64-bit versions right from the start, while existing Windows XP Pro x64 and Windows 2003 Server 64-bit were somewhat obscure because they were released before 64-bit CPUs hit the mainstream. Nowadays it's pretty much impossible to buy a CPU that does not have x64 compatibility. Hoping to please Vista 32 and 64 bit users we made sure that our latest version of Cassini runs smoothly on all the latest multicore 32 and 64 bit CPUs and supports entire (reasonable) line of Windows operating systems: from Windows 2000 to Vista.

Now, whether you own an older version of our tiny but powerful UltiDev Cassini, or you never tried it - go ahead and download the latest version. If you owned old version - most of the known issues will go away (or if you had none you will be less likely to face issues in the future). If you never saw our Cassini - it's a perfect time to spend 20 minutes on something you probably will go "wow!" about. Check it out now!

Comments [0] | | #