Speaking At Tallahassee, Fl. .Net User Group May 1, 2008

I will be heading back to Tallahassee, Fl. tomorrow to speak at the Capital City .Net User Group about WF. I was just there last week speaking at the Architecture SIG on tips for gathering requirements and designing architecture, however this week I will be discussing and demonstrating how to complement existing internal frameworks by migrating to Windows Workflow. My examples will focus on integration with current services, using transactions, implementing policies, persisting and tracking workflows and finally I will wrap up with an example of hosting WF within WCF.

If you are in the Tallahassee, Fl. area, please drop by. You can register here.

Save on Orlando's VSLive 2008 Registration

I can help you save on registration for VSLive! Orlando 2008! Attendees who register for VSLive! Orlando using priority code SOWHI will receive the Gold Passport all-access pass for just $1,895, a savings of $300.00 off the standard price. Register today!

Experiencing MVP Summit 2008

I finally made it to Seattle, Wa this morning for Microsoft's MVP Summit, and I must say that Microsoft knows how to host an event. Everything has been first class. I have met a bunch of really nice fellow MVPs and finally Mark Clagett, our MVP Lead for Connected Systems...I have never felt so much at home.

While adjusting to the time change this morning of about a 3 hour difference, I went ahead and made my schedule for today based on some open slots that we could choose from on certain topics of interest. One of the sessions I attended was open panel and invoked such a discussion that they decided to repeat it into the next hour of sessions. Little did I know I was going to be asked to facilitate the topics and run the 1 1/2 hour session...What an honor but also quite nerve racking since it was "spur of the moment" and I was speaking with fellow MVPs. After the session was over, I found out a Microsoft employee was tucked in the corner during the session, when he introduced himself and congratulated me on doing a good job. This was very rewarding!

Jacksonville,Fl. Architects SIG Meets April 22, 2008

Our local architect SIG will meet April 22, 2008 and we will have one of our own, Gábor Lipták, doing a presenation on Enterprise Service Bus(ESB). Here are the bullet points that will be covered.

  1. ESB Technology
  2. ESB Functionality
  3. ESB Patterns
  4. Custom Services
  5. ESB Clients
  6. Hands-on demo of Sonic Workbench. The software site is at: SonicSoftware

Please register here and drop by if you are in the Jacksonville, Fl. area because this is going to be a very interesting topic. Directions to this event can be found in the registration.

Speaking At Tallahassee, Fl. Arch SIG April 24, 2008

The Tallahassee Arch SIG has changed their meeting date this month because of some minor confusion(probably my fault). It seems they had me scheduled to speak April 17, 2008 however that did not fly with my schedule because I will be in Redmond that week for the MVP Summit. So to prove how great those guys are, they decided to change their meeting date to accommodate my short-comings.

April 24, 2008 I will be speaking on how to make projects successful, with a presentation titled, "Requirements To Architecture In 60 Minutes". This presentation was a huge success at Jacksonville's Arch SIG, so I figured I would share it with Tally. Please come by and check out the presentation if you are in the Tallahassee, Fl. area that day. You can register here. Here is a description of what I will be speaking on...

What are the steps for successfully architecting a solution? What makes software projects successful? Have you heard these questions before? In 60 minutes, I can show and tell you what makes software projects successful from gathering requirements to providing a stable architecture! This presentation will give you a better idea as to the processes that should be followed and artifacts that should be produced to be make a project 360 degrees successful.

WF/WCF Enterprise Solution In Final Stages

It has been 6 crazy months, but my team is finally getting notification that our maintenance solution is almost ready for production. In a nut shell, a Florida agency needed a maintenance solution to manage maintenance for dorm rooms internally and externally to its tenants. For example, if a tenant had a leaky faucet, he or she could punch out a maintenance request and it would get assigned and worked, with the tenant being able to verify the request's progress. The cool thing is that the dorms have visually impaired tenants so it was real important to make sure the interface was not only 508 compliant, but added custom functionality to make the UI even more user-friendly. Other than making sure that HTML was well formatted with metadata, we also used AJAX to take care if postbacks. One scenario called for building custom cascading dropdowns that were fed via SQLServer. In fact, the agency used this functionality as a standard for other applications.

