AppFabric Walkthrough: Creating a Simple Queue Management Tool

I’ve added a second AppFabric Walkthrough based on the Azure AppFabric Service Bus September 2011 release. The second one looks at using the NamespaceManager class to create, list, get and delete queues in an AppFabric service bus namespace using a simple C# console application. Feel free to expand on this scenario to create more sophisticated management consoles.
As with the first walkthrough there have been a lot of changes in the classes used to interact with the service bus, so don’t expect this code to work against the May or June CTP releases.
The two walkthroughs are here.
AppFabric Walkthrough: Simple Brokered Messaging
AppFabric Walkthrough: Creating a Simple Queue Management Tool

Book Review: Microsoft BizTalk 2010 Line of Business Systems Integration

One benefit of my recent experience on a BA flight was that I got plenty of time to read through “Microsoft BizTalk 2010 Line of Business Systems Integration”. I’d promised the publisher weeks ago that I would take a look and publish some comments, but August has been such a busy month for me, and they have had to be patient. I should point out that, for the sake of transparency, that with another BizTalk book about to be released (next week) which I helped co-author, I have an urgent and obvious need to make good on this promise before I start to blog on other stuff.

BTS10LoBI is a really welcome addition to the corpus of BizTalk Server books and fills a conspicuous gap in the market. BizTalk Server offers a wide-ranging library of adapters. The ’native’ (built-in) adapters understandably get a lot of attention, as do the WCF adapters, but other adapters, such as the LoB adapters and HIS adapters, are often overlooked. I came to the book with the mistaken assumption that its chief focus was on the BizTalk Adapter Pack. This is a pack of adapters built with the WCF-based LoB SDK. In fact, the book follows a much broader path. It is a book about LoB integration in a general sense, and not about one specific suite of adapters. Indeed, it is not simply about adapters. It focuses on integration with various LoB systems, and explains how adapters and other tools are used to achieve this.

This makes for a more interesting read. For example, one, possibly unintended, consequence (given that it represents collaboration between five different authors) is that it illustrates very effectively the spectrum of approaches and techniques that end up being employed in real-world integration. In some cases developers use adapters that offer focused support for metadata harvesting and other features, exploited through tools such as the ’Consume Adapter Service’ UI. In other cases, they use native adapters with hand-crafted schemas, or they create fa%u00e7ade services. The book covers additional scenarios where third-party LoB tools and cloud services (specifically SalesForce) are used in conjunction with BizTalk Server. Coupled with lots of practical examples, the book serves to provide insight into the ’feel’ of real-world integration which is so often a messy and multi-faceted experience.

The book does not cover the BizTalk Adapter Pack comprehensively. There is no chapter on the Oracle adapters (not a significant issue because they are very similar to the SQL Server adapter) or the Siebel adapter. On the other hand, it provides two chapters on the SAP adapter looking at both IDOC and RFC/BAPI approaches. I particularly welcome the inclusion of chapters on integration with both Dynamics CRM 2011 and Dynamics AX 2009. I learned a lot about Dynamics CRM which I haven’t had occasion personally to integrate with in its latest version. The chapter on SalesForce mentions, but does not describe in any detail, the TwoConnect SalesForce adapter which we have used very effectively on previous projects. Rather, it concentrates on direct HTTP/SOAP interaction with SalesForce.com and, very usefully, advocates the use of Azure AppFabric for secure exchange of data across the internet.

The book provides two chapters on integration with SharePoint 2010. The first explores the use of the native adapter to communicate with form and document libraries, and provides illustrated examples of working with InfoPath forms. It would have been reasonable to stop there, but instead, the second chapter goes on to describe how to integrate more fulsomely with SharePoint via its web service interface, and specifically how to interact with SharePoint lists.

Increasingly, the BizTalk community is waking up to the implications of Windows Azure and AppFabric. This is an important step for developers to take. Future versions of BizTalk Server will essentially join and extend the on-premise AppFabric world. As Microsoft progressively melds their on/off premise worlds, BizTalk developers will increasingly have to grapple with integration of cloud based services, and integration of on-premise services via the cloud. The book is careful to address this emerging field through the inclusion of a chapter on integration via the Azure AppFabric service bus. As I mentioned above, this is applied specifically to SalesForce integration in a later chapter. The AppFabric Service Bus is a rapidly-evolving part of the Azure platform, and is set to introduce a raft on new features in the coming months which will greatly extend the possibilities. Eventually we will see cloud-based integration services appear in this space. So, the inclusion of this chapter points out the direction of major future evolution of Microsoft’s capabilities and offerings in the integration space.

