Microsoft officially released the BizTalk Server 2009 for public.
M.R.ASHWINPRABHU
I have tried yesterday and it worked. I am really one of the happiest persons to have C# Generics support in BizTalk.
Though Generics was introduced in Version 2.0 of C# and CLR, BizTalk till its version 2006 R2 doesn't support it. But now the story has changed. Yes, BizTalk Server 2009-Beta can support C# helper class with typed parameters i.e. Generics.
In the BizTalk Server version till 2006 R2, though we can't use the C# helper class which has Generics defined in it, we can utilise them indirectly by creating a wrapper class around them. By making this way, we can still abide the rules of BizTalk Server i.e. of not exposing the class with Generics in it directly. But now in BizTalk Server 2009 Beta, we don't have to search for any workaround for using Generics.
Lets see a real time example where we will use C# Generics with BizTalk. I have a database table called "Employee" which contains Employee details (obviously). And as part of the message processing in BizTalk I have to retrieve the Employee name for the given Employee ID. So I'll use a C# helper class to retrieve the EmployeeName for the EmployeeID which will be passed in as a input parameter to a method in it. I have to design the C# helper project in a object-oriented way something like
In the EmployeesDataProvider class, I have defined the Generics as..
public List<Employee> employeeList = new List<Employee>();
to populate it with the result of "select * from Employee" then I'll add this to cache. So next time I'll populate the "employeeList" only if the cache is NULL. Thus avoids the database trips. And use Generics search functionality to get the result from the "employeeList" collection as..
Employee cusTemp = employeeList.Find(delegate(Employee _cus)
{
if (_cus.EmployeeID == strEmployeeID)
{
return true;
}
return false;
});
if (cusTemp != null)
{
ret = cusTemp.EmployeeName.ToString();
}
So the functionality of my helper class is:
Build the EmployeesList (typed class with Generics)from database if its not in the cache / other wise use the cached employee list and use the Generics's Find method to get the EmployeeName for the given EmployeeID.
Now in to BizTalk Server (till 2006 R2), inside the Orchestration's expression shape you may not be able to initiate the EmployeesDataProvider class. Reason being, this class has got the "Generics" type declaration. But now, the same works in BizTalk Sever 2009. Here you can see in BizTalk Server 2009-Beta, the class containing Generics recognised.
Download source code for "Generics in BizTalk Server 2009": http://cid-01845bf64da73117.skydrive.live.com/self.aspx/INDWAY-Integration%20Services/TryGenerics.zip
Thanks to Connected Systems for providing us this feature.
Cheers
M.R.ASHWINPRABHU
Microsoft technical editors have updated the BizTalk Server poster for their new BizTalk Server 2009.
http://blogs.msdn.com/nabeelp/archive/2009/02/04/biztalk-posters-updated-for-biztalk-2009.aspx
Microsoft's mainstream support for BizTalk Server 2004 applications is expiring on 14/07/2009. But the extended support is available till 08/07/2014. In the extended support phase
Support Provided | Till 14/07/2009(Mainstream support) | Till 08/07/2014(Extended Support ) |
Paid support (per-incident, per hour, and others) | Yes | Yes |
Security update support | Yes | Yes |
Non-security hotfix support | Yes | Requires extended hotfix agreement, purchased within 90 days of mainstream support ending. |
No-charge incident support | Yes | No |
Warranty claims | Yes | No |
Design changes and feature requests | Yes | No |
Product-specific information that is available by using the online Microsoft Knowledge Base | Yes | Yes |
Product-specific information that is available by using the Support site at Microsoft Help and Support to find answers to technical questions | Yes | Yes |
BizTalk Server - Product Life cycle: http://support.microsoft.com/lifecycle/search/default.aspx?sort=PN&alpha=BizTalk+Server+2004&Filter=FilterNO
Microsoft is scheduled to release BizTalk Server 2009 by later this year (Its beta is already available for public:http://indway-is.blogspot.com/2008/12/biztalk-server-2009-beta-for-public.html). So if you plan to migrate your BizTalk server 2004 application, its advisable to wait for some time till the release of 2009 and migrate to 2009 to utilise the longer Microsoft support. And there is no direct upgrade path from BizTalk Server 2004 to BizTalk Server 2009. BizTalk server 2009 supports direct upgrade only from 2006 or 2006 R2.
Cheers
M.R.ASHWINPRABHU
Documentation is always an important part of any project. Automating the documentation hasn’t been achieved its excellence. But various documentation tools are available for public use which will help us to create a decent base. One of them is Darren Jefford’s BizTalk documenter.
Download BizTalk 2006 Documenter:
http://www.codeplex.com/BizTalkDocumenter/
I have always found this tool handy whenever I have been asked to work on an existing BizTalk solution. For instance lets say you have been asked to work on an existing BizTalk Solution which comprises of 40 projects!!! Navigating through its reference projects, to understand the flow is always a painful process. I always use this tool to generate a help-file out of these BizTalk projects.
In another project, since my client was very much satisfied with the document generated by this tool, I have configured to run this tool as part of automated build (used MS-Build). so whenever our project changes, the project document will also be updated accordingly.
This tool is simple self-describing tool. But I have faced some problems initially and the solution is as follows.
Ensure the “HelpComplieLocation” variable is assigned to the exact path of the Help compiler “*.exe” file in the BizTalkDocumenter.exe.config file
This error is due to tracking enabled in any of your send port. Just for documentation sake disables the tracking in your send port and rerun the tool again.
In rare case this error might occur. Ensure you have selected only the required BizTalk Applications in “Select Documentation Type”.
Recently I have met some developers who were new to BizTalk. They were having very vague idea about BizTalk host, host group and host instance. We all learnt this by experience but for a beginner, understanding the host model in BizTalk might take some time. So let me post an article which explains these for beginners.
Host:
The BizTalk host is a logical, process boundary for BizTalk artifacts like Adapters, Orchestrations, Send Ports, Receive Locations and Pipelines.
Ok, so what is the actual use of the BizTalk Host? These separate process boundaries (Host) enable us to create security boundaries and facilitate management.
Let's say that your company where the BizTalk application is going to be deployed is
· Having different set of security policies for sending and receiving message from their stakeholders – by using different security certificates for receiving and sending any messages or by using different policies in their firewall.
· Having different security access rights to receive/process/send – this can be achieved by providing different windows group to a host, which controls the access to the host and its associated host instance(s) to database and other resources
· Having different set of throttling configurations for send and receive messages
· More receive intensive where your messaging system receives more messages, then you can isolate the receive locations in a separate host.
Microsoft’s recommendation for the HOST model is to have separate Receiving, Sending and orchestration hosts both logically and physically. This model has been proved to be the most optimal configuration for achieving the highest throughput.
Based on the physical configuration and type of adapter hosted within, there are two types of hosts:
1. In-process hosts.
2. Isolated hosts.
In-Process host:
The logical process boundary which gets executed and managed within the runtime process of BizTalk Server engine.
Isolated host:
The logical process boundary which gets executed and managed from outside the runtime process of BizTalk Server engine. In most of the cases, they run under IIS process boundary. Hence the adapters such as HTTP and SOAP (The adapters that runs outside of the normal BizTalk Server runtime process) are managed under isolated host.
Since the Isolated host exist outside the BizTalk environment, the BizTalk Administrator tool is not designed to show the status of the host (like Started/Stopped)
Host Group:
Host group is nothing but a Windows-group which will be assigned to the host to control its associated host instance(s) access to the database and other resources.
When you initially configure the host, you will provide a Windows group which will be used to control access of the host and its associated host instance(s) to database and other resources
Make sure that the Windows-group which will be assigned to the host has got the “Login access” to the BizTalk-SQL databases like:
A host group requires the following privileges:
If you use the Configuration Wizard to create hosts, and if you specify a local Windows group for the hosts, the Configuration Wizard automatically creates two Windows groups. The default names of these groups are the BizTalk Application Users group and the BizTalk Isolated Host Users group.
Host Instance:
A host instance is a run-time instance of host in a server. Host instance runs within the security boundaries of the host and executes message processing on each machine belonging to the host.
The host instance executes in the associated server inheriting the logical boundary defined in the host.
When you create a host instance of a host associated with the host group, the host instance inherits the database privileges of the host group.
I have been reading an excellent white paper on BAM, I thought I should share this info. This white paper provides a deep, low-level review of how BAM works and how BAM can be extended. This white paper can be found at:
http://msdn.microsoft.com/en-us/library/dd320628.aspx
Cheers
M.R.ASHWINPRABHU
I have been using the LoadGen in the recent weeks. I have been using it as part of creating test harness for performance and stress testing in the BizTalk applications. I thought I’ll write a post about configuring LoadGen for SOAP transport.
A sample scenario: I have a WebService (which I have been using it with my SOAP adapter), which will initiate the message flow in BizTalk. I would like to create a harness which will simulate the source application to post the request message and to receive the response message back from the WebService.
Steps involved:
1. Create WebService
Following is the sample webservice to be used for the testing:
Build and complie the webservice project. Access the webservice from the browser. Browse to the page where you can see the SOAP message formats. Following is the SOAP Request message for the above webmethod. 2.Configure the LoadGen.
Download and install the latest version of LoadGen (2007) from the below Microsoft link (http://www.microsoft.com/downloads/details.aspx?familyid=C8AF583F-7044-48DB-B7B9-969072DF1689&displaylang=en)
Open the sample configuration file from <<installation drive>>\ LoadGen\ConfigFiles\ConsoleConfigFiles
In this case since we are going to test the webservice which inturn return the response, we will select the “SoapToSoapTwoWayLG.xml” – it’s for SOAP two-way transport. In the config file, the root element <LoadGenFramework> contains two key elements
<CommonSection> element configures the default settings common to all LoadGen tasks in a LoadGen scenario. Some of the key settings are
<NumThreadsPerSection>: Number of concurrent threads that LoadGen will use to send messages.
<SleepInterval>:Interval between the subsequent threads.
<LotSizePerInterval>: Number of messages that will be sent as a lot in each thread.
<RetryInterval>: Interval time to reattempt in case of failure.
<OptimizeLimitFileSize>: If file size becomes greater than the specified limit (in bytes), LoadGen will perform streaming for optimization.
<Transport>: Transport protocol to be used for the LoadGen tasks. In this case SOAP.
<Section> element configures the setting specific to a LoadGen task.
<SrcFilePath>: Path of the source file for a LoadGen task
<DstLocation> Element contains the configuration settings for the LoadGen transport component.
<URL>: Specifies the URL of the WebService.
<SOAPHeader>: Specifies the SOAP action header for the request message to deliver.
<SOAPPrefixEnv>: Specifies the start tags of the SOAP envelope and the SOAP body.
<SOAPPostfixEnv>: Specifies the end tags of the SOAP envelope and the SOAP body.
<ResponseMsgPath>: Specifies the directory location for the response message.
Coming back to configuring our sample webservice in LoadGen configuration file, perform the following steps (We are going to refer the SOAP Request message):
Replace the “<” with “<” and “>” with “>”, now we should have
Copy the above content and paste it in <SOAPPrefixEnv></SOAPPrefixEnv> element, like
To specify the <SOAPPostfixEnv>, perform the similar replacements with the end tags of the SOAP envelope and SOAP body. Then we should have
Following figure could help in easily identifying the LoadGen sections from the SOAP message
<Click on the image to see the clearer view>
Create the Source file:
While configuring the <SOAPPrefixEnv> and <SOAPPostfixEnv> elements in the LoadGen configuration, we have specified the start and end tags of the SOAP envelope and SOAP body. We have not used the actual body of the message. Now we will use this to create the source file for the LoadGen. Copy the SOAP body content and paste it in a text-editor with sample value in it. (I have saved the file as InputSrcFile.txt as specified in the <SrcFilePath>)
As per your test criteria, configure the <CommonSection> element.
I have configured it to 1 file in 1 thread per section to execute the try run
For the complete LoadGen Configuration file for this sample webservice (my skydrive folder location):
Execute the LoadGen:
From the command prompt, navigate to the installation directory of the LoadGen and type “LoadGenConsole” with its only parameter, the name of the LoadGenConfiguration file
[installation directory]\LoadGen\Bins>LoadGenConsole TryLGSOAPToSOAPTwoway.xml
If you want to enable tracing for your LoadGen (its very essential in my experience), Uncomment the follwing lines from your LoadGenConsole.exe.config file from “[Installation directory]\LoadGen\Bins\”
After executing the LoadGen, check for the response in the directory specified in <ResponseMsgPath>
BizTalk Server 2009 - beta documentation is now available for download at: http://www.microsoft.com/downloads/details.aspx?familyid=38923F29-167F-497D-80A5-899602FEF8D7&displaylang=en
Cheers
M.R.ASHWINPRABHU
Technorathi Tags: BizTalk Server, BizTalk Server 2009