In addition to being 508 compliant, the solution also called for the ability to manage a maintenance request. This is where WF was used to handle these long running processes. Here is the flow

  1. Maintenance request is created.
  2. Maintenance request is assigned.
  3. Maintenance work is completed.
  4. Maintenance work is approved.

After a request is created each of these states could only be changed based on the role of the user logged in. The roles were as followed...

  1. Requestor - Requests maintenance
  2. Supervisor - Assigns work and approves the work
  3. Staff - Completed the maintenance work provided within the request.
  4. Admin - God rights(could do most of the above)

However we also used policies for when a request could transition. For instance,

  1. A role could not create and assign a request to themselves.
  2. Work done by a supervisor or staff could only be approved via another supervisor or admin, however even an admin could not work and approve maintenance for a single request.

I could go on and on about the business rules of this solution and how WF simplified the requirement, however the important part is the role that WF played with helping us meet our deadlines through

  1. Automation
  2. Tracking
  3. Simplicity of modeling the process.
  4. Flexibility as business rules changed.

The true art of WF being a framework can be observed by doing a project of this size, because you see where all the pieces fit. From changing the flow to changing the business rules via policies, everything is compartmentalized so you can specifically go to the modulated area to implement or manage change.

This project took a ton of my time and soul to architect and build, but don't they all? Especially when you build something that is used for such a tremendous cause. I will be speaking at VSLive next month, and some of my experience based on this project will be shared in my presentation and demos, so if you get a chance to attend my session, come up afterwards and let me know you read this post!

Discovered Missing LINQ

As I sit here in my hotel room reading and listening to "Sweet Home Alabama", I find myself dreaming of better times. Naturally of attending last month's Architect SIG meeting, and during the end when the passing out of the SWAG books started, which Jeff Barnes generously distributed. Yeah, I grabbed the Windows Server 2008 book as many looked at me we great astonishment, however later that night as I laid staring, looking up and down on the cover of my new Windows Server 2008 book, I was wishing I would have picked the LINQ book. Just like a pretty girl which always caught my eye, but I did not have the nerve to approach, I was slowly noticing that LINQ was having that same affect on me.

Well, I still do not have a LINQ book, and yeah my Windows Server 2008 book still rests in my office, on the top bunk of my doghouse bed, however I have started doing my own research and coming to the conclusion that LINQ is something worth wild learning more about. While I already have my own framework for developing solutions, I feel that using LINQ will simplify some of the common everyday tasks. For instance, I generate my own entity objects from a database and LINQ works well with the new Entity Framework which does pretty much the same. I also generate my basic Create, Read, Update and Delete stored procedures, but LINQ provides a more flexible way of handling these common tasks. While profiling SQL Server and seeing the SQL that is generated, I feel more comfortable about how LINQ handles the queries using SQL parameters. After speaking on SQL Injection, this approach is more favored. Now all of the extra SPs that handle my basic CRUD are not needed, cleaning up the database and keeps my dependencies on my trusty DBA to a minimum. My ADO.Net plumbing code is now reduced while providing better flexibility while handing data. Most importantly, most of the additional code needed for building and returning complex entity objects is somewhat automated within LINQ, by specifying the exact data that needs to be selected.

In a nutshell, I have concluded that LINQ will allow me to focus more on business logic while at the same time handing data access. I am by no means saying that I have a less dependency of ADO.Net, however everything has its place and checking out LINQ is well worth the exploration.

Jax Architects Meets March 25, 2008

Wow, we have a great topic and presenter for this month's meeting. David Strommer will be speaking on one of my favorite topics Business Process Management! His discussion, "Understanding BPM" will focus on what defines BPM, its technology and approaches for adoption. You won't want to miss it!

Register here.

Keeping WF Runtime Alive While Hosted In IIS

There are a many benefits for hosting a Workflow Runtime through Windows Communication Foundation services in IIS. Most importantly, WCF services can leverage the functionality that IIS already does, for instance health management. IIS has the ability to recycle worker processes that enable it to run smoothly, but this can also affect long running workflows. There are some ways of getting around this, depending on how long a workflow can run, because IIS has a management tool for when it's processes get recycled. One way to do this is to recycle processes at certain times when you know client activity is going to be next to none, however if workflows are scheduled to run longer than a 24 hour period, you will still have problems.