The book is not shy about providing guidance on practical problems and potential areas of confusion that developers may encounter. The content is clearly based on real-world experience and benefits from ’war stories’. The value of such content cannot be underestimated, and can save developers hours of pain and frustration when tackling new problems. All in all, I thoroughly welcome this book. My thanks to the authors, Kent Waere, Richard Seroter, Sergei Moukhnitski, Thiago Almeida and Carl Darski.

2º Evento de Aniversário da Comunidade NetPonto (2 anos!) | 24 de Setembro de 2011 – Lisboa

2º Evento de Aniversário da Comunidade NetPonto (2 anos!) | 24 de Setembro de 2011 – Lisboa

For the BizTalk Portuguese Community, I will present a session about maps: “BizTalk Mapper: How maps work in BizTalk Server 2010“ in the next NetPonto community event that will occur on September 24 in Lisbon. No dia 24 de Setembro (pr%u00f3ximo S%u00e1bado) a Comunidade NetPonto comemora o seu segundo anivers%u00e1rio, e convida todos os seus […]
Blog Post by: Sandro Pereira

First-Look:Installing & Configuration of BizTalk Server 2010 on Windows 8 Developer Preview

Last week during the BUILD conference a developer preview of Both Windows 8 and Windows Server 8 was released. Once released I’ve decided to give it a go and install and perform a basic configuration (without BAM / EDI) of BizTalk Server 2010 on Windows 8 (note: not Windows Server 8).

Below a list of issues I encountered and how to resolve these issues.

Prerequisites
Obtain the Windows 8 developer preview build
Obtain Microsoft BizTalk Server 2010
Ensure that you have a dedicated server available with SQL Server 2008R2.
Hook up your Windows 8 to machine to your Active Directory (this way you can use your AD BizTalk service accounts etc.)

Environment

Encountered Issues while installing
Well to be perfectly honest the only issue I encountered during installation of BizTalk Server 2010 was the fact that I got about 10+ windows update screens which all prompted me to go and install the .Net Framework 3.5.1 Features; well I closed all the windows except for one and let windows update continue.

Note: For the BizTalk pre-requisites I simple pointed to the cab file , which I already downloaded previously.

Encountered Issues while configuring
Configuring BizTalk Server 2010 was a bit more of a challenge although everything up to ‘Configuring the BizTalk Server Runtime’ went off without any problems.

However once it was time to configure the runtime it gave me a an exception informing me that the server could not communicate with the SSO and that it might have to do with the Distributed Transaction Coordinator; Well this was not the issue, as I had configured it on both servers (on the SQL Server box and on the BizTalk Box).

So next stop was looking into the windows services and then especially the Enterprise Single Sign On Service; well the service was up and running.  So I stopped and started it and tried to configure the BizTalk Server Runtime once again; however I still got the same error.

Next stop going back to the windows services and this time

I tried an elevated account on the Enterprise Single Sign On Service; but hey you guessed it; still got the same error.

So; not giving up I went back to the Enterprise Single Sign On service and put everything back to it’s original state (that is use the dedicated sso service account). Well once I tried to start the service again it suddenly gave me an error indicating that there were some RPC issues… Hmmm, so I went and had a look at that particular service and noticed that it was up and running. Restarting it did not throw any other exceptions and that’s when I noticed that the service ‘RpcLocator Service’ was not running. Bingo! Enabling this service resolved the SSO issue and I was able to further configure BizTalk Server 2010.

Conclusion
BizTalk 2010 can be installed and configured on the Windows 8 Developer Preview Release; however before installing and configuring ensure that

You’ve configured the Distributed Transaction Coordinator on both the SQL Server Box as well as the Windows 8 Box
Ensure that the ‘RpcLocator Service’ is up and running.

Please note: So far I’ve only installed and configured BizTalk 2010 on Windows 8. I’ve not actually played around with sample applications etc.

Screenshots:

BizTalk Administrator ‘Pinned’ to Metro

BizTalk Server Configuration

BizTalk Administrator Console

Cheers

René

Broken British Airways

