Microsoft Live Ideas

Hi,
Microsoft LiveIdeascaught my attention, while surfing throughfellow developers blogs today. Microsoft in association with BBC has produced ‘How We Built Britain‘ television series. I havewatched this series and feel this is definitely “NOT TO MISS”. Read about how microsoft got involved with BBC on a television seriesand more from their website at http://live.labs.com

WCF: Don’t trust /serialize:Auto

There is a small bug in .NET 3.0 WCF proxy generation tool:
Using an .asmx web service with a method like
[WebMethod]
[return: XmlAttribute]
public string HelloWorld(int a, [XmlAttribute]int b, int c)
svcutil /serializer:Auto or the AddServiceReference feature in Visual Studio generates a
public void HelloWorld(int a, int c)
proxy method – without any complain or warning. Using svcutil /ser:XmlSerializer works. See […]

Take a Look at These…

Take a Look at These…

I’m not about to start a series of “daily links” post, but here are recent links I find relevant:

  • BizTalk 2006 R2 will come out in September, including a more affordable “Branch Edition” (for those who remember the Partner Edition), destined to be used in conjunction with Enterprise Edition instalations.
  • Two new BizTalk Server whitepapers: Best Practices for the Sql Adapter and Sample Design Patterns for Consuming and Exposing Web Services from an Orchestration. Personally I’m not a big fan of directly exposing databases to BizTalk, so I can’t give an opinion on the first, but the second is very useful and I advise you read it.
  • If you are used to think in Pub/Sub, there’s a new Microsoft project at CodePlex that looks interesting: Distributed Pub/Sub Event System, a %u00aba general-purpose distributed publish/subscribe event system designed for high performance and low latency%u00bb.

Happy reading!

Failed Message Routing and Send Ports

Failed Message Routing and Send Ports

I’m putting this one here just in case I forget about it again:

BizTalk Server 2006 introduced a very nice feature called Failed
Message Routing
. This is usually enabled on Receive Ports to allow the developer
to handle failed inbound messages through BizTalk itself, as it allows the failed
message to be routed to another port or a dedicated error handling Orchestration.
This is a very cool feature you can use to deal with messages that fail processing
during the receive pipeline processing or that matched no active subscriptions on
the message box.

However, BizTalk 2006 also supports Failed Message Routing on Send Ports! The option
to enable them is hidden in the “Transport Advanced Options” section of the Send Port
Properties dialog:

SendPortFMR

This option provides an alternative to the use of delivery notifications in a BIzTalk
Orchestration, with the following advantages:

  1. It doesn’t force an orchestration to wait until retries have been exhausted for the
    delivery notification, so the sending orchestration can still do other work.
  2. It allows the error condition to be handled in an asynchronous fashion
  3. It is a good replacement for delivery notifications in messaging-only scenarios.

A few things to watch out for:

  1. The message is only routed after all retries configured on the send port have been
    exhausted.
  2. You can combine Failed Message Routing with Delivery Notifications; the orchestration
    will gets it’s notification and the failed message will still be routed.
  3. Like with Delivery Notifications, failed message routing will only happen if both the
    primary and secondary transports fail delivery.
BizTalk Server 2006 R2 Pricing

BizTalk Server 2006 R2 Pricing

It appears that the pricing for BizTalk Server 2006 R2 has been announced, see here,
although the main BizTalk
site
doesn’t seem to have the information yet.

It would be interesting to know where the new pricing for Enterprise Edition comes
from (35.000 vs 30.000 for BTS06 R1). I wonder if the licensing model is changing…
Traditionally, BizTalk licensing has been tied solely to the scalability and performance
possibilities of the Enterprise Edition (multiple processors + multiple servers per
group). However, I wonder if this is changing in R2 and Enterprise now also brings
features not available in Standard edition, because the pricing for the Standard edition
doesn’t seem to have changed at all!

SQL Server Compatibility Mode for BaseEDI and HIPAA accelerator

After we upgraded to BizTalk 2006 (along with the HIPAA accelerator 3.3) our DBAs complained that they could not include the BizTalkHIPAA_EDIDb into the backup plan because the compatibility mode is set to SQL Server 7 mode. By looking at it further, all of the Covast databases are set to that compatibility mode. After opening up a ticket with support about this, here is the response I got back:

