Shawn Cicoria - CedarLogic

Perspectives and Observations on Technology

Recent Posts





Email Notifications

Blogs I Read



Use OpenDNS

August 2007 - Posts

Some consistency from IBM and Microsoft on ESB as a way of achieving SOA

Bobby Wolf basically points out, which many realists that have worked with ESBs, MOM, Services (SOAP) have already figured out - that an ESB is just a tool and not the answer to having a Mature SOA.  Just as Web Services (SOAP over HTTP) has been viewed incorrectly as SOA on it's own merits, ESB's are also just part of the picture.

Before you start putting all these frameworks, tools, components in place, take a step back and understand the business domain first.  As Mr. Wolf points out, and what I try to instill in any conversation first regarding SOA, first, look at the Business Domain - then, align the technologies (existing, legacy, new, WS, ESB, CORBA even) to bring you to a greater level of SOA maturity.

An ESB is just a tool, nothing more.  A good tool when done right.  And that answer is not just 42 (huh?)

ESB-oriented architecture: The wrong approach to adopting SOA

Such an ESB-oriented architecture is easy to envision, but its success is difficult to measure. What clients requesting such projects do not understand is this: An ESB-oriented architecture does not produce business value. A project based on ESB-oriented architecture needs to be made into one based on SOA-oriented architecture to help ensure that it successfully delivers business value

ESB-oriented architecture: The wrong approach to adopting SOA

Posted: 08-30-2007 7:38 AM by cicorias | with no comments
Filed under:
Who's watching the Shop? - Monster site pilfered more than once and they finally woke up...

This is a bit unsettling?  How many other "Company" have no idea if the personal information of their clients, users, partners are being taken.

The following is taken from an email sent to  users in regards to the recent uncovering of what turns out to be a serial issue with their security, quite lax apparently, for the site.

The Company has determined that this incident is not the first time Monster's database has been the target of criminal activity. Due to the significant amount of uncertainty in determining which individual job seekers may have been impacted, Monster felt that it was in your best interest to take the precautionary steps of reaching out to you and all Monster job seekers regarding this issue. Monster believes illegally downloaded contact information may be used to lure job seekers into opening a "phishing" email that attempts to acquire financial information or lure job seekers into fraudulent financial transactions. This has been the case in similar attacks on other websites.

Posted: 08-30-2007 5:59 AM by cicorias | with no comments
Filed under:
Google's entry into "SmartClient" - offline client ability

So, I was looking at Google Reader and noticed a link in the upper right -  Offline (new)..

What's that?  Turns out, Google has a project called "Gears" that provides Javascript hooks that will interface with a few locally running services: Cache, DB, and asynchronous thread pool.

This is great, cross platform too.  It's SmartClient (and no, MSFT didn't invent the term as far as I know) in essence that it also provides offline capability.  You'll still need to deal with updates, etc.

Google Gears: Enabling Offline Web Applications

Google Gears is an open source browser extension that lets developers create web applications that can run offline.

Google Gears API Developer's Guide - Home

There are a few cool things coming out in the Visual Studio 2008 Orca's release - most notably SQL Compact Edition and Sync Services.  This framework provides the offline synchronization ability for your offline clients.

Steve Lasker has been doing quite a few webcasts, posts, presentations on the subject.  Definitely check it out if you're in the Thick Client mode.  In fact, check it out if you just need to keep different persistence stores synchronized.  There's lot's there and useful outside of Smart Clients as well.  If you think about what we spend quite a bit of time when we're building applications, a good chunk is keeping multiple databases synchronized.

Steve Lasker's Web Blog

Sync Services forADO.NET and SQL Server Compact Presentation

Posted: 08-29-2007 4:24 AM by cicorias | with no comments
Filed under: , ,
Consuming WCF Services from COM using C++

A little while back Martin sent me a question on some of the examples in Chapter 10 of our book (Pro WCF).  The point of the question was how to dynamically consume a WCF services (late bind) from C++ using COM.

