BizTalk, Conference, ESB Guidance, SOA, WCF, Webcast, WF

SOA and Business Process Post Conference DVDs arrive in Sweden

For those of you who like me attended the Microsoft SOA and Business Process conference in late october 2007 you might have been waiting for the post conference DVDs. And it feels like we have been waiting quite awhile. Perhaps the US participants have gotten them earlier and it’s just the international mailouts that are taking the extra time. Anyways, I am off to watch some of the content I missed. For those of you who didn’t attend and won’t be receiving a DVD you have two choices. Either borrow from a collegue or watch the selected webcasts published online at TechNet Spotlight.

BizTalk, ESB Guidance, Swedish

Slides for the ESB Guidance presentation are online

On February the 12th me and Mikael Håkansson did a presentation for the BizTalk UserGroup Sweden on ESB Guidance. The slides we used for that presentation are now, perhaps somewhat later then I would have liked, online for your viewing and re-using pleasure. Download them from http://biztalkusergroup.se and more specifically this blog post. Note: Slides were given to a swedish audience and the text within them is in swedish. If you would like us to come to your site to explain ESB Guidance to you please contact us using the information within the slidedeck.

BizTalk, Readings

BizTalk Server Operations Guide

A valuable resource for anyone involved in the implementation and administration of a BizTalk solution, particularly IT professionals. The guide provides detailed information for planning a BizTalk Server environment, as well as recommendations and best practices for configuring, testing, maintaining, monitoring, and optimizing this environment.

 

After browsing through it I find some things kind of “blah”, simply selected parts of the help file put together in a new format, while other parts really does provide guidance that goes outside the contents of the help file, certainly worthy the term valuable resource. The contributors list includes names such as Ahmed Metwally (Pro BizTalk 2006) and Darren Jefford (Professional BizTalk Server 2006) to name a few. The BizTalk Server Operations Guide also has alot more content then the earlier released Developers Guide to Troubleshooting (Note: I’m not comparing them, they are aimed at different groups of people for different situations, but it’s the last thing released as a complement to the core documentation named to be a guide). Weighing in at a healthy 627 pages I wouldn’t recommend you to read it straight through, but I’m definatly going to read selected parts. Another great addition to the already competent BizTalk Server documentation.

 

BizTalk, ESB Guidance

The ESB Guidance Scatter-Gather Sample

The motivation for this post
Ever since Richard wrote his post about a loosely coupled, MsgBox utilizing, Scatter-Gather implementation I’ve been meaning to illustrate the approach taken by Microsoft Pattern and Practices within the ESB Guidance package. Now there is absolutely nothing wrong with Richards solution, and it straight to the point and easy to grasp. The learning curve of the ESB Guidance and its Itineray Processing is something that not everyone is willing to take on if they don’t see the immediate benefit for it’s use within their environment. Still, it’s always interesting to get a different solution to the same problem, so here goes.


Itinerary Processing
First of all, the Scatter-Gather sample makes heavy use of Itinerary Processing. Both the orchestration to trigger, as well as the locations to send the scattered request and gather the responses from, and finally send the aggregated response to is expressed through an itinerary. Below is a sample of such an itinerary.


