by community-syndication | Jan 9, 2008 | BizTalk Community Blogs via Syndication
I’d like to thank everyone that attended tonight’s Connected Systems SIG meeting of the San Diego .NET User Group, focused on BizTalk development best practices. It was a great meeting, with a great turnout, and I think a good time was had by all. In fact, Chris and I though it went so well that we’re going to do the same presentation at the SoCal Code Camp in Fullerton later this month.
As promised, here’s a list of the links I showed, compiled from the resources slides, enjoy!
BizTalk Product Website:
http://www.microsoft.com/biztalk/
BizTalk Server Developer Center:
http://msdn.microsoft.com/biztalk/
BizTalk Server TechCenter on TechNet:
http://www.microsoft.com/technet/prodtechnol/biztalk/
Microsoft SOA:
http://www.microsoft.com/soa
BizTalk Server 2006 Tutorials:
http://msdn2.microsoft.com/enus/library/aa560270.aspx
BizTalk Server Virtual Labs:
http://msdn.microsoft.com/virtuallabs/biztalk/
BizTalk Beginner Training Roadmap (BizTalk Server Team Blog):
http://blogs.msdn.com/biztalk_server_team_blog/archive/2006/03/21/556994.aspx
Learning BizTalk Server 2006 – BizTalk Server Developer Center:
http://msdn2.microsoft.com/en-us/biztalk/aa937649.aspx
BizTalk Webcasts:
http://msdn2.microsoft.com/en-us/biztalk/aa937645.aspx
BizTalk Server 2006 Best Practices Analyzer (BPA) :
http://www.microsoft.com/downloads/details.aspx?familyid=dda047e3-408e-48ba-83f9-f397226cd6d4&displaylang=en
BizTalk Documenter:
http://www.codeplex.com/BizTalkDocumenter
BizUnit:
http://www.codeplex.com/bizunit
BizTalk Pattern Wizard:
http://www.codeplex.com/PatternWizard
BizTalk Orchestration Profiler:
http://www.codeplex.com/BiztalkOrcProfiler
by community-syndication | Jan 8, 2008 | BizTalk Community Blogs via Syndication
This is one of the best reflections I have ever read about the WS-* vs. REST debate. For the ones of you new to MEST, this is an complementary alternative to REST mostly evangelized by my friend and SOA guru Jim Webber…(read more)
by community-syndication | Jan 8, 2008 | BizTalk Community Blogs via Syndication
The end of 2007 turned out to be a very busy time for me, I started a new job as Systems Integration Manager at Stargate Group in Richmond Victoria, I had my BizTalk MVP Status renewed for another year and we had all of my wife’s family over for Christmas Day.
2008 is looking like a busy year also, the lack of travel with my new job is a refershing change, so I am working on plans to restart regular meetings of the Melbourne BizTalk User group (should be something posted on the melbiz site soon) and building a new team at Stargate Group to support our internal BizTalk Application.
2008 is also looking like a busy year for BizTalk, with work continuing on the next version and moredetails and supporting product around “Oslo”, so I am looking forward to attending the MVP summit in April to get some quallity time with the product group.
by community-syndication | Jan 8, 2008 | BizTalk Community Blogs via Syndication
Believe me, the adapter is telling the truth! It really doesn’t understand the action it got! To understand what’s going on, read on
When you use the ’Consume Adapter Service’ wizard to generate LOB schemas in a BizTalk project, you also get a binding file which you can import (using the BizTalk Administration Console) to create the corresponding physical WCF-Custom port (Send or Receive Port, based on whether the contract was Outbound or Inbound respectively) when deploying your BizTalk Application. While this does save you the pain of creating and configuring the port manually, there is a ’not-so-obvious’ caveat which you need to be aware of. (This applies only to send ports i.e. Outbound Contracts)
The WCF-Custom Adapter allows the SOAP Action to be specified in the following two ways on the static send ports:-
As a single line of text – the port is used for a single intended operation (say ’ABC Action’).
- As an xml, mapping each of a set of ’Operations’ to the corresponding SOAP Action. This xml looks something like this:- (namespaces omitted for clarity)
<BtsActionMapping>
<Operation Name =”ABC” Action = “ABC Action” \>
<Operation Name = “XYZ” Action = “XYZ Action” \>
</BtsActionMapping>
The binding file created by the ’Consume Adapter Service’ wizard chooses the second method to specify the action, even if you generate schemas for a single operation.
Now the question is, when a message comes to a port using such a mapping, how does it know what the intended operation was? Or more specifically, how does it know which action to use for which incoming message?
To make this decision, the WCF-Custom adapter compares the message’s BTS.Operation context property with the list of operations in the map (attribute ’Name’). If a match is found, the corresponding action is used.
However, if the WCF-Custom adapter fails to resolve the operation name from the map, it assumes that the entire thing specified is a single line action (as in 1 above) and sends the whole string to the target adapter binding.
The most common scenario this could happen is when you create an orchestration and forget to change the operation names on the logical ports to appropriate names. By default, when you create a logial port in an orchestration, it’d be created with a single operation called ’Operation_1’. The next operation you add (either on the same port or while creating another port) would be called ’Operation_2’ and so on. You need to modify these default names to the appropriate names as the BTS.Operation context property derives it’s value from the operation name on the logical orchestration port which published the message to the message box. (That also means if you are not using orchestration and still want to use the Action-Mapping feature, you’ll probably need to write a custom pipeline component to populate this context property).
So if you are seeing the error mentioned in the title, what is possibly happening is this:-
Your FOO Adapter supports two operations with the corresponding actions being ’ABC Action’ and ’XYZ Action’. You generate the schemas and the binding file, create an orchestration (but forget to change the default operation names), tie the message types, deploy the project and import the binding file.
At runtime when you send a message, because you did not change the operation name on the logical port, the BTS.Operation property is set to ’Operation_1’. The WCF-Custom adapter tries to look up this name in the map you specified on the send port (by importing the binding file). Since it does not find any operation by the name ’Operation_1’, the WCF-Custom adapter believes that whatever you specified on the port is a single line action and passes the same to the FOO adapter.
So, instead of getting “ABC Action” or “XYZ Action”, which it understands, the FOO adapter gets “<BtsActionMapping><Operation Name =”ABC” Action = “ABC Action” \><Operation Name = “XYZ” Action = “XYZ Action” \></BtsActionMapping>”.
Clearly, it doesn’t understand that action!
Ok, so what do I do to fix this?
In the above example, you should change the operation names on the logical ports in the orchestration to ’ABC’ and ’XYZ’ instead of the default ’Operation_1’, ’Operation_2’ etc. (Of course, you can also do it the other way round – change the mapping on the port to use names in the orchestration or, if there is just one action to use, specify the action directly on the port instead of using the action map.)
Basically, you need to make sure that the WCF-Adapter is able to resolve the operation name on the message to use the correct action, as explained above.
by community-syndication | Jan 8, 2008 | BizTalk Community Blogs via Syndication
There are two ways the adapters belonging to Adapter Pack can be used by SQL Service Integration Services:
1. Using ADO layer built on top of base adapters. This option is available with SAP and Siebel adapters.
2. Writing custom SSIS task which directly invokes adapter to communicate with LOB system.
Option 1 covers all scenarios where data need to be moved from LOB system into SQL server. The reason being that ADO layer exposes only Query and Execute interfaces. Using these ADO interfaces, we can only pull out data from LOB system.
If usage scenario is such that data has to be loaded into LOB system, then option 1 doesn’t help. But that is the not end of story. We can write custom SSIS task. This custom task essentially wraps the adapter as destination component. Once adapter is exposed as SSIS component, it is available for use in any SSIS scenario.
by community-syndication | Jan 8, 2008 | BizTalk Community Blogs via Syndication
I'm going to repost this series of "development tips" related to Commerce Server 2007 to help other folks get started with their development work. All of these "tips" come directly from what I've learned (the hard way) over the past eight months and are intended to save you time and effort. All code samples are now based upon the RTM version and have been tested in our production environment.
Tip #4 – Returning Site Terms
One of the really great things about ASP.NET 2.0 is just how easy it is to bind data to server controls like the DropDownList. Commerce Server 2006 includes many new "bindable" collections and custom DataSets which take advantage of this feature of ASP.NET 2.0.
<asp:DropDownList ID="UserRoleDropDownList" DataSourceID="UserRolesDataSource" DataTextField="Name" DataValueField="Value" runat="server" TabIndex="8"></asp:DropDownList>
<asp:ObjectDataSource ID="UserRolesDataSource" runat="server" OldValuesParameterFormatString="original_{0}" SelectMethod="GetUserRoles" TypeName="UserManager"></asp:ObjectDataSource>
In the .aspx code shown above I've created a simple DropDownList bound to an ObjectDataSource which calls the GetUserRoles() select method to return a SiteTermElementCollection (new in CS2007) which can be directly bound to any list control.
public SiteTermElementCollection GetUserRoles()
{
// Get the SiteTermElementCollection for data binding on the site
return CommerceContext.Current.ProfileSystem.GetSiteTerm("user_role").Elements;
}
by community-syndication | Jan 8, 2008 | BizTalk Community Blogs via Syndication
Its a funny old thing writing a blog. You never quite know which posts people will care about and which they wont. Well except maybe the blog posts you write to get some miscellaneous topic off your chest — those ones you know people won’t care for. Where was I? Ah yes, so I was doing some blog maintenance and I got to looking at my stats, as feeble as they are, and it seems that this post on what makes a good BizTalk administrator is by far and away the most popular post. It also bounces between rank 3-6 on “The Google” for the term “BizTalk Administrator”. Interesting eh? Seems like it had the desired effect. Company’s have cottoned onto the idea that a BizTalk Administrator is a necessity analogous to a DBA.
A quick look around the intertubes shows quite a few mentions of the word “BizTalk adminstrator” and I see quite a few jobs ads for it. You could say my job here is done. So all those newly minted BizTalk Administrators out there owe me a debt of gratitude. I take paypal.
That wasn’t really a state of the union address was it? That was a little trick I played on you. See I like to use subjects that make you think its going to be interesting and then waste your time by rambling on and on about increasing boring stuff. Say, did you hear the one about the man and a dog who go into a bar? Or maybe it was church. So a man and a dog go into a church and the bartender says to the man, “he can’t come in here”, then the dog says to the priest behind the bar, “why not”? Then the nun says …wait I forgot the punchline. You really should have stopped reading already.