The root of the capability lies in the moniker implementation, which is provided for inside of System.ServiceModel.ComIntegration.  There's a series of types, attribute type as well, that the ServiceModel framework will build up the COM client along with the interfaces based upon a "GetObject" call from VB or even C++.

The thing with VB is it makes things so much easier.  So, I finally got around to fiddling with it.  I did end up with an issue, but the jist is easy to follow. 

The source code link here has a couple of samples that dynamically call a COM interface - one using the "script" moniker which is for Windows Scripting Host Components (built a whole site based upon that years ago) and WCF.

Let's take a look at calling a Scripting Component using C++ COM.  Note that the CoGetObject is a call that combines 3 distinct calls into 1 convenient method.  Take a look at the attached sample wsc file to see the inners of the component.

The script moniker is the key.  Just as we'll see in a bit the service moniker.  Both are defined in the registy under HKCR\script and HKCR\service as to which COM component implements the moniker (IMoniker) interface.

The main steps are: 1) Initialize COM, 2) GetObject, 3) Get Dispatch Interface for method, 4) Invoke interface

Sample Solution

    1 int CallWscComponent()

    2 {

    3     HRESULT hr;

    4     IDispatch* objWsc;


    6     hr = CoGetObject(L"script:D:\\Data\\Projects\\CallingWcf\\test.wsc",

    7         NULL,

    8         IID_IDispatch,

    9         (void**)&objWsc);


   11     if (FAILED(hr))

   12     {

   13         Message(TEXT("Client: CoGetObject"), hr);

   14         return(hr);

   15     }



   18     DISPID dispid;

   19     CString strFxName = "methodname";

   20     OLECHAR * szMember2 = strFxName.AllocSysString();


   22     hr = objWsc->GetIDsOfNames(

   23         IID_NULL,

   24         &szMember2,

   25         1,


   27         &dispid);


   29     if (FAILED(hr))

   30     {

   31         Message(TEXT("Client: GetIDsOfNames"), hr);

   32         return(hr);

   33     }


   35     DISPPARAMS dispparamsNoArgs = {NULL, NULL, 0, 0};


   37     hr = objWsc->Invoke(

   38         dispid,

   39         IID_NULL,

   40         LOCALE_USER_DEFAULT,

   41         DISPATCH_METHOD,

   42         &dispparamsNoArgs, NULL, NULL, NULL);


   44     if (FAILED(hr))

   45     {

   46         Message(TEXT("Client: Invoke"), hr);

   47         return(hr);

   48     }


   50 }


Now, here's an example of using an untyped proxy and Mex discovery.

The first thing is to do is build the moniker:

LPTSTR moniker = L"service:mexAddress=\"http://localhost:8899/WebService/Service.svc/mex\",\


                  contract=IMyService, \

                  contractNamespace=,binding=BasicHttpBinding_IMyService, \


Now, here's a quick walk-through of calling WCF through COM. 

    1 void CallWcf()

    2 {

    3     HRESULT hr;

    4     IDispatch* objWsc;


    6     hr = CoGetObject(moniker,

    7         NULL,

    8         IID_IDispatch,

    9         (void**)&objWsc);


   11     if (FAILED(hr))

   12     {

   13         Message(TEXT("Client: CoGetObject"), hr);

   14         return(hr);

   15     }


   17     DISPID dispid;

   18     CString strFxName = "MyOperation3";

   19     OLECHAR * szMember2 = strFxName.AllocSysString();


   21     hr = objWsc->GetIDsOfNames(

   22         IID_NULL,

   23         &szMember2,

   24         1,

   25         GetUserDefaultLCID(),

   26         &dispid);


   28     if (FAILED(hr))

   29     {

   30         Message(TEXT("Client: GetIDsOfNames"), hr);

   31         return(hr);

   32     }


   34     DISPPARAMS dispparamsNoArgs = {NULL, NULL, 0, 0};

   35     EXCEPINFO pExcepInfo;

   36     memset(&pExcepInfo, 0, sizeof(EXCEPINFO));



   39     hr = objWsc->Invoke(

   40         dispid,

   41         IID_NULL,

   42         GetUserDefaultLCID(),

   43         DISPATCH_METHOD,

   44         &dispparamsNoArgs, NULL, NULL, NULL);


   46     if (FAILED(hr))

   47     {

   48         Message(TEXT("Client: Invoke"), hr);

   49         return(hr);

   50     }


   52 }

