Tallan's Blog

Tallan’s Experts Share Their Knowledge on Technology, Trends and Solutions to Business Challenges

Author Archive

Resolving an obscure BizTalk 2010 build issue

I recently started work on upgrading a BizTalk 2006 R2 application to BizTalk 2010. I upgraded the solution to VS 2010, deployed the application to my local BizTalk and verified everything was working.
The next step was to start work on automating the build and deployment process. A perfect opportunity to leverage the TFS and MSBuild support introduced in BizTalk 2009.
In order to build a BizTalk 2010 project, I need to install the BizTalk Project Build Components on the TFS build agent. Unfortunately, the client was using Windows Server 2003 R2 for the existing TFS 2008 Build Agent (BizTalk 2010 requires Windows Server 2008 and above.)

To work around this, we installed TFS 2008 Build on the BizTalk 2010 Development machine and added it as an Agent to the TFS server. (This is a short-term work-around until the client creates a dedicated…

Identity Developer Training Kit and an issue with missing dependencies

If you are learning about Windows Identity Foundation, you should install these components in the following order:

WIF runtime
WIF SDK
Identity Developer Training Kit

Note that there is a version of the SDK and Training Kit for Visual Studio 2008 SP1 (.NET 3.5) and one for Visual Studio 2010 (.NET 4.0.)
Note: Side by side installation of the WIF 3.5 and 4.0 SDKs is not recommended. Visual Studio templates will be properly installed for side by side installations of Visual Studio 2008 and 2010, the included samples will not work in such a configuration without modification.
This post is about a problem I found with the 2008/3.5 version of the Identity Training Kit and how you can fix an error in the lab set-up scripts.
Each training lab has a SetupLab.cmd file that needs to be run in order to install and configure the code snippets…

Free Seminar: Breakthroughs in Microsoft Integration

For those in the Connecticut area…
Tallan is providing a complimentary executive lunch around the topic of Microsoft Integration. It includes a talk by Tom Stickle, Program Manager at Microsoft for the Connected Systems Division, about the new integration features in BizTalk. In addition, there will be a real-life integration case study from a CT-based company.
The event will be held from 11:00 AM until 1:00 PM on June 10th at Lake of Isles in North Stonington, CT (part of the Foxwoods Resort), where an executive lunch will be served.
Here is the link to more information about this event and how to register.

New England BizTalk User Group presentation

I gave a presentation on BizTalk High Availability options to the New England chapter of the BizTalk user Group on May 14th.
Here is a link if you are interested in downloading the presentation (powerpoint 97-2003 format).

Some new BizTalk links

Some interesting links:
BizTalk Server Database Optimization White Paper – This is an excellent MSDN write-up on how to optimize your BizTalk systems. The title is somewhat incorrect as it describes how to optimize the hardware (which RAID level to use, turn off hyperthreading), the Network (usage of subnets), the OS (Registry and other settings) , IIS and SQL Server tuning. This is an extensive and through document that includes lab performance tests and results, recommended configurations and links to helpful tools and utilities.
Some of the suggestions can be helpful even if you aren’t using BizTalk.
Enterprise Service Bus (ESB) Guidance Documentation and Source Code – This is the CodePlex community site for the latest release (CTP3) of the ESB Guidance package for BizTalk. Current plan is to release the final version in October.

A Custom Functoid – EBCDIC to ASCII

Here is an example of a custom functoid method that converts an EBCDIC signed value to ASCII format:
Add a new C# class library project to your BizTalk solution and call it MyCompany.BizTalk.Functoids. Create a C# class in the project and use the same project name for the namespace.
Example:

using System;
using System.Collections.Generic;
using System.Text;
namespace MyCompany.BizTalk.Functoids
{
    /// <summary>
    /// Summary description for Utils.
    /// </summary>
    public class Utils
    {
        public Utils()
        {
        }

Add the method to perform the conversion:

/// <summary>
        /// Convert EBCDIC signed values to ASCII format
        /// </summary>
        /// <param name=”amount”>Amount to be converted</param>
        /// <param name=”sign”>Signed Value</param>
        /// <returns></returns>
        public double ConvertFromEBCDIC(double amount, string sign)
        {
            switch (sign)
            {
                case “{“:
                    amount = (amount / 10);
                   …

Custom Pipeline Components – part 3: Completing the Archive Component

This post continues the series on creating custom pipeline components. The previous posts in the series can be found here:  post 1,  post 2.
In order to complete the exercise of creating the archive component, we need to add the code to actually perform the archival of the message. For this example, the requirements of the archive component is to persist an exact copy of the message coming into BizTalk (whether flat file, xml, binary or even an encrypted) in it’s original form to the local filesystem.
To start off, we need to create a method to write an inputstream to the filesystem outputstream. The following CopyStream method does this…

        protected void CopyStream(Stream input, Stream output)
        {
            int BUFFER_SIZE = 4096;
            byte[] buffer = new byte[BUFFER_SIZE];
            int bytesRead;
            try
            {
                bytesRead = input.Read(buffer, 0, BUFFER_SIZE);
   …

Custom Pipeline Components – part 2: Archive component continued…

In the previous post we started creating the c# class that implements the interfaces needed to develop a custom BizTalk pipeline component. In this post, we continue with this sample…
The next interface we will implement is the IPersistPropertyBag interface. Before we do that, we need to add two generic utility methods to read to & write from property bags. A property bag is an object which can persistently save its properties. MSDN provides more info on the Microsoft.BizTalk.Adapter.Framework.PropertyBag class.

        #region utility functions
        /// <summary>
        /// Reads property value from property bag
        /// </summary>
        /// <param name=”pb”>Property bag</param>
        /// <param name=”propName”>Name of property</param>
        /// <returns>Value of the property</returns>
        private object ReadPropertyBag(
                  Microsoft.BizTalk.Component.Interop.IPropertyBag pb, string propName)
        {
            object val = null;
            try
            {
                pb.Read(propName, out val, 0);
           …

Custom Pipeline Components – part 1: Getting Started

This is the first post in a series on how to develop custom pipelines and incorporate advanced functionality. The final example will allow the reader to incorporate PGP decryption on the receive sid and encryption on the send ports.
A custom pipeline component is just a plain .NET class that implements several BizTalk interfaces. I recommend creating a seperate c# project to contain just your custom pipeline classes.
In this post, I will go through creating a sample pipeline component that archives the incoming message to the file system at the Decode stage
To get started, create a standard C# Class Library project.
Add references to the following:
Microsoft.BizTalk.Messaging (C:\Program Files\Microsoft BizTalk Server 2006\Microsoft.Biztalk.Messaging.dll)
Microsoft.BizTalk.Pipeline (C:\Program Files\Microsoft BizTalk Server 2006\Microsoft.BizTalk.Pipeline.dll)
System
System.Data
System.Drawing
System.XML

Add your namespace and the following namespace directives…

namespace Tallan.BlogBizTalk.PipelineComponent
{
    using System;
    using System.IO;
    using System.Text;
    using System.Drawing;
    using System.Resources;
    using System.Reflection;
    using System.Diagnostics;
    using System.Collections;
    using System.ComponentModel;
    using Microsoft.BizTalk.Message.Interop;
   …

Passwords & BizTalk

Even with all the time I have spent with BizTalk 2004 and 2006, there is one thing that I will occasionally get tripped on – the fact that exported Bindings and Configuration files do not contain passwords.
For security purposes, BizTalk never shows the existing values of any passwords – whether those passwords are entered during configuration, setting up SQL or FTP adapters, etc. Instead all the user will see is *************  (the # of asterisks does not correspond to the length of the password).
So if you export bindings to “save a copy” of the current configuration, don’t forget to track the passwords somewhere. One approach is to edit the exported files and fill in the empty password fields, but this should only be done if you can ensure the xml binding files will be tightly secured.
Here is an example of the password output for a…

\\\