UPDATE
===========================
SQL Compatibility can be changed to “” without any adverse affects. Please do this to include the HIPAA database in you SQL 2005 backup plan.
+ Open “SQL Server Management Studio”, right-click BizTalkHIPAA_EDIDb database and choose ‘properties’
+ In left pane, click “Options” page
+ Note Compatibility level drop down control (3rd control from top)
+ Change from “SQL Server 7.0 (70)” to “SQL Server 2005 (90)”
+ Restart HIPAA service
===========================

Changed to

This can also be done with the BizTalkEDIDb database (the BaseEDI adapter’s database).

New SOA and Business Process Pack and New Branch Version of BizTalk

A couple of really interesting announcements were made regarding BizTalk at the recent Worldwide Partner Conference:


1) Come September 1st, we’re going to be release the “SOA and Business Process Pack”. SOA continues to gathers steam and more and more clients are asking us for guidance around implement SOA based architectures using our products. In response, we’ve created the “SOA and Business Process Pack”.  To address these needs, we have created the SOA and Business Process Pack.  The value of this Pack is that it defines more clearly the solution set needed to implement SOA/BPM solutions, provides pre-built integration between products, and provides guidance/patterns and reference architectures that enable faster time to value. is:


%u00b7         Available on the price list as of September 1, it offers a 10% discount (in addition to volume price discounts)


%u00b7         Includes BizTalk Server 2006 R2, Microsoft Office SharePoint Server 2007, Visual Studio Team Systems, SQL Server 2005, .NET Framework


%u00b7         Includes 4 Office Business Applications Ref Application Packs


%u00b7         Is a Six month promotional offering


2) Many of our clients have expressed a desire to deploy multiple BizTalk environments in a Hub/Spoke situation. (I.e. Have a large BizTalk system deployed at a head office with smaller cheaper systems deployed at retail stores that feed information back up to the head office) To address this situation, we’ve now announced a new version of BizTalk known as the Branch edition. This new and cheaper edition can be used by clients that have already deployed at least one instance of BizTalk Enterprise.


Cheers and keep on BizTalk.


Peter

Code Snippet: Sort nodes in an Xml Document

Scenario: Need to produce a new xml document with particular node list sorted in ascending/descending order

Code:

XmlDocument xmlDoc = new XmlDocument();
xmlDoc.Load(@”Input.xml”);

XmlDocument xmlDocCopy = new XmlDocument();
xmlDocCopy.LoadXml(xmlDoc.OuterXml);
xmlDocCopy.SelectSingleNode(“//Links”).RemoveAll();

XmlNode node = xmlDoc.SelectSingleNode(“//Links”);
XPathNavigator navigator = node.CreateNavigator();
XPathExpression selectExpression = navigator.Compile(“Link/Title”);
selectExpression.AddSort(“.”, XmlSortOrder.Ascending, XmlCaseOrder.None, “”, XmlDataType.Text);
XPathNodeIterator nodeIterator = navigator.Select(selectExpression);
while (nodeIterator.MoveNext())
{
    XmlNode linkNode = xmlDoc.SelectSingleNode(“//Link[Title=\”” + nodeIterator.Current.Value + “\”]”);
    XmlNode importedLinkNode = xmlDocCopy.ImportNode(linkNode, true);
    xmlDocCopy.SelectSingleNode(“//Links”).AppendChild(importedLinkNode);
}

xmlDocCopy.Save(@”Output.xml”);

Input:

<Section>
    <Links>
        <Link Id=”1″>
            <Title>Jupiter Line</Title>
            <AddedDate>27/05/2007</AddedDate>
        </Link>
        <Link Id=”2″>
            <Title>Alfa Line</Title>
            <AddedDate>27/05/2007</AddedDate>
        </Link>
        <Link Id=”3″>
            <Title>Zebra Line</Title>
            <AddedDate>27/05/2007</AddedDate>
        </Link>
        <Link Id=”4″>
            <Title>Copper Line</Title>
            <AddedDate>27/05/2007</AddedDate>
        </Link>
    </Links>
</Section>

Output:

<Section>
  <Links>
    <Link Id=”2″>
      <Title>Alfa Line</Title>
      <AddedDate>27/05/2007</AddedDate>
    </Link>
    <Link Id=”4″>
      <Title>Copper Line</Title>
      <AddedDate>27/05/2007</AddedDate>
    </Link>
    <Link Id=”1″>
      <Title>Jupiter Line</Title>
      <AddedDate>27/05/2007</AddedDate>
    </Link>
    <Link Id=”3″>
      <Title>Zebra Line</Title>
      <AddedDate>27/05/2007</AddedDate>
    </Link>
  </Links>
</Section>