Additional Stuff on Integrating WCF Services with COM+

In my (along with Chris Peiris) MSDN article (Integrating WCF Services with COM+), there were a few things I wanted to change, but given the edit review cycle, I decided to wait until it was published and just blog about some additional concepts.  What follows are just a couple of extra pictures that give a view of how WCF ServiceModel.ComIntegration works in regards to calling COM+ Components from WCF Clients.

Let's take a little step back to COM+ and COM+ Applications.  There are 2 types of COM Applications - Library and Server.  The former is an inprocess hosting of your COM component; the latter is hosted in a server process, generally DllHost, which hosts your library along with controlling activation, recycling, etc.

Based upon the Application type, you have a different choices for hosting the COM+ component.  The implications of each choice impact both performance (additional marshalling), manageability, and accessibility from legacy clients.

COM+ Library Package WCF Integration

The following is a quick view of what's happening with Library Packages and hosting of COM+ Applications.


When you're running the COM+ Integration Wizard from SvcConfigEditor you'll be presented with a single choice as shown below. This translates into a ComSvcConfig switch of /hosting:complus.

What are the implications of this model? Well, it's inprocess so marshalling across process doesn't happen.  Although, all the ComIntegration parts of the framework kick in.  You also have message based activation (it's hosted in IIS/WAS) so there's isn't necessarily a server process running continously.

COM+ Server Package - COM+ Hosted

When you get to Server Applications, you have a couple of options. 

The first is COM+ hosted.  This provides simultaneous access from DCOM and WCF clients.  You then control process lifetime through the COM+ configuration settings - such as run as an NT Service, etc.  You lose message based activation - You think about the process lifetime.

COM+ Server Package - IIS/WAS Hosted

The last option is IIS/WAS hosted Server Application.  This is where you get both the advantage of DCOM & WCF access along with Message Based activation - but at the expense of making a cross process call between IIS/WAS and the Server Package process.

Dia - inspired by Visio...

Check this out.  If you're still using UML based techniques for some part of your process Dia provides support

Dia is roughly inspired by the commercial Windows program 'Visio', though more geared towards informal diagrams for casual use. It can be used to draw many different kinds of diagrams. It currently has special objects to help draw entity relationship diagrams, UML diagrams, flowcharts, network diagrams, and many other diagrams. It is also possible to add support for new shapes by writing simple XML files, using a subset of SVG to draw the shape.

Dia - GNOME Live!

Skype Failure and The Microsoft connection clarified - Getting to the Root Cause of Failure

Well yesterday's bad reporting is clarified by the Skype team.  As for the root cause the Skype team squarely assumes the responsibility and doesn't point any fingers at other vendors for issues they just didn't test or code for in the scenario.  From the blog:

We don’t blame anyone but ourselves. The Microsoft Update patches were merely a catalyst — a trigger — for a series of events that led to the disruption of Skype, not the root cause of it. And Microsoft has been very helpful and supportive throughout.

It's so easy just when things don't go as expected in support of a system, or in use of a system to just stand up and scream at the first thing that you "think" it might be.  It takes more intelligent people and cooler heads to take a step back, analyze the situation, look for and find the root cause.  So many times I've seen developers, architects, project managers, etc., when things aren't working right they want to get the vendor on the phone.  Call Microsoft or PSS - we can't get this thing working (usually PSS is a terrible time suck too unless you've got the eggs lined up).

The reality is, you've probably missed something and if you take a look back things, start a root cause analysis which is usually bottoms up unless something just sticks out like a sore thumb -- sometimes that means checking the power switch.

