Sunday, March 28, 2010

I am proud to have an article in Microsoft's latest BizTalk Hotrod publication

My article for using a WCF Runtime Proxy was published in the latest edition (Q1 2010) of BizTalk Hotrod.

Here is the link: http://biztalkhotrod.com/Documents/Issue9_Q1_2010.pdf. The article that I wrote starts on page 47.

In case you haven't ran across it before, here is the summary for the publication from the website.

"BizTalk Hotrod is developed and maintained as a community effort supported by Microsoft Technology Specialist Rajinder Singh and Virtual TS's Andy Morrison and Brent Anderson. The content presented here is developed by Consultants, Customers and Microsoft to help spread the BizTalk word!
BizTalkHotrod.com will pickup where the BizTalk Hotrod magazine leaves off. We will be leveraging some of the best BizTalk talent in the field to pull together a real world knowledge base, master BizTalk resource catalog as well as commentary by you. We will also be hosting monthly web casts on topics not normally addressed by the BizTalk Product Group."

Give the site a visit, there are many back issues filled with great gems about BizTalk Development by some of the best people currently working in the field. http://biztalkhotrod.com/default.aspx

I am honored to be included in this issue and thanks to Rajinder Singh from Microsoft for extending me the invitation to contribute.

Wednesday, March 24, 2010

The Phases In Scrum and RUP

I ran across a nice graphic that depicts the phases in a scrum project. Placing here for future reference :-)

Picked up from here: http://www.pss-europe.com/P478.pdf

RUP

Thursday, March 18, 2010

Dilbert on Software Requirements

This is a little old, but still mighty funny :)

Bridging the gap between Information Technology and Business

It is always a challenge for highly technical people to productivly communicate with innovative business people. The approach and language at times seems like opposite ends of the same coin. I ran across a good article that expresses some nice ideas for bridging perceived gaps. Isn't it funny how two people can be talking about exactly the same things and to them it appears that they have different opinions based on word choices, mindsets, or preconcieved perceptions :-)

Here is the top six list from the article:
  1. IT is a cost center
  2. The cheapest way is the best way
  3. IT is a back office function
  4. We speak different languages
  5. Technology is its own island
  6. Business and IT have different goals
I have seen many presentations lately .. some with quotes from Gartner reports .. that show that the industry is fast moving to bridge the past perceptions of a great divide between Business and IT and to merge the goals of both practices. It just makes more sense to both entities to integrate thier visions and communication into a more strategic vision to drive the success of the company.

Also, if you have enjoyed being in the IT bubble and have been able to build a career in that comfort zone those days are coming to an end. With offshoring and other avenues for cheaper commodity based development, an IT person in the United States will need to be able to demonstrate business value and innovation ... not just IT skills to hold their value with the company. Excellence in technological concepts and practices will only get you part of the way there ... business savvy and great interpersonal skills are going to carry as much value as deep experience in technology.

Here is a link to a very good article on the topic:

http://www.dorseyplus.com/Img/pdf/1943.pdf

Tuesday, March 16, 2010

The argument of simplicity vs. complexity

- Albert Einstein

"The significant challenges we face cannot be solved by the same level of thinking that created them.”
Also,

- Oliver Wendell Holmes

"I wouldn't give a fig for the simplicity on the near side of complexity; but I would give my right arm for the simplicity on the far side of complexity."

What the combination of the two means to me is that significant challenges cannot be solved with simple quick fix solutions.

I wish that I could take credit for realizing this, but the concept was borrowed from the book "The 8th Habit" which is Stephen R. Coveys followup to his bestselling "The 7 Habits of Highly Effective People".

I believe that this concept applies to IT Architectural and Engineering practices just as it does to business and daily life. The quickest path to solve a given problem isn't always the best. Granted, not every problem requires the complexity needed to design the space shuttle but if your companies bottom line depends on the software that you deliver you had better put the time in up front to determine the design and metrics needed to gurantee the projects success. Keep in mind though that even the most complex problems can be broken down into small enough tasks to make it palatable to development team members of all skill levels.

Monday, March 15, 2010

Why I like being a BizTalk Architect/Developer

So why is BizTalk so much fun? Well, on an average day a BizTalk Architect/Developer gets to play in some of the following.
  • Database Design and performance tuning
  • Web servers and Load Balancing strategies
  • Core operating system features such as Windows Clustering
  • Line-of-business systems (CRM, ERP .. etc..)
  • Communication channels and protocols
  • File formats and data transformation
  • XML, XSD
  • Advanced design patterns.
  • Storage Solutions and recommendations
  • Business Process design and orchestration
  • Secure Messaging
  • Systems and Application Integration
  • Network and Infrastructure design and configuration