I’m sitting is a nice new hotel in Redmond – the Hotel Sierra is well worth considering if you are staying in the area. I’m sleep-deprived and jet-lagged, and it’s raining hard outside, but hey, I just got to play with one of the Samsung tablets they handed out at Build, and was not disappointed. Microsoft is doing something trully remarkable with Win8 Metro.
On the other hand, I am deeply disappointed with the UK flag carrier, British Airways. Indeed, I’ve lost patience with them big-time. So forgive me for getting this off my chest. I am very much in the mood to do as much reputational damage to them as I can.
When I checked in on-line, they had booked me into one seat but I could see another with more legroom (a front row). Because of repeated experience over the last few years with defective headsets (I always carry my own earphones these days after one flight here we went through three different headsets before finding one in which one of the earphones actually worked) and bad headset connections (having to constantly twiddle the jack to try to hear anything), I spent a little while consciously debating with myself the intangible risks of changing my seat – i.e., I could easily be swapping a ’working’ seat for a broken ’one’. Of course, there was no way to know, so I opted for the seat with more legroom.
MISTAKE! Forget about dodgy headsets. Nothing worked. Not even the reading light! Certainly not the inflight entertainment. They failed to show me the safety video (the steward did panic a little when he realised they had failed to comply with their legal obligations). So I sat for 9.5 hours in a grubby, worn-out cabin with nothing!
To be fair, they did offer to try to find me another seat (the plane was very full), but I opted for the legroom because I wanted to try to get some sleep. So I could probably have got in-flight entertainment. The point is, though, that this is now more than just an unfortunate couple of co-incidences over the last two or three years. I am reasonably fair-minded and understand that sometimes, with the best will in the world, things just go wrong. In any case, I was bought up to put-up or shut-up (as my mother would say – it’s part of the culture). However, I am forced to conclude that this is now a repeated trend that I experience regularly to the point where I am consciously suspicious of the seats they give me, and clearly with good reason. BA simply fails to maintain its cabins to anything like a reasonable or acceptable standard (I must trust they do a better job in maintaining the engines). I used to feel some patriotic pride in BA. Not now. It’s so sad to see the British flag carrier consistently deliver such an embarrasingly poor and second-rate service. I will be asking SolidSoft in future to, where possible, book me onto a different carrier and will do what I can to convince the company to use other carriers by default.
Personally, I think the UK government should give flag carrier status to someone else (Virgin, I guess).

BizTalk Server 2010 Training in Adelaide- Week of the 24th of October

We have a 5 day BizTalk Server 2010 Developer course scheduled for the 24th – 28th of October in Adelaide.

The BizTalk Server 2010 Developer Training is an update version of the existing BizTalk training that now includes WCF send and receive adapter, a BizTalk Patterns module (correlation, sequential convoy and parallel convoy) and optional EDI components. The course is targeted at beginning BizTalk developer or developers that want to bring their skills up to 2010.

Any question or discuss your BizTalk training needs please contact me

AppFabric Walkthrough: Simple Brokered Messaging

I’ve published a basic walkthrough of using the new brokered messaging capabilities in the Azure AppFabric service bus September 2011 release. If you have not used queues in AppFabric before this will get you started with a basic application that you can build upon. If you have used queues in the May or June CTP releases then this walkthrough will be useful to highlight the changes in the management portal and service bus API. (Quite a lot has changed, for the better, but I have a lot of rework to update all my demos and samples.)
The walkthrough is here.

WCF LOB Adapter, dealing with TypeMetadata and xsd:Include

Say for example if you want to expose an operation called "AddOperation" which takes 2 input parameters of type "double" and returns a "double" value.

If you are building a standard WCF services, you would have defined the interface as shown below.

[OperationContract]
double AddOperation(double a, double b)

But in order to do the same thing in WCF LOB adapter, you would have done something like this

//Param 1
OperationParameter n1 = new OperationParameter("a"
                                        , OperationParameterDirection.In
                                        , QualifiedType.DoubleType, false);
n1.IsOptional = false;
opMetadata.Parameters.Add(n1);
 
//Param 2
OperationParameter n2 = new OperationParameter("b"
                                        , OperationParameterDirection.In
                                        , QualifiedType.DoubleType, false);
n2.IsOptional = false;
opMetadata.Parameters.Add(n2);
 
//Result
opMetadata.OperationResult = new OperationResult(QualifiedType.DoubleType, false);
break;