I can recall years ago when I worked for a division of SunGard (called DML at the time) and the president of the group comes running into our area (the pit where all us developers were).  MY MACHINE IS RUNNING SLOW!!! I HAVE NO IDEA WHAT HAPPENDED.

The first thing out of a Elias' mouth, a co-worker, was he probably caught a virus either on the Stock trading boards or porn sites (our president was renowned for doing nothing and just sitting in his office trading stocks - this was at the height of the bubble around 1999 - amongst other things.)  So Elias took a stab at it.  Spent quite some time.

Finally, Elias asked me to take a look. So first thing I did was reboot the system and take a look at some of the Bios settings.  Not sure why I did that, but if some smart guy just spent an hour+ looking around Windows settings, etc. and couldn't find something, I figure it's something at a bit lower level.

When the Bios settings appeared I started scanning.  Back then, Bios used to have a compatibility setting to run the processor at 4.77 MHz instead of what the CPU was truly capable of.  Not sure what the speed was then, but certainly in excess of 4.77.  How'd it get to that setting?  I don't ask when the user, the president of the group, is spending all his time on porn sites, trading stocks, and checking his portfolio.

The Microsoft connection clarified - Heartbeat

Posted: 08-21-2007 5:12 AM by cicorias | with no comments
Filed under:
Windows breaks Skype

This is just bad reporting.  They  blame too many login attempts resulting from windows update causing reboots.

Are they kidding?  So, too many users logging on causing Skype to crash is Microsoft's fault now? 

Bad reporting with sensationalistic headlines that diverts the cause from the real issue.

Windows breaks Skype - 21 Aug 2007 - NZ Herald: Technology News from New Zealand and around the World

Posted: 08-20-2007 3:02 PM by cicorias | with no comments
Filed under:
MSDN Article Finally Out - Integrating WCF Services with COM+

Well, an article, whose content was mostly taken from the WCF Book, is finally published on MSDN.  It took quite a long time from "acceptance" to appearance.  I believe it was back in February 2007 that it was finalized from a content perspective.  Since then, I haven't heard much till today.

There were lots of updates that given the editing and review process, I held off on so it wouldn't be delayed.  I'll now take the time and publish up on my blog - mostly more information on the different hosting models, perspectives and some issues.

Integrating WCF Services with COM+

Posted: 08-17-2007 4:25 AM by cicorias | with no comments
Filed under: ,
Taking MSDN Documentation on the Road w/ out installing MSDN Library...

I found this tool from an article in Code Magazine.

Package This uses the MSDN Content Service Web Services to first give you a list of MSDN or TechNet categories, then you can just click and download, and generate either HxS or CHM files.

If you don't want to install the entire MSDN library this tools allows you to store it in a CHM, which is what I chose.  This way, I have the WCF section in a nice CHM package...

Posted: 08-16-2007 6:56 AM by cicorias | with no comments
Filed under: ,
Old Company Getting Some Bad, Perhaps Wrong Press?

My old company Avanade is getting some really bad press, along with Accenture - Rocky Failed to Connect CSTARS...

The only question, whose version of the truth do you want to believe?  In the article you certainly see a string of other failed Solution Development efforts, one common theme is Accenture, although SAP and another un-named team for another.  I'm sure there are others.  Just that this article pulls out this set of failures.