These are things that a front-end web developer, SharePoint developer or DBA may never have or need exposure to. So, a good BizTalk Developer has to dig in deep and be able to wear many hats in a lot of specific areas.

In my opinion a good BizTalk developer needs to be equally effective in both Software and Infrastructure disciplines which means that you need lots of good tools in the toolkit and it provides a lot of nice toys for your toybox :-)

Thursday, March 11, 2010

Human-centered design meets Agile Development

Brilliant, I wish that I had thought of something similar myself :-)

Slide Presentation:

http://www.slideshare.net/mgiudice/humancentered-design-meets-agile-development-presentation-625465

Here is the associated video presentation:

http://bauhaus.id.iit.edu/externalID/presentations/drc08_mariagiudice.mov

Maybe the best approach for solid Software Development Methodology is to take the best attributes from both approaches and combine them. Just like with shoes, one size doesn't fit all. I believe that a methodology has to morph to fit both the culture and people within an organization and potentially the focus of a project whether it is strategic or tactical in nature.

My favorite slide from the presentation:





Associated Presen

An opinion on outsourcing

Not sure I agree with this in totality, but it was an intresting read nonetheless.

http://www.soc.duke.edu/GlobalEngineering/pdfs/media/FramingEngineering/InsiderHigherEd_QualvsQuan.pdf

I am a big proponent for Quality vs. Quantity in software engineering. Maybe the same applies to engineers?

Learning to keep your mouth shut

A preacher, a politician and an engineer were led to the guillotine. The preacher was asked if he wanted to be face up or face down when he met his fate. The preacher said that he would like to lie face up so he would be looking toward heaven when he died. The blade of the guillotine was raised and released. It came speeding down and suddenly stopped, just inches from his neck. The authorities took this as divine intervention and released the preacher.


Next, the politician came to the guillotine, and he also decided to die facing up, hoping he would be as fortunate as the preacher. So the blade of the guillotine was raised again and released. It came speeding down and suddenly stopped just inches from his neck, so he was released as well.

The engineer was next, and he too decided to die facing up. The executioner slowly raised the blade of the guillotine, when suddenly the engineer said, "Hey, I see what the problem is..."

SOA 2.0

Finally it seems like the ideas for creating Service Oriented Architectures and Event Driven Architectures are centering around a common theme. SOA 2.0 appears to be the marriage between the two.

I don't know about you but as a BizTalk Architect/Developer, I have been thinking in the "SOA 2.0" style for a while.  The introduction of the Microsoft ESB ToolKit 2.0 opened up BizTalk 2009 as a real contender for a very usable Enterprise Service Bus implementation.

BizTalk has always been event based due to its Publish/Subscribe pattern for processing messages. So, its not a far step for any BizTalker or developer with EAI Hub and Spoke Architecture development experience to understand how this fits in with the Event Driven Architecture model.

I think that SOA 2.0 appears to be a very logical step and a very complimentary joining of what used to be considered two differing approaches in Software Architecture.

Agile vs CMMI or Waterfall based methodologies

I can't remember where I picked this up, but I think there is a point to it:

Too many “Agile” organizations are hackers and too many “CMMI organizations are paralyzed.
People that advocate Agile tend to disdain structure.

People who support CMMI tend to be afraid of chaos and risk.

I think that the right balance for a methodology lies between the two extremes. What do you think?

Using a WCF Runtime Proxy to consume Services


Problem

If you have worked with Web Services or WCF Services for any amount of time you know that it can be difficult to keep WCF/ASMX client proxies up to date and if you have a large number of services the sheer number of proxy classes becomes hard to manage.

The following is an attempt to ease the deployment and maintenance of our Services Farm and to enable endpoint discovery using Microsoft UDDI 3.0 Services so that we aren’t bound to static hard coded web.config and/or app.config files for service binding information.

There is nothing more painful than having to update multiple client proxies if a service’s interface changes or to have to modify each process’s configuration files if you need to change the Uri for a service.

Overview

The following diagram depicts the process sequence for utilizing the Microsoft.UDDI.dll to retrieve the URI from Microsoft’s UDDI 3.0 Services repository for a simple WCF Service. The returned Uri and other configuration data is then passed to the GenericServiceGateWay class which builds a runtime proxy that allows the methods on the WCF Service to be utilized by the client application.

Solution