The reason for the complexity is mainly due the dynamic nature of the WCF LOB adapters, often times you’ll be constructing the operation request and response types based on your underlying LOB applications requirement.

WCF LOB Adapter SDK comes with rich set of Metadata object model to cater for various situations. That includes

  • Operation/Type Metadata Object Model is used for contract generation
  • ParameterizedOperationMetadata class can be used for most common operation representations (as shown above)
  • StructuredTypeMetadata can be used for most common types representations
  • Metadata object model is extensible by allowing the adapter developer to provide own XML Schema representations for its members using ExportXmlSchema methods.

The last option ExportXmlSchema is the one you’ll use when the underlying LOB systems already defined XSD schemas and you just want to reuse it. Example

[OperationContract]

CustomerResponse GetCustomer(RetailCustomer customer)

The EchoAdapter sample and some of the great articles from Sonu Arora’s WCF LOB adapter series all explain about the simple scenario where a types is self contained within a single XSD file. But in reality you’ll be using multiple XSD files together either with xsd:include or xsd:import. I can see an open thread here at msdn forum without a resolution.

When you try to deal with schemas that include other schemas, you’ll typically see the following error

Error while retrieving or generating the WSDL. Adapter message: The ‘urn:schemas-XXXXX:b2b:WorkItemNo’ element is not declared.

The solution to that problem is quite straight forward. In the ExportXmlSchema method, you loop through the included schemas before doing your regular one. In the below example the code in bold is a common schema, and the code below that is what you’ll normally have.

public override void ExportXmlSchema(XmlSchemaExportContext schemaExportContext, MetadataLookup metadataLookup, TimeSpan timeout)
{
    if (schemaExportContext == null)
    {
        throw new AdapterException("Schema export context is null.");
    }

    //Read Common Schemas

    Stream commonXsdFile = Assembly.GetExecutingAssembly().GetManifestResourceStream(COMMOM_METADATA_FILE_NAME);
    using (XmlReader reader = XmlReader.Create(commonXsdFile))
    {
        XmlSchema schema = XmlSchema.Read(reader, null);
        if (!IsComplexTypeAlreadyDefined(schemaExportContext.SchemaSet, schema))
        {
            schemaExportContext.SchemaSet.Add(schema);
            if (!schemaExportContext.NamespacePrefixSet.ContainsKey(this.TypeNamespace))
            {
                schemaExportContext.NamespacePrefixSet.Add(this.TypeNamespace
                    , getUniqueNamespacePrefix(schemaExportContext, 0));
            }
        }
    }


    // Read in XML Schema file or create XmlSchema object yourself
    Stream predefinedXsdFile = Assembly.GetExecutingAssembly().GetManifestResourceStream(CONST_METADATA_FILE_NAME);
    using (XmlReader reader = XmlReader.Create(predefinedXsdFile))
    {
        XmlSchema schema = XmlSchema.Read(reader, null);
        if (!IsComplexTypeAlreadyDefined(schemaExportContext.SchemaSet, schema))
        {
            schemaExportContext.SchemaSet.Add(schema);
            if (!schemaExportContext.NamespacePrefixSet.ContainsKey(this.TypeNamespace))
            {
                schemaExportContext.NamespacePrefixSet.Add(this.TypeNamespace
                    , getUniqueNamespacePrefix(schemaExportContext, 0));
            }
        }
        //reader.Close();
    }
}

.csharpcode, .csharpcode pre
{
font-size: small;
color: black;
font-family: consolas, “Courier New”, courier, monospace;
background-color: #ffffff;
/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt
{
background-color: #f4f4f4;
width: 100%;
margin: 0em;
}
.csharpcode .lnum { color: #606060; }

Nandri

Saravana Kumar

Five BizTalk Server 2010 Books you must have

Five BizTalk Server 2010 Books you must have

Microsoft BizTalk Server 2010 Unleashed Authors Brian Loesgen, Charles Young, Jan Eliasen, Scott Colestock, Anush Kumar and Jon Flanders Book Description Microsoft BizTalk Server 2010 Unleashed is the 100% new, 100% practical developer’s guide to Microsoft’s most powerful version of BizTalk Server. Written by an expert team of Microsoft insiders and BizTalk MVPs, it reflects […]
Blog Post by: Sandro Pereira