<Itinerary xmlns=”http://schemas.microsoft.biztalk.practices.esb.com/itinerary”>
<ServiceInstance uuid=”” name=”ScatterGather” type=”Orchestration”
state=”Pending” position=”0″ isRequestResponse=”false” xmlns=”” />
<Services xmlns=””>
<Service uuid=”” beginTime=”” completeTime=”” name=”ScatterGather”
type=”Orchestration” state=”Pending” isRequestResponse=”false”
position=”0″ serviceInstanceId=”” />
</Services>
<Services xmlns=””>
<Service uuid=”” beginTime=”” completeTime=”” name=”DynamicTest”
type=”Messaging” state=”Pending” isRequestResponse=”false”
position=”1″ serviceInstanceId=”” />
</Services>
<ResolverGroups xmlns=””>
<Resolvers serviceId=”ScatterGather0″>&lt;
![CDATA[BRE:\policy=ResolveEndPointScatterGather;version=;useMsg=;]]&gt;&lt;
![CDATA[UDDI:\serverUrl=http://localhost/uddi;serviceName=PurchaseOrderSubmitOrderService;serviceProvider=Microsoft.Practices.ESB]]&gt;
</Resolvers>
<Resolvers serviceId=”DynamicTest1″>&lt;
![CDATA[UDDI:\serverUrl=http://localhost/uddi;serviceName=OrderFileService;serviceProvider=Microsoft.Practices.ESB;]]&gt;
</Resolvers>
</ResolverGroups>
</Itinerary>

This describes an itinerary that will call two locations, described in the ScatterGather0 resolver, and send the aggregated response to the location described in the DynamicTest1 resolver. Basically, a resolver is a lookup location where the endpoint is stored. In the example above this is illustrated by the BRE (Business Rules Engine) and UDDI (Universal Description Discovery and Integration registry) resolvers. Read more about resolvers at Mikaels blog.


The Broker orchestration
The Scatter-Gather sample is made up of two orchestrations, Broker.odx and ServiceDispatcher.odx. The broker has a direct subscription and is started by a filter expression based on message context properties found in the Itineray above, namely the name, type and state with the service instance. The broker is started by a XmlDocument typed message. The orchestration then loops through the resolvers for ScatterGather0 and for each resolver starts the ServiceDispatcher orchestration (using the Start Orchestration shape) passing in the received message along with the Self Correlated porttype to respond to, and transport and resolver information. See figure1 for a condensed look of Broker.odx.


The ServiceDispatcher orchestration
The ServiceDispatcher.odx receives the message and gathers some metadata. It then maps the message to the required request format (determined by a BRE policy lookup). It does the maping by using API calls rather then by using the map shape, allowing it to stay generic and untyped. It then calls an untyped passthrough dynamic request-response port, whose location is determined from the location passed in, originating in the itinerary. Remember this orchestration was started by looping the resolvers. It then maps the response to the required response format (which is made up of some status information and an Any node, and send the response, through the MessageBox, back to the broker orchestration. Should an exception occur the same response message is sent back containing information saying that a fault has happened.


Aggregating the response
The Broker.odx receives the responses in a loop using a Self Correlated Partner Orchestration Port passed in as a parameter to the ServiceDispatcher.odx (see Charles Youngs write-up on Direct Biding models for more information on how this works – it’s not new, but it’s still good). It then adds the responses to a messageAggregator message. When it has collected all the messages it executes a send pipeline called AggregatingPipeline and receives the response back (see the Aggregator sample if you are curious on how this works). Finally the FinalResponse message is then sent out through to the final location given in the resolver named DynamicTest1.


In summary
There you go, message accomplished. I hope I explained it in a way that was understandable. Like I said in the beginning, the Itinerary processing might be a hurdle to get over when implementing this solution, but that information can of course come from a different source then the itinerary, like a config file, a database or another config location. Even leaving out the itinerary this sample still contains some interesting patterns and is worth checking out. This sample isn’t available for download from this blog, but I encourage you to check out the ESB Guidance. If ESB Guidance interests you I encourage you to read Mikaels blog. Also, if you happen to be in Stockholm, Sweden on February 12th we’ll be doing a presentation about the ESB Guidance for the BizTalk Usergroup Sweden.

Adapters, BizTalk

What kind of FTP did you say you used?

I’d just like to make a small note about protocol acronyms, and the importance of knowing the correct acronym when naming your BizTalk adapter so that someone planning to (re)use your adapter knows what it’s really about. The case I’d like to highlight refers to FTP, and is something I’ve been forced to drill myself into when working in an environment where several different types of similar sounding acronyms are present.


FTP, the File Transfer Protocol, is used to transfer data from one system to another. The base implementation of this protocol sends all data (including username and password) in clear text through the wire. There are however protocol enhancements for securing this transfer using SSL. This is called FTP over SSL, which is more generally refered to as FTPS (or FTP/SSL). There is also the option of securing your FTP transfer by tunneling it though a SSH session. Though since FTP is a multi channel protocol this in many implementations just protects the control channel (ie the username and password) and sends the data unprotected. However this differs from implementation to implementation, and in some cases both control codes and data is protected. This is refered to as Secure FTP, but is not to be confused with SFTP, which is used when talking about the SSH File Transfer Protocol, which has really nothing to do with FTP. Confusing isn’t it? 😉


Wikipedia har more info. FTP (and FTP over SSH), FTPS, SFTP.