This is a simple solution that addresses our current needs. I can definitely see this expanding over time and becoming a richer solution that can handle more intricate configuration and security needs. I hope that this first step can provide value to you and I would be happy to hear suggestions on improving what we currently have.

Visual Studio 2008 Solution Setup

The following is a screenshot of the Solution setup. Notice that references are highlighted in red.




Prerequisite Setup

UDDI Setup


Microsoft UDDI Services 3.0 will need to be installed on a server in your environment to run the application documented in this article. Here is a summary of Microsoft UDDI Services 3.0 features copied from MSDN’s description. http://msdn.microsoft.com/en-us/biztalk/dd789428.aspx

Microsoft UDDI Services 3.0 (Universal Description, Discovery, and Integration Services) ships with Microsoft BizTalk Server 2009, and conforms to the UDDI version 3.0 specification. UDDI Services 3.0 provides the following key capabilities:

• A Web service that supports UDDI version 3.0 standards-compliant interfaces for service discovery.

• Rich role-based Web UI interfaces for service searching, publishing, subscribing, and site coordination.

• Notifications of service changes.

• Custom categorization schemes for describing service providers and their Web services in your organization.

• SDK and developer tools to facilitate the development of UDDI-integrated applications.

• A rich set of administration tools to ease the management of UDDI Services.

Some of the key benefits of UDDI Services are:
• It provides a scalable solution for organizing, discovering, reusing, and managing Web services.

• It promotes service reuse.

• It facilitates loosely-coupled service hosting environments by enabling run-time selection of, and binding to, a service endpoint.

• It provides interoperability with other UDDI standards-compliant tools.

Microsoft UDDI Services 3.0 included with Microsoft® BizTalk® Server 2009. The installation instructions and system requirements can be found at the following URL: http://www.microsoft.com/downloads/details.aspx?displaylang=en&familyid=9d1831cc-8146-486b-b489-a06a1aa2fb5b

For some great information on how to set up a WCF Service in Microsoft UDDI Services and a good UDDI overview read Richard Seroter’s article at the following URL: http://www.packtpub.com/article/soa-capabilities-in-biztalk-uddi

You will need to configure the location of PrototypeService in UDDI. I also recommend hosting the ProtoTypeService in IIS so that Visual Studio doesn't reassign port numbers at random :)

Below is a screen shot of the service set up in UDDI.


Client Application

I have created a simple Windows Forms client to utilize the GenericServiceGateWay class from the TJT.Prototypes.ServiceGateWays project to retrieve a runtime proxy to a simple WCF Service. Below is the client code to consume the GenericServiceGateWay:



.Net Components

The following section describes the components included in each project in the solution and includes the code.

TJT.Prototypes.Enums Project

WCFTransportTypeEnum.cs

This is just a simple enum class to help with setting the right string for the case statement in GenericServiceGateWay.cs.


TJT.Prototypes.ServiceContracts Project

IPrototypeService.cs

This is the service contract interface for the ProtoTypeService WCF Service.


TJT.Prototypes.ServiceGateWays Project


GenericServiceGateWay.cs

This class is one of the primary focuses of this article. The GetGenericFactoryChannel method returns a runtime proxy that can be used to bind to and execute methods on a WCF Service. The Dispose method is used for cleanup and should be called any time you are finished working with a service.


TJT.Prototypes.UDDI Project

UDDIHelper.cs

This class encapsulates communications with Microsoft UDDI 3.0 Services. See the section about UDDI configuration on how to set up the PrototypeService WCF Service so that you can retrieve its Uri. This class depends on a reference to the Microsoft.UDDI.dll that installs with Microsoft UDDI Services 3.0. This file can be located at %PROGRAMFILES%\Microsoft UDDI Services\SDK.

WCF Service

PrototypeService Project

This is a simple WCF service to test the functionality of the GenericServiceGateWay class. This service returns a string with the value that you passed to it appended to the end.


Conclusion

Maintaining app.config files and the related WCF binding information for clients to connect to WCF services in your enterprise can create a deployment and maintenance challenge for your organization. As the number of Services grows in your Enterprise, dealing with reconfiguring client’s configuration files as WCF binding properties change or as WCF Services are moved around Web Server Farms can quickly become a significant task

Also, leveraging Microsoft UDDI 3.0 Services is a great way to add a layer of Service Virtualization to better manage changing Uri’s for services. It allows you to change the Uri and/or Service metadata in one place and clients that query UDDI Services will pick up the changes and keep working without a configuration file change. This solution was a quick way for us to overcome this challenge in the short term and may provide value to you as you work to find solutions to similar problems.