Archives / 2006 / June
  • ASP.NET Podcast Show #57 - Wally on Interfaces

    Subscribe.  You KNOW you want it.


    Download.  Kinda like your father’s Oldsmobile.




    Show Notes:

    namespace CallingInterface


          /// <summary>

          /// Summary description for Class1.

          /// </summary>

          public interface ICalling


                bool GetConfig();

                bool Start();

                bool Stop();

                string Test();

                string ConfigFileLocation







    Dynamic Loading & Calling a mehod
          string strConfigFile;

          string strType = String.Empty;

          ArrayList aryListClassInfo;

          cLoader objLoad = new cLoader();

          AssemblyTypeClassInfo atci;

          strConfigFile = objLoad.GetConfigFile();

          Assembly assembly;

          aryListClassInfo = objLoad.LoadAssemblyInfoConfigFile(strConfigFile);

          aryListClassInfo = objLoad.LoadAssemblyInfoConfigFile(strConfigFile);

          foreach(Object obj in aryListClassInfo)


                atci = (AssemblyTypeClassInfo)obj;

                assembly = Assembly.LoadFile(System.Windows.Forms.Application.StartupPath + @"\" + atci.AssemblyLocation);

                if (null != assembly)


                      foreach(Type typDyn in assembly.GetTypes())


                            if ((typDyn.FullName == atci.ClassName) && (typDyn.IsClass == true))




                                        object objClass = Activator.CreateInstance(typDyn);

                                        if ( objClass is CallingInterface.ICalling  )


                                              atci.TypeOfObject = typDyn;

                                              atci.objRef = objClass;

                                              typDyn.InvokeMember("ConfigFileLocation", BindingFlags.SetProperty | BindingFlags.Default, null, objClass, new Object[] {strConfigFile}); // Set a property

                                              object Result = typDyn.InvokeMember("GetConfig", BindingFlags.Default | BindingFlags.InvokeMethod, null, objClass, null);  // Call a method.

                                              Result = typDyn.InvokeMember("Start", BindingFlags.Default | BindingFlags.InvokeMethod, null, objClass, null);  // Call another method.



                                  catch(Exception exc)


                                        Console.WriteLine("Exception: " + exc.Message);









  • WinFS standalone died, So what

    As everyone and their brother in the development community knows, Microsoft has killed off the standalone version of WinFS for Windows.  Instead, they are going to integrate WinFS with Sql Server or something else and come out with a better product that will.........blah, blah, blah.

    I honestly have to say, so what.  Personally, I am glad that they have pulled.  Have you ever used Lookout to do full-text searching in Outlook?  It is painful to see the processor on my laptop spike to 100% for hours as it tries to reindex my email.  Ever had a system run a full text index in sql server.  Thats another situation where the processor spikes to 100% for a long time (even when its setup up correctly).  Thanks, but I think I'll keep my processor.  WinFS on the desktop is probably just too much to handle for today's processors.

  • ASP.NET Podcast Show #56 - Paul on Atlas and Load Testing



    Show Notes:

    • Personal Update
      • Work with Atlas
      • Getting a 4th degree black belt.
    • Work
    • Listener shout out to Peter Tassell
    • Web Load testing
      • Load testing for 10,000 concurrent users
      • Visual Studio Team Test, Perfmon, Excel
      • Strengths/likes, difficulties
      • Why 10,000 concurrent users?
      • Ideal setup of test rig
      • Setting up controllers, test agents
      • Automated recording and gathering of test data
      • Scheduling tips

  • Code Camp Videos

    I just ran across these the other day and I have to post about.  It looks like Russ Fustino (mostly Russ) and Joe Healy are producing videos of some of the Code Camps that they are involved with.  Wow, are they into community or what?!?  I love the music that Russ puts with them.

  • Doug Turnure

    Doug Turnure, a Microsoft Developer Evangelist in Atlanta, came to Knoxville and did a talk on Multithreading in .NET.  I've always enjoyed Doug's talks and this was no exception.  In March in Atlanta, I listened to Doug talk about interfaces and really enjoyed it.  Doug takes these complicated concepts and breaks them down into really simple items.  I didn't know this, but Doug had previously worked at Developmentor.  I guess that's why he is pretty good at explaining these concepts, he has worked as an instructor doing that.  To go one step further, I think that Atlanta, which is where Doug is based, is outside of his georgraphic area as a MS DE.

    Anyway, thanks to Doug for coming to Knoxville and presenting.

  • AS400 / iSeries and .NET (ADO.NET)

    copyied from:
    I have been working with writing an interpretor for converting AS400 graphics to create images in .NET.  There is an RPG program out on the AS400 / iSeries that generates the necessary files.  There are a couple of things that I have found out.

    • You can use named parameters to call a stored procedure using V5R3 of the IBM Client Access Software.
    • If you get an error like: "The stored procedure cannot be found in SYSPROCS.  Unable to derive parameters."  This most likely means that the necessary stored procedure to map the RPG program to an iSeries DB2 stored procedure is not there.  Basically, if you can't see it in the IBM Operations Navigator, it doesn't exist.  You will need to set that up.  This may also be the case if you don't have the proper security to get at the stored procedure. Another common error that we got that was similar to the error above is:
      SQL0204 OER4016A in DIST4000C type *N not found.
      Description: An unhandled exception occurred during the execution of the
      current web request. Please review the stack trace for more information
      about the error and where it originated in the code.

      Exception Details: IBM.Data.DB2.iSeries.iDB2SQLErrorException: SQL0204
      OER4016A in DIST4000C type *N not found.

    • The iSeries uses a different set of terminology than Sql Server, Oracle, and other traditional client server databases.  This is due to its legacy of being around before the widespread use of the sql language.  As a result, the terminology is different.  There are several items of interest to not.  A "file" is a table.  A "library" is a database.  And on and on.
    • Remember that you are going through the database subsystem when you use the iSeries .NET Data Provider.  As a result, if you can't see things there or do things, you can't do anything.
    Link to the IBM ADO.NET document for their driver.

  • East Tennessee .NET User Group - Doug Turnure - "Multithreading in .NET"

    June 27, 2006 -

    The .NET Framework introduces four new and easy ways to write asynchronous code, including asynchronous delegates, thread pool queueing, timers, and creating new OS threads. It is very easy to write multithreaded code with the .NET Framework. It is not so easy, however, to write correctly behaving multithreaded code. Without understanding synchronization, data inconsistency is sure to appear over time, so it is critical to understand how to use monitors, reader/writer locks, and other synchronization techniques. Knowing when to use multiple threads is just as important as knowing how. And knowing how to properly synchronize your data is even more critical. This talk will introduce the concept of threads, and particularly how to do it safely when it is the appropriate solution.Doug Turnure is a Developer Evangelist with Microsoft Corporation, focusing on .NET technologies. He serves numerous enterprise clients as a developer, author, trainer, and occasional conference speaker. His specialties include .NET internals, memory management, and distributed communication, although he enjoys anything pertaining to .NET. Prior to joining Microsoft, he spent five years as an instructor and course author with DevelopMentor and Aggelos, Inc. His primary topics of instruction include VB.NET, C#, and ASP.NET. Doug is currently based in Atlanta, Georgia.

    Doug Turnure is a Developer Evangelist with Microsoft Corporation, focusing on .NET technologies. He serves numerous enterprise clients as a developer, author, trainer, and occasional conference speaker. His specialties include .NET internals, memory management, and distributed communication, although he enjoys anything pertaining to .NET. Prior to joining Microsoft, he spent five years as an instructor and course author with DevelopMentor and Aggelos, Inc. His primary topics of instruction include VB.NET, C#, and ASP.NET. Doug is currently based in Atlanta, Georgia.

  • COM+ in Windows 2003

    Apparently, there are some major bugs in COM+ in Windows 2003.  Not only does the application that I support and maintain (somebody else wrote it), but I just found out this week that another application that I was involved with writing that uses COM+ has problems.  Both apps ran on Windows 2000, but under Windows 2003, they both seem to have problems.  In talking to Microsoft Support, I am thinking the problem is COM+.  There seem to be too many issues listed in the Support Knowledge Base that require a call to Support for a Hotfix for my taste.

  • .NET 2.0 SP1 in 2007? - I think I agree with Frans on this one

    While I don't agree with Frans all the time, I do agree with him regarding the .NET 2.0 SP1.  Holding on shipping that until 2007 is not the best idea in the world.  What's wrong with shipping updates every quarter?  Every 6 months?  Pick your favorite regular timeframe. 

    We've never seen a SP for VS.NET 2003(for .NET 1.1 yes, but not VS.NET 2k3), which is a major problem for me given that it still reports an error when you specify the AssociatedControlId to a label.  Would someone please explain why there has been no update to VS.NET 2003?  What about the Whidbey versions of VS.NET and .NET?

  • Windows Communication Foundation (WCF) - I am not convinced yet

    When I hear someone talk about WCF, I think back to the early days of COM+ all of the time.  In 97, 98, and 99, Microsoft told everyone to use MTS, the predecessor to COM+.  Microsoft pushed this so much, I felt like COM+ was the answer to my constipation problems.  Speaking from experience, it was a total disaster.  Most applications did not need the features of COM+, yet the hype machine continued to push it on me.  It was everywhere.  "Enterprise level apps need COM+" seemed to be all that I heard for about 18 months.  Using the features of COM+, I obediently built some applications.  Each of these applications exposed the same problem in MTS, that database access results in an isolation leve of serializable by default and that the overhead of a COM+ object is not trivial. 

    Distributed transactions with an isolation level of serializable are typically pretty good for an application that must use distributed transactions, but I never saw a mention of serializable isolation level mentioned in any manual or howto anywhere.  No one talked about the issue.  We found this only from experience and only after asking questions was this finally confirmed to us.  This was a major issue.  Applications that were based on MTS that only used one database were still subjected to the isolation level of serializable and anything else a distributed transaction need (overhead?) whether or not this was needed or not.  With the introduction of COM+ 1.5, the isolation level of database operations can be changed, however, the default is still serializable (understandable, but the fact that there are options is good).  Why is this significant?  With inserts, updates, and deletes, this is not a bad idea.  Unfortunately 90+% of database operations are data reads (selects).  Why does this concern me?  Let's look at the simple statement when running within Sql Server 2000:
    "select * from table where col1=47"

    With this statement, all records where col1 is set to 47 are now locked with an isolation level of serializable.  That means that until the currently executing transaction is completed, those records are effectively locked from anyone else using them.  Yes, that includes a select.  If you look up your locking rules in Sql Server Books Online, you will find that issuing a select when the isolation level is set to serializable locks others from reading.  Additional commands are suppossed to wait, but they do not as Sql Server will throw a transaction deadlock error instead of waiting for the command to actually timeout. 

    To add insult to injury with the Sql Server problem, Oracle had its own problems with MTS/COM+.  The Oracle server at the time had a tendency to lose the thread - client association on the server with MTS.  Oracle has since introduced Oracle Services for MTS, but this occurred after we were done with out project.  In addition, connections to the Oracle server seemed to be in short supply on the MTS server.  It seems that the client connection at the time did not flow the way that things were documented.  The result was that we needed to take special care in creating our connections and handing them around within out objects.

    The next thing to encounter was the overhead with COM+.  Using these services comes at a price to setup these services for each component. If your application is only starting up one component per call, then the overhead is probably not significant vs. the entire time within the component.  What happens when some moron creates this very vertical object model that results in a large number of components (think 500-750) being created per call?  The answer:  Lots of wasted CPU time creating a context to run within.

    One of the more interesting technology decisions I saw was that people wanted to create centralized COM+ servers to handle middle-tier requests.  I can't remember if MS suggested this or not, so I am not blaming them, just remembering some thingsfrom that time.  The thinking was that if these were big enough, performance would be greatly improved because these servers were dedicated and optimized for these COM+ applications.  Wrong.  When dealing with a web application written in ASP, separating the COM+ application from the web application resulted in generally slower response and in applications that were less stable.  Why?  Network latency seemed to be a problem.  With the MTS components running on the same server as the web application, my web server was very stable.  With the MTS components running on a separate server, my web server was very unstable and had a tendency to die.

    Having shared my negative experiences with COM+, I am seeing the same marketing machine startup with regards to Windows Communication Foundation (WCF).  Everyplace I look, the marketing maching tells me that WCF cures war, famine, uphevel, and my constipation.  What am I planning on doing?  I think I am going to wait a little while to see the reaction from people that I know before I jump headfirst into WCF.  The last time, I jumped head first, I found that while COM+ was a mile wide, it was only three feet deep.  Fool me once, shame on you.  Fool me twice, shame on me.

    I am interested in this bringing together of messaging technologies, my concern is that no one has told me the price that I have to pay for this.  Tell me that and a lof of my skepticism might fall away.

  • Joe Healy

    Some of you might know Joe Healy.  Joe is a Microsoft Developer Evangelist for Florida, Alabama, and Mississippi.  I met Joe last October in Birmingham at the Alabama Code Camp.  Since then, he has been really helpful to me on.  It amazes me at how helpful he has been to me inspite of the fact that I am in Knoxville, TN, which is not in his area.  If you ever get a chance to meet this guy, it is definitely worth your time.  Joe has asked me to speak at some of the Code Camps in Florida as well as some of the User Groups there.  I really appreciate his thinking of me.  Just this week, Joe emailed me about returning the favor.  He asked if I was getting speakers for either Memphis (August) or Nashville (October) and he would return the favor by coming up if necessary.  Well, I am only a speaker at both, not an organizer or volunteer.  I thought, what a great guy and what a great gesture from Joe.