In reality the project failed because of the people on the project - not the company.  The people from Colorado State Government, it's vendors, employees, Accenture and Avanade.  It really is that simple.  It wasn't the technology, it wasn't an unachievable goal.  System development can't be that hard is it? (that was a JOKE - I've heard that from some of the A&A guys). 

Well, it is hard to build systems.  You need dedicated, motivated people, and a mix of oversight and technical skills.  I don't have insight, but I'm sure some death marching orders were issued, people were afraid to speak up, the people implementing (developers) had too many layers between them and the product owners and business subject matter experts.  COMMUNICATION FAILURE!!!!!

There are some foundational issues with they way A & A approach gigs, but things like Agile-Scrum approaches certainly cut the risks of spending 2 years on a project and $30 Million down quite a bit - because after each Sprint (stick with 4 weeks here) you get acceptance.  If not, you fix it and then continue to add functionality over time.  I still can't fathom why A & A just don't bite off on Agile-Scrum - actually I do know why, but that's more to do with their economic model on solution delivery - but that's another long story.

UN Website Hacked using simple SQL Injection

This is what happens when you skimp on resources for projects, take shortcuts, and frankly, hire amateurs.

So many times I've shown up on projects and client sites, take a quick look at the code, then see how vulnerable a site is with injection attacks.  In NYC there's a system in place run by the Government that has this vulnerability to this day.  I informed the owners of the system of the presence, but they shrugged it off.  At that point it was all CYA on notification about the issue as I was there for something else.

'Hackers' deface UN site

Posted: 08-13-2007 7:11 AM by cicorias | with no comments
Filed under:
WCF LOB Adapter SDK - WCFLOBASDK - Lot's of words, but lot's of help...

The BizTalk server team has released the aforementioned tool to facilitate the development of "Adapters" (not just BTS, but general WCF) for creation of WCF extensions to consume existing service interfaces.   Mostly, it facilities building well structured classes that meet the WCF extensions requirements.  Clearly, you still need to code up the actual interfaces, connection code handling, etc.

This SDK is usable without BizTalk and can be used to create interfaces to existing systems.  Then, expose and consume these WCF bindings in your applications once they've been "installed". 

Get the bits here:

After you install you get a couple of Wizards and templates (CSharp Only).  The 1st Wizard is available as "WCF LOB Adapter".  This creates the based project that becomes the adapter that is then consumed (or referenced) later by choosing "Add Adapter Service Reference..." from the Project context menu. 

Best bet is to walk through some of the samples.  The samples make use of an installer that both installs your adapter in the GAC along with making changes to the machine.config in order to surface your custom adapter to the Add Adapter Reference tool as a WCF (system.serviceModel section) extension.

Minor issues

Note, that under Vista, some issues when running the MSI (installer).  Ensure to elevate to Administrator (by running a cmd shell and Runas Administrator) then execute the MSI and no issues.  I've seen this on 2 distinct machines.

There is a stand-alone help file (chm) that if you want to take a look at the capabilities, reference, etc., you can peruse it.  To get it just unpack the Zip file that's at the link and browse to the WCFLOBASDK\Program Files\WCF LOB Adapter SDK\Documents directory.

After installation the Help integration also gives you a quite distinct TOC entry - it ends up being the help collection identifier:

There are a few limitations, one notably at this point is no support for IDuplexChannel and FaultContracts (the latter a limitation of the WSDL builder tool that's part of the SDK).  So, the work-around is hand-coding.

You still get both Synchronous and Asynchronous wizard code generation for the Retrieval, Browse, and Search interfaces.

Posted: 08-13-2007 7:00 AM by cicorias | with no comments
Filed under: , ,
FireFox and Limited (2 at a time) Http Downloads

I've mostly switched to FireFox based upon it's speed and in comparison to IE it's a heck of a lot less clunky.

However downloading files is limited, by default to 2 connections per server. Although the general W3C spec on HTTP downloads (or in actuality) 3 simultaneous connections to a server from a client, I feel the need to violate that rule.

Thankfully, it's easy to change in FireFox.

From the address bar, enter "about:config".  Then filter down to you see (or just scroll) to the setting network.http.max-persistent-connections-per-server.

It's set to 2 by default (I think it should probably be 3), but I've upped it to 10 for me.  So, when it's time to download those 8 part VS 2008 VPC image files, just click on them all and sit back and wait.

Posted: 08-12-2007 10:39 AM by cicorias | with no comments
Filed under:
The Reality of Software Development Methodologies

Scott Berkun posts a few nice acronyms for some of the realities of teams and the process they follow during development.

One term that I've used in the past and find useful in the myriad of acronyms is

Application Solution Specialist == ASS

Scott posts a few more, such as ADD == A.s.shole Driven Development, etc.... » Blog Archive » Asshole driven development