Here is where the problem lies, when IIS recycles the runtime is stopped and not restarted, and since the persistence service is running within the runtime the polling stops for looking for expired workflow instance timers. The only hope you have is for a client to hit IIS and restart the Workflow Runtime, but for weekends and holidays, this can become a problem unless you can control a client request. There are many ways to manage the Workflow Runtime, but I am going to show you one that takes very little code. The ingredients' consist of a scripting file and Windows Task Scheduler. Here is a great link for understanding how the Task Scheduler works.

Follow these instructions for creating the script file and running it.

  1. Create a new notepad file and rename the extension from .txt to .vbs
  2. Add the following code to the file. All this code does is open Internet Explorer(IE) and call the WCF service hosted in IIS. Once the service is called IE is closed.
    Set objIE = CreateObject
    ("InternetExplorer.Application") objIE.Navigate("http://ServerAddress/Folder/ServiceName.svc")
    Do Until objIE.ReadyState = 4
    If (Wscript.Version > 5) Then
    Wscript.Sleep 100
    End If
    Loop
    Set objIE = Nothing
  3. Now that the script file is completed it can be scheduled to execute by following the instructions for setting up a task within the Task Scheduler

So getting back to recycling IIS, once you set the schedule of when IIS needs to be recycled (usually when there is no traffic), the script file can be scheduled through the Task Scheduler to run maybe a couple of minutes(30) after IIS is recycled. The Workflow Runtime is now started back up after the recycle.

Jax Architects SIG Meets February 26, 2007

If your job as a Software Architect is to research and exploit technology to help achieve business results - then you need to take a look at what has just been released in Visual Studio 2008 and the .NET Framework 3.5. Microsoft's Jeff Barnes, will be presenting on some of the many new features you need to understand and explore to be able to fully leverage these new capabilities within VS2008.

Register for this event here!

Presenting At SqlSaturday This Saturday

This Saturday I am loading up the kids and the wife and headed to SQLSaturday, in Tampa, Florida. I am speaking on "Persisting and Tracking Workflows Using SqlServer". Yeah I know... you might be wondering how WF fits into a SQL event but if you talk to DBA's like I "occasionally" do, you will quickly find out that most do not know how to deal with these runtime services, while working with applications powered with WF.

This event is free so please come by and check it out if you are in the Tampa, Fl. area!

The object with ID ### implements the IObjectReference interface

Tired of getting an error similar to "The object with ID implements the IObjectReference interface...", then try having different environments for testing workflows and another for developing them. This error is prevalent when you persist data through a workflow and then make some minor changes to it (Let's say when making a fix to a bug:) then publishing out a new workflow. The persisted data then becomes stale. It is important, for all IT development to have different environments, that way the data is separated. Once changes are made to an actual workflow in your development environment which persists data, that data should be removed, so the whole workflow can be tested again.

I was able to find a post within the forums which also may be helpful.

Tracking and Persistence On Remote Servers

Here is a post within the WF Forum, that helped me the other day. I was so used to running tracking and persistence on the same local server that when I tried to set it up remote I ran into some trouble. In a nutshell, because I use config files to setup my runtime and services, I was able to add an additional service, "SharedConnectionWorkflowCommitWorkBatchService" which got me headed back in the right direction. Jason Foster has an example of the the config here.

JaxDug's VS2008 InstallFest

Last Wednesday, the motto was, "Have laptop, get VS2008"! I attended JaxDug's VS2008 Installfest, where about 50 and some attendees who RSVP'd were able to bring their laptop to D&B's to get a 30 day, register and get a full license of VS2008 Pro. There was plenty of good fun and fellowship among geeks, with Microsoft guys, Joe Healy, Jeff Barnes and Jim Blizzard walking around helping with the install process...Well maybe just Jim;)

Many deserved Kudos to Jonathan Bates for organizing and taking care of the event!

FaultHandler's Fault Property Issue

I was trying to bubble up an error that my service passes my workflow by using a FaultHandler Activity, when I noticed that the Fault property was acting quirky. At first I could not set the fault because it was grayed out, however I noticed that the "Promote Bindable Properties" was enabled. After clicking it, a dependency property was created however I was still getting errors.

While trying to research this issue I noticed the following MS Feedback that someone posted just four days ago. Hopefully MS will respond with a workaround here soon! I'll keep ya posted.