by community-syndication | Jan 7, 2008 | BizTalk Community Blogs via Syndication
I've decided to repost several of my older Commerce Server 2007 posts after spending some time reviewing questions on the Commerce Server forums. Please note: I've edited the code in this post to better explain exactly how to return a user's catalogs in the site.
Question: "How Do I Return the User's Catalogs in the Commerce Server 2007 Site Code?"
Tip #1 – Return a User's Catalogs
Commerce Server 2007 brings many changes and improvements, especially in the "Catalog" subsystem. First and foremost, the "Catalog" subsystem now returns strongly-typed objects in many cases which greatly simplifies your site code.
The following code returns a strongly-typed "CatalogsDataSet" using the new CatalogSetsContext.GetCatalogs(CatalogSetId) method.
This example could obviously be extended to fall back to one of the two default CatalogSets (DefaultUserCatalogSet or AnonymousUserCatalogSet) as well and the new strongly-typed DataSet can be directly bound to any number of ASP.NET 2.0 server controls or to (my personal favorite) the ObjectDataSource as it's "Select" method.
by community-syndication | Jan 7, 2008 | BizTalk Community Blogs via Syndication
I can’t see it linked from many places so I thought I’d link to it here – http://www.w3.org/2005/Talks/1115-hh-k-ecows/#(1)
Also linked is this cartoon – which I found hilarious – http://ars.userfriendly.org/cartoons/?id=20050421

Check out my BizTalk
R2 Training.
by community-syndication | Jan 7, 2008 | BizTalk Community Blogs via Syndication
Config files:
- Enumerate the high level elements of the <system.serviceModel> section.
- What is the name attribute of the <service> element?
- What is the contract attribute of the <endpoint> element?
- What is the difference in the attributes the binging and the bindingConfiguration of the <endpoint> element?
- What is the difference in the attributes the binging and the bindingName of the <endpoint> element?
- Are the addresses, the bindings, the contracts unique between services?
- How are dependent the app.config and the machine.config files?
- Enumerate the high level of the <bindings> and<binding>element.
Service contracts:
- Enumeratethree message exchange patterns in the WCF model.
- If the service operation returns void, what is the message exchange pattern? Is the client waiting the operation to completed in this case?
- What the difference between the request-response pattern and the duplex pattern?
- In the duplex communication is the server set up the client address or the client set it up? This address is used by the server to sent the data back to the client.