<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-6708338</id><updated>2011-04-21T22:25:35.258+01:00</updated><title type='text'>The Arch Hacker's BizTalk Blog</title><subtitle type='html'>This blog will hopefully enlighten people in the understanding of the many facets of BizTalk Server 2004.  The King Is Dead (BTS2002)!  Long Live The King (BTS2004)!!</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://thearchhacker.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6708338/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://thearchhacker.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Paul</name><uri>http://www.blogger.com/profile/12744829788574669901</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>45</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-6708338.post-112550440025705941</id><published>2005-08-31T17:02:00.000+01:00</published><updated>2005-08-31T17:08:25.256+01:00</updated><title type='text'>Solidsoft are recruiting in the USA!</title><content type='html'>&lt;p&gt;I hadn't realised quite how long it's been since I've blogged, oops! Anyway, just to give you an indication as to how busy I am, Solidsoft have now become incorporated in the USA with an office in Chicago and we are currently looking at hiring top BizTalk Architects (initially, anyway!).&lt;/p&gt;&lt;p&gt;The advert has gone up on Monster.com. Here is the specific link to the details:&lt;/p&gt;&lt;p&gt;&lt;a href="http://jobsearch.monster.com/getjob.asp?JobID=33454108&amp;AVSDM=2005%2D08%2D31+09%3A34%3A20&amp;amp;amp;Logo=1&amp;opt=go&amp;amp;sort=rv&amp;vw=b&amp;amp;cy=US&amp;brd=1,1862,1863&amp;amp;amp;rad=50&amp;amp;q=biztalk"&gt;Click this link to go to job advert details&lt;/a&gt;&lt;br /&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6708338-112550440025705941?l=thearchhacker.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6708338/posts/default/112550440025705941'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6708338/posts/default/112550440025705941'/><link rel='alternate' type='text/html' href='http://thearchhacker.blogspot.com/2005/08/solidsoft-are-recruiting-in-usa.html' title='Solidsoft are recruiting in the USA!'/><author><name>Paul</name><uri>http://www.blogger.com/profile/12744829788574669901</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-6708338.post-110297149540611418</id><published>2004-12-13T20:58:00.000Z</published><updated>2004-12-13T21:07:37.266Z</updated><title type='text'>BizTalk and SOA</title><content type='html'>&lt;p&gt;So, it's been a while since I've blogged. Life has been hectic and I'm currently spreading my time between two projects so blog time has been in short supply, even though my blog-to-do list is growing! &lt;/p&gt;&lt;p&gt;Anyway, so what is this post all about? It's about where BizTalk fits architecturally within the new &amp;quot;hot&amp;quot; world of Service Oriented Architectures. &lt;/p&gt;&lt;p&gt;BizTalk Server, as we know, is a middleware product that enables integration between LOB applications and systems in an EAI scenario and trading partners in a B2B scenario. As part of this broad area of responsibility BizTalk is able to execute business processes that implement complex integration or workflow scenarios, transform data from one format into another, route messages based on message metadata or actual content, perform security duties such as encryption and signing, capture tracking information for administrators or business analysts, communicate with a variety of communication protocols and mechanisms and so on and so on and so on. In short, the platform of BizTalk Server offers a complete business process and integration suite, hence the title of Microsoft's new division that is in charge of all of this stuff. &lt;/p&gt;&lt;p&gt;Knowing what we know of the features of the BizTalk Server platform how does that fit into an SOA world, one in which client applications &amp;quote;patch&amp;quote; together software services that provide specific business functions and offer a cohesive whole? Ultimately, why would you want to put an integration and business process engine into the mix when effectively the client is just calling a web service or two in order to offer specific functionality to a user? &lt;/p&gt;&lt;p&gt;Well, my belief is that BizTalk does offer value in an SOA when it is operating within 3 distinct patterns: &lt;b&gt;Service Broker&lt;/b&gt;, &lt;b&gt;Service Aggregator&lt;/b&gt; and &lt;b&gt;Integration Enabler&lt;/b&gt;. &lt;/p&gt;&lt;p&gt;&lt;span style="FONT-WEIGHT: bold; FONT-SIZE: 110%"&gt;Service Broker&lt;/span&gt; &lt;/p&gt;&lt;p&gt;A service broker sits between the client and the web service and provides brokering services on behalf of the web service to the client. By putting a broker in between, it can act as a secure boundary that allows you to provide controlled access to internal web services. The broker might be the only supported route for consumers of an organisation's web services (see figure 1).&lt;/p&gt;&lt;p&gt;&lt;img src="http://www.btinternet.com/~pd.brown/blog/BizTalkSoaFigure1.jpg" alt="Service Broker"/&gt;&lt;br/&gt;Figure 1: Service Broker &lt;/p&gt;&lt;p&gt;In addition to brokering based on security boundaries, the broker might act as a routing engine capable of determining the correct web service based on either message metadata content (such as HTTP or SOAP headers) or message content itself, in a content based routing scenario (see figure 2). &lt;/p&gt;&lt;p&gt;&lt;img src="http://www.btinternet.com/~pd.brown/blog/BizTalkSoaFigure2.jpg" alt="Service Broker using CBR"/&gt;&lt;br/&gt;Figure 2: Service Broker using CBR &lt;/p&gt;&lt;p&gt;The service broker, depending on caller requirements, may operate in a &lt;b&gt;request-response&lt;/b&gt; or &lt;b&gt;one-way&lt;/b&gt; scenario. &lt;/p&gt;&lt;p&gt;If the broker operates in a request-response scenario, it is likely that it will provide some form of &lt;b&gt;sync-on-async&lt;/b&gt; operation, as in the case of BizTalk Server 2004, in order to be able to provide a synchronous response to the client. &lt;/p&gt;&lt;p&gt;If the broker operates in a one-way scenario, no response is required and BizTalk Server is able to process the request in an asynchronous manner. &lt;/p&gt;&lt;p&gt;It may well be that a response can be asynchronously delivered, in which case the client issues a &lt;i&gt;one-way&lt;/i&gt; request to BizTalk Server that brokers the call to the appropriate web service asynchronously (to the client), while further on in the process after a response has been received from the brokered web service, BizTalk Server asynchronously delivers a notification to the client containing the response. &lt;/p&gt;&lt;p&gt;Either way, BizTalk Server is used as middleware to broker calls between a client and its target web services. Introducing BizTalk Server as a broker will have performance implications due to an extra hop between two endpoints, however, the benefits of imposing a routing engine and security boundary offer an attraction to naturally security sensitive organisations that would like to expose business functionality as web services. &lt;/p&gt;&lt;p&gt;&lt;span style="FONT-WEIGHT: bold; FONT-SIZE: 110%"&gt;Service Aggregator&lt;/span&gt; &lt;/p&gt;&lt;p&gt;The service aggregator I tend to term a &lt;b&gt;&amp;quot;super service&amp;quot;&lt;/b&gt; - a service that offers an aggregated business function view of discrete separate business functions. &lt;/p&gt;&lt;p&gt;In this scenario, BizTalk Server is used to consume multiple web services and aggregate their results behind the facade of a web service offering a single, probably coarse grained, business function (see figure 3). The aggregator, in effect, offers the ability to create composite applications using business process rules that tie multiple finer grained web services together. &lt;/p&gt;&lt;p&gt;&lt;img src="http://www.btinternet.com/~pd.brown/blog/BizTalkSoaFigure3.jpg" alt="Service Aggregator"/&gt;&lt;br/&gt;Figure 3: Service Aggregator &lt;/p&gt;&lt;p&gt;Creating an aggregator, or super service, in BizTalk Server would involve building an Orchestration (the composite application logic) that enable the results from multiple web service calls to be aggregated together to provide a single response. &lt;/p&gt;&lt;p&gt;Indeed, BizTalk Server, in this scenario, operates as both a broker and an aggregator in one - brokering all calls to internal web services but also aggregating responses. &lt;/p&gt;&lt;p&gt;This pattern, I expect, will be the most oft used pattern with regards to BizTalk Server and an SOA. With the power of the Orchestration Engine and Business Rules, as well as the ability to inspect, manipulate and transform messages, BizTalk Server offers a great deal as a service aggregator within a SOA. &lt;/p&gt;&lt;p&gt;&lt;span style="FONT-WEIGHT: bold; FONT-SIZE: 110%"&gt;Integration Enabler&lt;/span&gt; &lt;/p&gt;&lt;p&gt;The previous two patterns are probably the most obvious with respect to a SOA; however, there is quite often the need to integrate with LOB applications &lt;i&gt;behind&lt;/i&gt; the web service facade in an organisation. Just because BizTalk Server may sit between the client and the web service offering brokering and aggregation services, doesn't mean to say that its role as an application integration tool disappears - far from it (see figure 4). &lt;/p&gt;&lt;p&gt;&lt;img src="http://www.btinternet.com/~pd.brown/blog/BizTalkSoaFigure4.jpg" alt="Integration Enabler"/&gt;&lt;br/&gt;Figure 4: Integration Enabler &lt;/p&gt;&lt;p&gt;An organisation may offer a web service that integrates both ERP and warehousing systems to external trading partners. While it is probably quite easy (depending on the interfaces into each application) to write code to achieve this integration, we get back into the mindset that we have been trying to get away from. Writing point-to-point interfaces between applications is bad! It has been proven time and again that P2P interfaces are short term and never stack up, both in terms of costs and support, in the long term. &lt;/p&gt;&lt;p&gt;Therefore, integrating between a web service's private implementation and LOB applications should still be achieved using an integration tool such as BizTalk Server, its bread and butter purpose. &lt;/p&gt;&lt;p&gt;&lt;span style="FONT-WEIGHT: bold; FONT-SIZE: 110%"&gt;Conclusion&lt;/span&gt; &lt;/p&gt;&lt;p&gt;So, in conclusion, I think that BizTalk Server 2004 fits quite appropriately into these 3 patterns of operation within an SOA. BizTalk Server itself is trumpeted as a friend to SOA with whitepapers and patterns and practices on the subject. On the whole, it isn't just marketing fluff and Microsoft is right. However, there are caveats - the most important caveat being performance and scalability. It is possible, it's just that there are pitfalls that you need to be aware of when designing architectures around BizTalk at the heart of an SOA. That, my friend, is an article for another day... &lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6708338-110297149540611418?l=thearchhacker.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6708338/posts/default/110297149540611418'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6708338/posts/default/110297149540611418'/><link rel='alternate' type='text/html' href='http://thearchhacker.blogspot.com/2004/12/biztalk-and-soa.html' title='BizTalk and SOA'/><author><name>Paul</name><uri>http://www.blogger.com/profile/12744829788574669901</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-6708338.post-110297110406876557</id><published>2004-12-13T20:51:00.000Z</published><updated>2004-12-13T20:51:44.066Z</updated><title type='text'>Reserved Keywords and Distinguished Fields</title><content type='html'>&lt;p&gt;Just a quick issue I discovered the other day with one of my schemas. I added an element called &lt;b&gt;timeout&lt;/b&gt; with some child elements to the schema (days, hours, minutes, seconds), promoted the child elements as distinguished fields and then tried to use the schema in my orchestration. &lt;/p&gt;&lt;p&gt;Every time I tried to use the promoted property &lt;b&gt;days&lt;/b&gt; using myMessage.Blah.timeout.days, I kept getting a squiggly red line under timeout and days with the error: &lt;b&gt;unexpected keyword: timeout, cannot find symbol ''&lt;/b&gt; &lt;/p&gt;&lt;p&gt;The issue is because the &lt;b&gt;timeout&lt;/b&gt; name is an XLANG/s reserved keyword. Therefore, if you want to promote a field as a distinguished field to be used in an orchestration, then make sure that no elements exist that are named the same as XLANG/s reserved keywords in the path up to the root element. &lt;/p&gt;&lt;p&gt;When oh when will Microsoft junk XLANG/s and just use C#??? &lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6708338-110297110406876557?l=thearchhacker.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6708338/posts/default/110297110406876557'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6708338/posts/default/110297110406876557'/><link rel='alternate' type='text/html' href='http://thearchhacker.blogspot.com/2004/12/reserved-keywords-and-distinguished.html' title='Reserved Keywords and Distinguished Fields'/><author><name>Paul</name><uri>http://www.blogger.com/profile/12744829788574669901</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-6708338.post-110054642192351727</id><published>2004-11-15T19:20:00.000Z</published><updated>2004-11-15T19:21:52.416Z</updated><title type='text'>BTS Guys Understand SOA and Contract First</title><content type='html'>&lt;p&gt;Aaron Skonnard has put up a good post about why BTS developers understand SOA and contract first.  This is a hot topic at Solidsoft Towers and James and Duncan certainly have championed this at work for some time.&lt;/p&gt;&lt;p&gt;I was talking with James the other day about the ASHX HTTP handler that bypasses all of the unnecessary XML-&amp;gt;Object and Object-&amp;gt;XML deserialisation and serialisation that goes on.  We agreed that as a lightweight 'web service' for BTS running at the core of a SOA architecture it is essential as it reduces the evil of latency that BTS can introduce (due to its primary task of ensuring messages are durable which means trips to SQL Server that could be avoided in a request-response synchronous scenario).&lt;/p&gt;&lt;p&gt;Aaron Skonnard's post can be found at &lt;a href="http://pluralsight.com/blogs/aaron/archive/2004/11/11/3440.aspx"&gt;http://pluralsight.com/blogs/aaron/archive/2004/11/11/3440.aspx&lt;/a&gt;.&lt;/p&gt;&lt;p&gt; I've been quite busy recently and haven't been blogging as much as I'd like.  I'm due to rectify this with some posts on BizTalk Server 2004 and SOA soon, certainly in the performance area as it is possible to do SOA with BizTalk with reasonable latency results provided you know what you are doing.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6708338-110054642192351727?l=thearchhacker.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6708338/posts/default/110054642192351727'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6708338/posts/default/110054642192351727'/><link rel='alternate' type='text/html' href='http://thearchhacker.blogspot.com/2004/11/bts-guys-understand-soa-and-contract.html' title='BTS Guys Understand SOA and Contract First'/><author><name>Paul</name><uri>http://www.blogger.com/profile/12744829788574669901</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-6708338.post-109696700694124050</id><published>2004-10-05T10:03:00.000+01:00</published><updated>2004-10-05T10:03:26.940+01:00</updated><title type='text'>The Bloggers Guide to BizTalk</title><content type='html'>&lt;p&gt;There is a tome out called &lt;strong&gt;The Bloggers Guide to BizTalk&lt;/strong&gt; put together by Alan Smith that amalgamates a lot of the BizTalk blogging content into a very handy guide in CHM format.  Incredible effort and highly useful!  All I can say is WOW!&lt;/p&gt;&lt;p&gt;Alan's blog post can be found &lt;a href="http://geekswithblogs.com/asmith/archive/2004/10/04/12112.aspx"&gt;here&lt;/a&gt; and the guide itself is on GotDotNet &lt;a href="http://www.gotdotnet.com/workspaces/workspace.aspx?id=0dfb4f4e-d241-4bc8-8418-2c385d8e3eaa"&gt;here&lt;/a&gt;.&lt;/p&gt;&lt;p&gt;Enjoy!&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6708338-109696700694124050?l=thearchhacker.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6708338/posts/default/109696700694124050'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6708338/posts/default/109696700694124050'/><link rel='alternate' type='text/html' href='http://thearchhacker.blogspot.com/2004/10/bloggers-guide-to-biztalk.html' title='The Bloggers Guide to BizTalk'/><author><name>Paul</name><uri>http://www.blogger.com/profile/12744829788574669901</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-6708338.post-109689353556860492</id><published>2004-10-04T13:38:00.000+01:00</published><updated>2004-10-04T13:53:18.793+01:00</updated><title type='text'>DateTime Serialization Part 2</title><content type='html'>&lt;p&gt;A colleague has just suggested that it may be because the BizTalk NT Service account may not have a profile, therefore no timezone information.  So, setting a promoted property in Orchestration with the value &lt;span style="font-family: 'Courier New'"&gt;DateTime.Now&lt;/span&gt; would potentially produce a time based on GMT with no timezone or daylight savings offsets in effect.&lt;/p&gt;&lt;p&gt;A mightily sound theory, but I haven't been able to try it yet.&lt;/p&gt;&lt;p&gt;Will post here when I've had a chance to do it and prove the theory once and for all...&lt;/p&gt;&lt;p&gt;Duncan's blog post on the subject can be found &lt;a href="http://geekswithblogs.com/dmillard/archive/2004/10/04/12117.aspx"&gt;here&lt;/a&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6708338-109689353556860492?l=thearchhacker.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6708338/posts/default/109689353556860492'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6708338/posts/default/109689353556860492'/><link rel='alternate' type='text/html' href='http://thearchhacker.blogspot.com/2004/10/datetime-serialization-part-2.html' title='DateTime Serialization Part 2'/><author><name>Paul</name><uri>http://www.blogger.com/profile/12744829788574669901</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-6708338.post-109646115795786867</id><published>2004-09-29T13:32:00.000+01:00</published><updated>2004-09-29T13:32:37.956+01:00</updated><title type='text'>DateTime Serialization in BizTalk - Possible Bug?</title><content type='html'>&lt;p&gt;    On a recent project, I came across an interesting issue with assigning the current date and time to a promoted property in a &lt;b&gt;Message Assignment&lt;/b&gt; shape.&lt;/p&gt;&lt;p&gt;    The problem highlighted itself in our Audit database where we were auditing process state changes.  The submission date of each audited record appeared to be &lt;i&gt;1 hour ahead&lt;/i&gt; than the current local time (based on GMT with Daylight Savings Time in effect - meaning we are currently +1 to UTC).&lt;/p&gt;&lt;p&gt;    Our scenario involves writing an audit record from the web site that is initiating the process, then each subsequent audit is performed at various steps within a BizTalk orchestration.  Each audit record contains some meta data extracted from the envelope, plus the XML fragment of the header within the envelope and optionally the body from within the envelope.&lt;/p&gt;&lt;p&gt;    The first audit record is written by the web site.  It uses a class created by &lt;b&gt;xsd.exe&lt;/b&gt; which is based on the envelope schema deployed in BizTalk (not a BizTalk Envelope schema though).  The code populates the class, then uses the &lt;b&gt;XmlSerialization&lt;/b&gt; class to serialise the object into XML.&lt;/p&gt;&lt;p&gt;    Each subsequent audit within the BizTalk orchestration effectively creates a new message (based on the envelope schema), updates the &lt;i&gt;messageId&lt;/i&gt;, &lt;i&gt;processStatus&lt;/i&gt; and &lt;i&gt;submissionDate&lt;/i&gt; promoted properties within a &lt;b&gt;Message Assignment&lt;/b&gt; shape, and then calls the Audit Web Service passing the message (as a string - long story, but that's the way it currently is) as an argument.&lt;/p&gt;&lt;p&gt;    The first audit record has the correct time in the Oracle database, but every subsequent audit record has a time that is 1 hour ahead!&lt;/p&gt;&lt;p&gt;    In the web site I'm using the expression &lt;span style="font-family: 'Courier New'"&gt;DateTime.Now&lt;/span&gt; to populate the current date/time in the &lt;i&gt;submissionDate&lt;/i&gt; property of my object.  When serialised by .NET using &lt;b&gt;XmlSerialization&lt;/b&gt;, it converts this date into a &lt;b&gt;Sortable Date Time&lt;/b&gt; pattern (identified as 's' in .NET) as defined by &lt;b&gt;ISO 8601&lt;/b&gt;.  In addition, the DateTime.Now value is in local time, and it takes this into account when building the ISO 8601 date string.  For example:&lt;/p&gt;&lt;p&gt;    &lt;span style="font-family: 'Courier New'"&gt;2004-09-24T11:24:08.5177508+01:00&lt;/span&gt;&lt;/p&gt;&lt;p&gt;    From this date value you can clearly see that the date/time is in UTC format with a +01:00 for the adjustment for daylight savings time.  So, this is a correct date/time for &lt;b&gt;British Summertime&lt;/b&gt;.&lt;/p&gt;&lt;p&gt;    When I set the submissionDate promoted property in BizTalk using the expression &lt;span style="font-family: 'Courier New'"&gt;DateTime.Now&lt;/span&gt;, it should output the same or similar value, taking into account that DateTime.Now returns a local time, and that the date string should encode the daylight savings offset.  However, it doesn't...&lt;/p&gt;&lt;p&gt;    The following is a date string output from BizTalk.  Bearing in mind that the message is serialised into XML and then passed to the Audit Web Service.  This is what is received by the web service:&lt;/p&gt;&lt;p&gt;    &lt;span style="font-family: 'Courier New'"&gt;2004-09-24T11:24:08.9240060Z&lt;/span&gt;&lt;/p&gt;&lt;p&gt;    The date/time string format is based on the &lt;b&gt;Universal Sortable Date Time&lt;/b&gt; pattern (identified by 'u' in .NET) and is the correct local time but does not have any daylight savings adjustment associated with it!  This means that when the Audit Web Service converts the string into a &lt;b&gt;DateTime&lt;/b&gt; object using either &lt;span style="font-family: 'Courier New'"&gt;System.Convert.ToString()&lt;/span&gt; or &lt;span style="font-family: 'Courier New'"&gt;DateTime.Parse()&lt;/span&gt;, it takes the daylight savings adjustment into account and &lt;i&gt;adds 1 hour!&lt;/i&gt;.  It didn't work with &lt;span style="font-family: 'Courier New'"&gt;DateTime.ParseExact( dateTimeString, &amp;quot;u&amp;quot;, System.Globalization.DateTimeInfo.InvariantInfo )&lt;/span&gt; either.&lt;/p&gt;&lt;p&gt;    So, in order to fix this, we had to use the &lt;span style="font-family: 'Courier New'"&gt;DateTime.UtcNow&lt;/span&gt; in the orchestration whenever we set the submission date promoted property so that the &lt;b&gt;DateTime.Parse&lt;/b&gt; method could take into account current regional settings when converting the string to a DateTime.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6708338-109646115795786867?l=thearchhacker.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6708338/posts/default/109646115795786867'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6708338/posts/default/109646115795786867'/><link rel='alternate' type='text/html' href='http://thearchhacker.blogspot.com/2004/09/datetime-serialization-in-biztalk.html' title='DateTime Serialization in BizTalk - Possible Bug?'/><author><name>Paul</name><uri>http://www.blogger.com/profile/12744829788574669901</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-6708338.post-109551568375443515</id><published>2004-09-18T14:54:00.000+01:00</published><updated>2004-09-18T15:00:38.390+01:00</updated><title type='text'>Cool XSD Validation Function for Orchestration</title><content type='html'>&lt;P&gt;As I promised in an earlier post, here's a cool XSD validation function that can be called from within orchestration. Just add to a library - I tend to put it into a BizTalk Utilities library full of useful little functions that complement orchestration (most of which should be provided by the orchestration engine, but that's a rant for another day!).&lt;/P&gt;&lt;P&gt;&lt;span style="font-family: 'Courier New'; font-size: 80%;"&gt;public static void ValidateDocument( XmlDocument businessDocument, string schemaStrongName )&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;// Constants&lt;br /&gt;&amp;nbsp;&amp;nbsp;const int PARTS_IN_SCHEMA_STRONG_NAME = 2;&lt;br /&gt;&amp;nbsp;&amp;nbsp;const int PART_CLASS_NAME = 0;&lt;br /&gt;&amp;nbsp;&amp;nbsp;const int PART_QUALIFIED_ASSEMBLY_NAME = 1;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;// Parse schema strong name&lt;br /&gt;&amp;nbsp;&amp;nbsp;string[] assemblyNameParts = schemaStrongName.Split( new char[] { ',' }, PARTS_IN_SCHEMA_STRONG_NAME );&lt;br /&gt;&amp;nbsp;&amp;nbsp;string className = assemblyNameParts[PART_CLASS_NAME].Trim();&lt;br /&gt;&amp;nbsp;&amp;nbsp;string fullyQualifiedAssemblyName = assemblyNameParts[PART_QUALIFIED_ASSEMBLY_NAME].Trim();&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;// Load assembly&lt;br /&gt;&amp;nbsp;&amp;nbsp;Assembly schemaAssembly = Assembly.Load( fullyQualifiedAssemblyName );&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;// Create instance of the BTS schema in order to get to the actual schemas&lt;br /&gt;&amp;nbsp;&amp;nbsp;Type schemaType = schemaAssembly.GetType( className );&lt;br /&gt;&amp;nbsp;&amp;nbsp;Microsoft.XLANGs.BaseTypes.SchemaBase btsSchemaCollection = ( Microsoft.XLANGs.BaseTypes.SchemaBase )Activator.CreateInstance( schemaType );&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;// Set up XML validating reader and validate document&lt;br /&gt;&amp;nbsp;&amp;nbsp;XmlParserContext parserContext = new XmlParserContext( null, null, "", XmlSpace.None );&lt;br /&gt;&amp;nbsp;&amp;nbsp;XmlValidatingReader reader = new XmlValidatingReader( businessDocument.OuterXml, XmlNodeType.Document, parserContext );&lt;br /&gt;&amp;nbsp;&amp;nbsp;reader.ValidationType = ValidationType.Schema;&lt;br /&gt;&amp;nbsp;&amp;nbsp;reader.Schemas.Add( btsSchemaCollection.SchemaCollection );&lt;br /&gt;&amp;nbsp;&amp;nbsp;while( reader.Read() ) {}&lt;br /&gt;}&lt;/span&gt;&lt;/P&gt;&lt;P&gt;In order to call in orchestration, just create an &lt;B&gt;expression&lt;/B&gt; shape and use the following:&lt;/P&gt;&lt;P&gt;&lt;span style="font-family: 'Courier New'; font-size: 80%;"&gt;ValidateDocument( myBtsMessage, myBtsMessage( BTS.SchemaStrongName ) );&lt;/span&gt;&lt;/P&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6708338-109551568375443515?l=thearchhacker.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6708338/posts/default/109551568375443515'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6708338/posts/default/109551568375443515'/><link rel='alternate' type='text/html' href='http://thearchhacker.blogspot.com/2004/09/cool-xsd-validation-function-for.html' title='Cool XSD Validation Function for Orchestration'/><author><name>Paul</name><uri>http://www.blogger.com/profile/12744829788574669901</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-6708338.post-109551475872708990</id><published>2004-09-18T14:39:00.000+01:00</published><updated>2004-09-18T14:39:18.726+01:00</updated><title type='text'>Validating using Business Rules</title><content type='html'>&lt;p&gt;I tend to get about at work (not in the, ahem, naughty sense!) and while in Norwich a client wanted to validate their document to ensure that the end users had filled in all of the correct details.  Simple standard stuff.  However, when I explained that validating the document using a pipeline would suspend the message at the first error, they didn't exactly jump with joy!&lt;/p&gt;They wanted to validate the document, but provide &lt;u&gt;all&lt;/u&gt; of the errors in one go to the client if the document failed validation.&lt;/p&gt;&lt;p&gt;In order to do this, we proposed following the pattern used by the Swift Accelerator for BizTalk.  The accelerator uses a disassembler that implements validation using business rules (run from the disassembler itself) and stores all errors in a separate document.  It does not fail at the first error, but simply tries all of its rules and outputs &lt;u&gt;all&lt;/u&gt; errors associated with the document in one go by returning the original document plus a document containing the errors.&lt;/p&gt;&lt;p&gt;This allows all sorts of interesting scenarios to occur, such as implementing an orchestration that handles errors allowing resubmission, notification to interested parties, etc.  Quite powerful!&lt;/p&gt;&lt;p&gt;In the case of my client, we suggested running the business rules from within orchestration, but the concept remains the same.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6708338-109551475872708990?l=thearchhacker.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6708338/posts/default/109551475872708990'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6708338/posts/default/109551475872708990'/><link rel='alternate' type='text/html' href='http://thearchhacker.blogspot.com/2004/09/validating-using-business-rules.html' title='Validating using Business Rules'/><author><name>Paul</name><uri>http://www.blogger.com/profile/12744829788574669901</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-6708338.post-109551403659173655</id><published>2004-09-18T14:27:00.000+01:00</published><updated>2004-09-18T14:27:16.590+01:00</updated><title type='text'>Filter Subscriptions on Orchestrations</title><content type='html'>&lt;p&gt;I've been working for a large defence client in Portsmouth in the UK and recently come across another limitation in the filter expressions that can be applied to an &lt;b&gt;activatable receive&lt;/b&gt; shape of an orchestration.&lt;/p&gt;&lt;p&gt;First some background though.  When you drag an operation from a port to an activatable receive, you are effectively creating a subscription for that orchestration in the message box.  When you deploy the orchestration, bind it and then enlist, the subscription will be created for that orchestration based on the message type that was defined on the operation that was bound to the receive shape.&lt;/p&gt;&lt;p&gt;This is important: the subscription is based on the &lt;b&gt;message type&lt;/b&gt; of the operation defined on the port type.  If you look at the subscription viewer and find your orchestration subscription (look for &lt;i&gt;ServiceType&lt;/i&gt; of &lt;b&gt;XLANG&lt;/b&gt; and the name will be prefixed with &lt;b&gt;Activate&lt;/b&gt;), then you'll notice that the subscription has been automatically created with a &lt;b&gt;MessageType&lt;/b&gt; filter.&lt;/p&gt;&lt;p&gt;Therein lies the problem.  You see, because the subscription has been based on the message type being received, you can't set a filter in the receive shape that points to, say an envelope's promoted properties.  This in my opinion is a serious flaw.  If I have an envelope that contains meta data about my message, then I want to subscribe to properties on the envelope, but actually receive the message contained in the body of the envelope.&lt;/p&gt;&lt;p&gt;If I want to do this, then I have to define the envelope schema as a normal schema, that is, &lt;u&gt;not&lt;/u&gt; a BizTalk Envelope schema.  I then ensure that the body element is extensible, in other words, appending an &lt;b&gt;&amp;lt;Any&amp;gt;&lt;/b&gt; element with &lt;i&gt;ProcessContents&lt;/i&gt; set to &lt;b&gt;Skip&lt;/b&gt; and the &lt;i&gt;Namespace&lt;/i&gt; to &lt;b&gt;##any&lt;/b&gt;.&lt;/p&gt;&lt;p&gt;Once this has been done, receive the envelope in the orchestration (defined on the receive shape and port type) and then extract, plus optionally validate, the body inside orchestration.&lt;/p&gt;&lt;p&gt;This has an advantage:&lt;/p&gt;&lt;p&gt;The body document can be validated at a 'business' level - effectively allowing any errors from the validation to be handled within the orchestration, rather than being automatically suspended.  I'll post some neat code that achieves this in a later post.&lt;/p&gt;&lt;p&gt;However, and this brings me all the way back to the point of my post, if I try and modularise my envelope schema by separating my header schema and then &lt;b&gt;importing&lt;/b&gt; it into the main envelope schema, I have a major problem.&lt;/p&gt;&lt;p&gt;The envelope schema exists in one namespace and the header schema in another.  The header schema has been imported into the envelope schema.  In so far as XSD is concerned, I have a valid schema.  In so far as BizTalk is concerned, it can see the header schema and can thus validate the contents (as opposed to using the Any element trick).&lt;/p&gt;&lt;p&gt;However, if I go to set a filter expression on the receive shape, then all of the promoted properties that are defined in the header schema &lt;u&gt;do not display&lt;/u&gt;.  Only promoted properties of the envelope schema will be displayed!&lt;/p&gt;&lt;p&gt;I've been bitten by filter subscriptions with BizTalk Envelopes and now with imported schemas.  I so wish this will be sorted out as it limits the flexibility of the schema design that could be possible, but due to restrictions imposed by BizTalk, isn't.&lt;/p&gt;&lt;p&gt;I would be interested to hear some other view points on this.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6708338-109551403659173655?l=thearchhacker.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6708338/posts/default/109551403659173655'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6708338/posts/default/109551403659173655'/><link rel='alternate' type='text/html' href='http://thearchhacker.blogspot.com/2004/09/filter-subscriptions-on-orchestrations.html' title='Filter Subscriptions on Orchestrations'/><author><name>Paul</name><uri>http://www.blogger.com/profile/12744829788574669901</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-6708338.post-109551148379054958</id><published>2004-09-18T13:44:00.000+01:00</published><updated>2004-09-18T13:44:43.790+01:00</updated><title type='text'>BizTalk Hotfix for Business Rules</title><content type='html'>&lt;p&gt;It's been a while since my last update, so I'll start off gently with news about a hotfix for business rules if you have installed .NET Framework 1.1 SP1.&lt;/p&gt;&lt;p&gt;Click &lt;a href="http://support.microsoft.com/default.aspx?scid=KB;EN-US;875540"&gt;here&lt;/a&gt; for more information.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6708338-109551148379054958?l=thearchhacker.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6708338/posts/default/109551148379054958'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6708338/posts/default/109551148379054958'/><link rel='alternate' type='text/html' href='http://thearchhacker.blogspot.com/2004/09/biztalk-hotfix-for-business-rules.html' title='BizTalk Hotfix for Business Rules'/><author><name>Paul</name><uri>http://www.blogger.com/profile/12744829788574669901</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-6708338.post-109163541492095429</id><published>2004-08-04T17:03:00.000+01:00</published><updated>2004-08-05T13:08:27.543+01:00</updated><title type='text'>BAM Deployment Issue</title><content type='html'>&lt;p&gt;I discovered a weird problem recently when deploying a BAM definition spreadsheet using the &lt;b&gt;bm.exe&lt;/b&gt; program.&lt;/p&gt;&lt;p&gt;Basically, I was getting multiple message boxes containing &lt;i&gt;fn_GetString&lt;/i&gt; in the title, plus some other blank message boxes until finally the process ended. It looked pretty terminal!&lt;/p&gt;&lt;p&gt;The problem turned out to be that on my machine the locale was set to &lt;b&gt;English (United Kingdom)&lt;/b&gt; and it looks like the BAM deployment process doesn't like it. The message boxes look like they come from Excel so I guess the BAM Excel spreadsheet macro code is to blame.&lt;/p&gt;&lt;p&gt;Changing the locale to &lt;b&gt;English (United States)&lt;/b&gt; solved the issue and the bm.exe program was able to export the BAM definition XML successfully from the spreadsheet.&lt;/p&gt;&lt;p&gt;However, I came across another problem. I was running the bm.exe program from the folder that contained my spreadsheet. This folder is different to the BAM folder in the installation folder: &lt;i&gt;\Program Files\Microsoft BizTalk Server 2004\Tracking&lt;/i&gt;. An error occurred which said that it couldn't find the &lt;b&gt;BamConfiguration.xml&lt;/b&gt; file in the current folder. It seems that it created it back in the BizTalk installation folder, so no wonder!&lt;/p&gt;&lt;p&gt;So, I copied the spreadsheet into the &lt;/b&gt;Tracking&lt;/b&gt; folder of BizTalk, ran the BAM deployment and it worked!&lt;/p&gt;&lt;p&gt;So I guess the morale of this tale is don't try and be creative with the tools. As long as you live in the US and don't try to do silly things like create application folders to store custom BAM spreadsheets, then you'll be fine ;-P&lt;/p&gt;&lt;p&gt;&lt;b&gt;&amp;lt;Edit&amp;gt;&lt;/b&gt;&lt;/p&gt;&lt;p&gt;I've just realised that the BamConfiguration.xml file is a settings file for BAM! Doh!  Thanks also to Carlo for pointing that mistake out as well :)&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6708338-109163541492095429?l=thearchhacker.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6708338/posts/default/109163541492095429'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6708338/posts/default/109163541492095429'/><link rel='alternate' type='text/html' href='http://thearchhacker.blogspot.com/2004/08/bam-deployment-issue.html' title='BAM Deployment Issue'/><author><name>Paul</name><uri>http://www.blogger.com/profile/12744829788574669901</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-6708338.post-109144989210646658</id><published>2004-08-02T13:30:00.000+01:00</published><updated>2004-08-02T13:31:32.106+01:00</updated><title type='text'>Documentation Refreshed on July 30th</title><content type='html'>&lt;p&gt;Looks like the documentation has been refreshed again on the 30th July.  See post below for the link.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6708338-109144989210646658?l=thearchhacker.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6708338/posts/default/109144989210646658'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6708338/posts/default/109144989210646658'/><link rel='alternate' type='text/html' href='http://thearchhacker.blogspot.com/2004/08/documentation-refreshed-on-july-30th.html' title='Documentation Refreshed on July 30th'/><author><name>Paul</name><uri>http://www.blogger.com/profile/12744829788574669901</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-6708338.post-109138606820677065</id><published>2004-08-01T19:47:00.000+01:00</published><updated>2004-08-01T19:48:31.596+01:00</updated><title type='text'>Received Unexpected Message Type '' in Orchestration</title><content type='html'>&lt;p&gt;This was an error that came up recently on a project with a client in sunny Rochdale in the UK.  Basically, the orchestration failed with the following error message:&lt;/p&gt;&lt;p&gt;&lt;span style="text-align: center; font-weight: bold; color: red"&gt;Received unexpected message type '' expected message type '%s'&lt;/span&gt;&lt;/p&gt;&lt;p&gt;In effect, orchestration had received a message that had not been resolved to a message type, hence it was unable to understand it.  The &lt;b&gt;%s&lt;/b&gt; placeholder contained the name of the message type that it was expecting.&lt;/p&gt;&lt;p&gt;This was quite confusing at first because the message that was being returned to BizTalk by way of a &lt;b&gt;solicit-response&lt;/b&gt; port was correct according to the schema.  Everything looked as if it should match up!&lt;/p&gt;&lt;p&gt;After scratching our heads for a bit, we discovered that the &lt;b&gt;response&lt;/b&gt; properties of the solicit-response messaging port was using the &lt;b&gt;Passthru&lt;/b&gt; pipeline.  This pipeline will not resolve the incoming message against a message type stored in the database!  Changing the pipeline to the &lt;b&gt;XMLReceive&lt;/b&gt; pipeline did the trick, and orchestration was able to receive the message as a response correctly.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6708338-109138606820677065?l=thearchhacker.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6708338/posts/default/109138606820677065'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6708338/posts/default/109138606820677065'/><link rel='alternate' type='text/html' href='http://thearchhacker.blogspot.com/2004/08/received-unexpected-message-type-in.html' title='Received Unexpected Message Type &apos;&apos; in Orchestration'/><author><name>Paul</name><uri>http://www.blogger.com/profile/12744829788574669901</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-6708338.post-109138600926428007</id><published>2004-08-01T19:46:00.000+01:00</published><updated>2004-08-01T19:46:49.270+01:00</updated><title type='text'>Delivery Notification Doesn't Appear with Specify Now Binding</title><content type='html'>&lt;p&gt;Now, I don't pretend to understand this, so if someone can enlighten me, I would appreciate it :)&lt;/p&gt;&lt;p&gt;I have a web port type defined in orchestration to a &lt;b&gt;OneWay web service&lt;/b&gt;.  When I create a port based on the web port type and I select &lt;b&gt;Specify Now&lt;/b&gt; in the port configuration, then the &lt;b&gt;Delivery Notification&lt;/b&gt; property doesn't appear.  If I go into the port properties window and change the binding to &lt;b&gt;Specify Later&lt;/b&gt;, the &lt;b&gt;Delivery Notification&lt;/b&gt; property appears!  Change the binding back, and it disappears again!  Eh?&lt;/p&gt;&lt;p&gt;My guess is that the delivery notification property is &lt;b&gt;implicitly&lt;/b&gt; set when using the SOAP adapter (which is the default using a web port type and specifying the binding in the orchestration), therefore the reason why the property disappears from the property window.  By setting the binding to specify later, it is unknown what adapter will be used, therefore offering the delivery notification property to be changed.  From what I understand, if a SOAP fault occurs in the SOAP adapter, the SOAP fault is automatically returned to BizTalk, so would explain why the property doesn't appear if the adapter used is SOAP when specifying the binding in orchestration.&lt;/p&gt;&lt;p&gt;However, my dilemma is that I've specified that the web service is &lt;b&gt;OneWay&lt;/b&gt; (which the port type understands and only offers a request message to bind to).  In this instance, I have no response, but would still like to know if the adapter was able to deliver the request, hence the reason for using the delivery notification mechanism in this scenario.&lt;/p&gt;&lt;p&gt;&lt;b&gt;Is this a bug?&lt;/b&gt; Answers on a postcard please...&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6708338-109138600926428007?l=thearchhacker.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6708338/posts/default/109138600926428007'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6708338/posts/default/109138600926428007'/><link rel='alternate' type='text/html' href='http://thearchhacker.blogspot.com/2004/08/delivery-notification-doesnt-appear.html' title='Delivery Notification Doesn&apos;t Appear with Specify Now Binding'/><author><name>Paul</name><uri>http://www.blogger.com/profile/12744829788574669901</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-6708338.post-109138590010169858</id><published>2004-08-01T19:45:00.000+01:00</published><updated>2004-08-01T19:45:00.106+01:00</updated><title type='text'>Multiple Activate Receives and Returning Soap Faults Oddity</title><content type='html'>&lt;p&gt;Imagine a scenario where you have an orchestration exposed as a web service that has two public ports.  Each port accepts a message of the same type, but one port is used to send &lt;i&gt;new&lt;/i&gt; messages, and the other is used to send &lt;i&gt;update&lt;/i&gt; messages.  The port type for the port has an access modifier of &lt;b&gt;public&lt;/b&gt;, is a &lt;b&gt;request-response&lt;/b&gt; port type, plus has a &lt;b&gt;Fault&lt;/b&gt; message defined in addition to the &lt;b&gt;request&lt;/b&gt; and &lt;b&gt;response&lt;/b&gt; messages.&lt;/p&gt;&lt;p&gt;In the orchestration, you create a &lt;b&gt;listen&lt;/b&gt; shape and then add two &lt;b&gt;activatable receives&lt;/b&gt; - one on each branch with one pointing to the request message of the &lt;i&gt;new&lt;/i&gt; port, and one to the request message of the &lt;i&gt;update&lt;/i&gt; port.  So far so good.&lt;/p&gt;&lt;p&gt;At this point you're going to want to create a couple of &lt;b&gt;send&lt;/b&gt; shapes in order to send back either a &lt;b&gt;request&lt;/b&gt; message or a &lt;b&gt;fault&lt;/b&gt; message.  However, as I've just discovered, there's a slight catch, and it is this:&lt;/p&gt;&lt;p&gt;You have configured a scope shape with an exception handler block in each of the listen branches.  You have it configured such that at the end of the scope you &lt;b&gt;send back a response message&lt;/b&gt; and in the exception handler block you &lt;b&gt;return a fault message&lt;/b&gt; for BizTalk to wrap in a SOAP exception and return to the client.  This seems perfectly reasonable on the face of it.  The problem occurs at compilation time.&lt;/p&gt;&lt;p&gt;The compiler basically barfs with &lt;i&gt;must receive before sending a fault message on an implemented port&lt;/i&gt;.  What?  Well, I've certainly performed a receive before sending, so why is it complaining?  If I move the send of the response after the end of the scope but still within the listen branch, then it now barfs with &lt;i&gt;must receive before sending a message whose messagetype corresponds to a requestresponse operation on an implemented port&lt;/i&gt;.&lt;/p&gt;&lt;p&gt;&lt;b&gt;It appears that it doesn't like having two send shapes where one may execute before the other, therefore nullifying the receive for the second send shape.&lt;/b&gt;&lt;/p&gt;&lt;p&gt;So, in order to get around this, you need to put the two send shapes (response and fault message sends) in either branch of a decision shape.  So, at the end of the scope, set a flag to indicate &lt;i&gt;success&lt;/i&gt; and in the exception handler set the same flag to indicate that a &lt;i&gt;fault&lt;/i&gt; has occurred.  Then, after the scope, create a decision shape to test the flag and either send the response or send the fault.&lt;/p&gt;&lt;p&gt;Just out of interest, I moved the decision down in the orchestration until it was after the end of the listen shape (that is, it wasn't directly in any of the branches of the listen shape, but just located 'after').  In this case I get both of the compiler errors detailed earlier which is quite interesting.  Probably as a result of the fact that it could have been possible to exit the listen from another branch, thereby not executing the receive shape for which we're returning a response.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6708338-109138590010169858?l=thearchhacker.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6708338/posts/default/109138590010169858'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6708338/posts/default/109138590010169858'/><link rel='alternate' type='text/html' href='http://thearchhacker.blogspot.com/2004/08/multiple-activate-receives-and.html' title='Multiple Activate Receives and Returning Soap Faults Oddity'/><author><name>Paul</name><uri>http://www.blogger.com/profile/12744829788574669901</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-6708338.post-109138554668680879</id><published>2004-08-01T19:39:00.000+01:00</published><updated>2004-08-01T19:42:26.116+01:00</updated><title type='text'>Returning SOAP Faults from an Orchestration Published as a Web Service</title><content type='html'>&lt;p&gt;I was asked the question recently: &lt;i&gt;how can I return a SOAP fault from a web service call if the orchestration that has been published has failed?&lt;/i&gt;&lt;/p&gt;&lt;p&gt;Well, this is seemingly a lot easier than you would think. A &lt;b&gt;request-response&lt;/b&gt; port type in orchestration allows multiple &lt;b&gt;Fault Messages&lt;/b&gt; to be defined. These fault messages can be based on any message type (for example, System.String) and are returned to the web service in the same manner as returning a response to a web service, that is, via a &lt;b&gt;send shape&lt;/b&gt; to the appropriate fault message on the &lt;/b&gt;operation&lt;/b&gt; defined on the port type.&lt;/p&gt;&lt;p&gt;If you were to take a look at the port type definition in the orchestration view tab in VS.NET, then you'll see the various messages defined on the operation of the port type. Each message has an associated icon that represents the &lt;b&gt;message direction&lt;/b&gt;:&lt;/p&gt;&lt;p&gt;&lt;ul&gt;&lt;li&gt;&lt;span style="FONT-WEIGHT: bold; TEXT-ALIGN: center; color:blue;" &gt;blue arrow&lt;/span&gt; for request&lt;/li&gt;&lt;li&gt;&lt;span style="FONT-WEIGHT: bold; TEXT-ALIGN: center; color:green;" &gt;green arrow&lt;/span&gt; for response&lt;/li&gt;&lt;li&gt;&lt;span style="FONT-WEIGHT: bold; TEXT-ALIGN: center; color:red;" &gt;red cross&lt;/span&gt; for fault&lt;/li&gt;&lt;/ul&gt;&lt;/p&gt;&lt;p&gt;By simply creating the appropriate message and populating it, then sending the message to the fault message of the port, you are able to return SOAP faults to the client of the web service. Easy, eh?&lt;/p&gt;&lt;br /&gt;&lt;/i&gt;&lt;/i&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6708338-109138554668680879?l=thearchhacker.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6708338/posts/default/109138554668680879'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6708338/posts/default/109138554668680879'/><link rel='alternate' type='text/html' href='http://thearchhacker.blogspot.com/2004/08/returning-soap-faults-from_01.html' title='Returning SOAP Faults from an Orchestration Published as a Web Service'/><author><name>Paul</name><uri>http://www.blogger.com/profile/12744829788574669901</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-6708338.post-109138522879189070</id><published>2004-08-01T19:33:00.000+01:00</published><updated>2004-08-01T19:33:48.796+01:00</updated><title type='text'>Refreshed Documentation as of July 2004</title><content type='html'>&lt;p&gt;Follow this &lt;a href="http://www.microsoft.com/downloads/details.aspx?familyid=cdd47461-f4e2-4bc6-b5c2-2018aff2823d&amp;displaylang=en=""&gt;link&lt;/a&gt; to download a new update to the product documentation.&lt;/p&gt;&lt;p&gt;However, for some reason, we're having some problems installing it.  In addition, why are the following services shut down during a documentation refresh?!&lt;/p&gt;&lt;ul&gt;     &lt;li&gt;BizTalk NT Host Instances&lt;/li&gt;    &lt;li&gt;Enterprise SSO&lt;/li&gt;    &lt;li&gt;FTP Publishing Service&lt;/li&gt;    &lt;li&gt;HTTP SSL&lt;/li&gt;    &lt;li&gt;IIS Admin Service&lt;/li&gt;    &lt;li&gt;SMTP&lt;/li&gt;    &lt;li&gt;WMI&lt;/li&gt;    &lt;li&gt;World Wide Web Publishing Service&lt;/li&gt;&lt;/ul&gt;&lt;/p&gt;&lt;p&gt;Seems a bit overkill to me!!  Imagine trying to get away with that in production!&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6708338-109138522879189070?l=thearchhacker.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6708338/posts/default/109138522879189070'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6708338/posts/default/109138522879189070'/><link rel='alternate' type='text/html' href='http://thearchhacker.blogspot.com/2004/08/refreshed-documentation-as-of-july.html' title='Refreshed Documentation as of July 2004'/><author><name>Paul</name><uri>http://www.blogger.com/profile/12744829788574669901</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-6708338.post-108990001394168423</id><published>2004-07-15T15:00:00.000+01:00</published><updated>2004-07-15T15:00:13.946+01:00</updated><title type='text'>Using a Map with Large Messages</title><content type='html'>&lt;p&gt;I was intrigued the other day about how maps were behaving in BizTalk Server 2004 with regard to potential memory problems.  BizTalk Server 2004 gives us great large message support through streaming messages into the message box.  However, what if we specify a map in the Receive port, or indeed anywhere in BizTalk (Orchestration or Send Port)?&lt;/p&gt;&lt;p&gt;Well, BizTalk implements maps as XSLT stylesheets, and the way I understand it, the code uses the &lt;b&gt;XslTransform&lt;/b&gt; class to perform the transformation and will load the input message into the DOM.  This will require a significant memory footprint if the message is large!&lt;/p&gt;&lt;p&gt;This is often overlooked and is worth pointing out...&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6708338-108990001394168423?l=thearchhacker.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6708338/posts/default/108990001394168423'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6708338/posts/default/108990001394168423'/><link rel='alternate' type='text/html' href='http://thearchhacker.blogspot.com/2004/07/using-map-with-large-messages.html' title='Using a Map with Large Messages'/><author><name>Paul</name><uri>http://www.blogger.com/profile/12744829788574669901</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-6708338.post-108981851227076666</id><published>2004-07-14T16:21:00.000+01:00</published><updated>2004-07-14T16:21:52.276+01:00</updated><title type='text'>Fed up of deploying BTS assemblies the 'standard' way?</title><content type='html'>&lt;p&gt;Well, this is a little tip about deploying a BizTalk assembly quickly and easily without having to unbind, undeploy, redeploy, rebind and all that wonderful stuff.&lt;/p&gt;&lt;p&gt;If you recompile a BizTalk assembly that &lt;i&gt;does not affect the current bindings&lt;/i&gt; then all you need to do is the following:&lt;/p&gt; &lt;p&gt;    &lt;ul&gt;        &lt;li&gt;Open a view onto the GAC by clicking &lt;b&gt;Start-&amp;gt;Run&lt;/b&gt; and then typing &lt;b&gt;assembly&lt;/b&gt;&lt;/li&gt;        &lt;li&gt;Compile BizTalk assembly&lt;/li&gt;        &lt;li&gt;Drag and drop the compiled assembly from the bin\Development folder (we're developing, right?) into the assembly view window&lt;/li&gt;        &lt;li&gt;Restart BizTalk NT service from BizTalk Administration snap-in, Services snap-in or the command line using &lt;b&gt;net stop&lt;/b&gt;    &lt;/ul&gt;&lt;/p&gt;&lt;p&gt;It really is as simple as that!&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6708338-108981851227076666?l=thearchhacker.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6708338/posts/default/108981851227076666'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6708338/posts/default/108981851227076666'/><link rel='alternate' type='text/html' href='http://thearchhacker.blogspot.com/2004/07/fed-up-of-deploying-bts-assemblies.html' title='Fed up of deploying BTS assemblies the &apos;standard&apos; way?'/><author><name>Paul</name><uri>http://www.blogger.com/profile/12744829788574669901</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-6708338.post-108980599838049129</id><published>2004-07-14T12:53:00.000+01:00</published><updated>2004-07-14T12:53:18.386+01:00</updated><title type='text'>DNJ Interview with Solidsoft CTO Andy James</title><content type='html'>&lt;p&gt;Ok, ok, so he's my boss ;-)  Still, it's a good article about BizTalk and SOA from someone who's been about, if you know what I mean ;-)&lt;/p&gt;&lt;p&gt;&lt;a href="http://dnjonline.com/articles/tools/jun04_biztalksolidsoft.asp"&gt;DNJ Interview Link&lt;/a&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6708338-108980599838049129?l=thearchhacker.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6708338/posts/default/108980599838049129'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6708338/posts/default/108980599838049129'/><link rel='alternate' type='text/html' href='http://thearchhacker.blogspot.com/2004/07/dnj-interview-with-solidsoft-cto-andy.html' title='DNJ Interview with Solidsoft CTO Andy James'/><author><name>Paul</name><uri>http://www.blogger.com/profile/12744829788574669901</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-6708338.post-108963140826840518</id><published>2004-07-12T12:23:00.000+01:00</published><updated>2004-07-12T12:23:28.276+01:00</updated><title type='text'>Integration Patterns</title><content type='html'>&lt;p&gt;    Microsoft has released a whole set of integration patterns &lt;a href="http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnpag/html/intpatt.asp"&gt;here&lt;/a&gt; as part of their Platform Architecture Guidance (PAG) efforts.&lt;/p&gt;&lt;p&gt;    Well worth a browse!&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6708338-108963140826840518?l=thearchhacker.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6708338/posts/default/108963140826840518'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6708338/posts/default/108963140826840518'/><link rel='alternate' type='text/html' href='http://thearchhacker.blogspot.com/2004/07/integration-patterns.html' title='Integration Patterns'/><author><name>Paul</name><uri>http://www.blogger.com/profile/12744829788574669901</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-6708338.post-108962588256162880</id><published>2004-07-12T10:51:00.000+01:00</published><updated>2004-07-12T10:51:22.566+01:00</updated><title type='text'>One-Way Web Methods</title><content type='html'>&lt;p&gt;    I made quite a cool little discovery the other day with &lt;b&gt;OneWay&lt;/b&gt; web methods in ASP.NET.  When I hooked the web service up to my orchestration, I discovered that BizTalk had actually taken the OneWay interaction style into account and &lt;i&gt;only offered a request message type&lt;/i&gt;, rather than both a request and response message type.&lt;/p&gt;&lt;p&gt;    Many people probably know this already, but I found this to be really cool!  How many times have I hooked up a web service with an orchestration and ignored the response because the method does not return any value?!  More times than I care to remember...&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6708338-108962588256162880?l=thearchhacker.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6708338/posts/default/108962588256162880'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6708338/posts/default/108962588256162880'/><link rel='alternate' type='text/html' href='http://thearchhacker.blogspot.com/2004/07/one-way-web-methods.html' title='One-Way Web Methods'/><author><name>Paul</name><uri>http://www.blogger.com/profile/12744829788574669901</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-6708338.post-108850617468668781</id><published>2004-06-29T11:49:00.000+01:00</published><updated>2004-06-29T11:49:34.963+01:00</updated><title type='text'>KB article for installing BizTalk on WinXP SP2</title><content type='html'>&lt;p&gt;This &lt;a href="http://support.microsoft.com/default.aspx?scid=kb;EN-US;841893"&gt;knowledge base article&lt;/a&gt; details how to modify the registry (eek!) to get the Enterprise Single Sign-On service to work after installing Windows XP SP2.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6708338-108850617468668781?l=thearchhacker.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6708338/posts/default/108850617468668781'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6708338/posts/default/108850617468668781'/><link rel='alternate' type='text/html' href='http://thearchhacker.blogspot.com/2004/06/kb-article-for-installing-biztalk-on.html' title='KB article for installing BizTalk on WinXP SP2'/><author><name>Paul</name><uri>http://www.blogger.com/profile/12744829788574669901</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-6708338.post-108567331189693810</id><published>2004-05-27T16:55:00.000+01:00</published><updated>2004-05-27T16:55:11.903+01:00</updated><title type='text'>WSE Adapter for BizTalk Server 2004 Beta Program</title><content type='html'>&lt;p&gt;Ok, it looks like Scott Woodgate has released details about the WSE Adapter for BizTalk beta program over on his blog &lt;a href="http://blogs.msdn.com/scottwoo/archive/2004/05/24/140500.aspx"&gt;here&lt;/a&gt;.&lt;/p&gt;&lt;p&gt;The WSE Adapter has a dependency on the WSE 2.0 release that has just recently been made available on the &lt;a href="http://msdn.microsoft.com/webservices/building/wse/"&gt;MSDN site&lt;/a&gt;.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6708338-108567331189693810?l=thearchhacker.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6708338/posts/default/108567331189693810'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6708338/posts/default/108567331189693810'/><link rel='alternate' type='text/html' href='http://thearchhacker.blogspot.com/2004/05/wse-adapter-for-biztalk-server-2004.html' title='WSE Adapter for BizTalk Server 2004 Beta Program'/><author><name>Paul</name><uri>http://www.blogger.com/profile/12744829788574669901</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-6708338.post-108567267586967014</id><published>2004-05-27T16:44:00.000+01:00</published><updated>2004-05-27T16:44:35.876+01:00</updated><title type='text'>WSE 2.0 Released!</title><content type='html'>&lt;p&gt;Although this isn't strictly related to BizTalk (watch this space though!), it's a significant release with regards to security in web services (&lt;b&gt;WS-Security&lt;/b&gt; is implemented to the &lt;b&gt;OASIS 2004 standard&lt;/b&gt;) and a little thing called SOAP Messaging.&lt;/p&gt;&lt;p&gt;SOAP Messaging allows us to move closer to the SOA goal of defining web services that can be asynchronous, loosely coupled and interact using XML based messaging; rather than RPC over HTTP (current .NET web services implementation).  Ok, I know that RPC over HTTP is effectively SOAP-RPC and is implemented as an XML message, but there &lt;i&gt;is&lt;/i&gt; an important difference there.  SOAP-RPC defines a format(s) for representing a method call, its parameters and their datatypes.  SOAP Messaging is more lightweight in that the body of the SOAP message is simply an XML document that can be anything - say, an invoice.  There is no SOAP-RPC encoding involved.  In an SOA world, the XML messages are defined using &lt;i&gt;schema&lt;/i&gt; and the behaviour of the web service as &lt;i&gt;contract&lt;/i&gt;, and WSE 2.0 gets us on that road.&lt;/p&gt;&lt;p&gt;Therefore, in my view, WSE 2.0 becomes quite a powerful platform for building web services &lt;i&gt;today&lt;/i&gt; in anticipation of Indigo and the nirvana of an SOA future...&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6708338-108567267586967014?l=thearchhacker.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6708338/posts/default/108567267586967014'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6708338/posts/default/108567267586967014'/><link rel='alternate' type='text/html' href='http://thearchhacker.blogspot.com/2004/05/wse-20-released.html' title='WSE 2.0 Released!'/><author><name>Paul</name><uri>http://www.blogger.com/profile/12744829788574669901</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-6708338.post-108446724548039366</id><published>2004-05-13T17:27:00.000+01:00</published><updated>2004-05-13T17:54:05.480+01:00</updated><title type='text'>Persistence in Orchestration</title><content type='html'>&lt;p&gt;Just looking at the BizTalk help file (the latest) and was quite interested in how persistence was handled in orchestration in 2004.  In 2002 a small change was made (over 2000) to make the persistence of state more efficient by allowing the persistence to be dropped at the start of a transaction.  In 2004, it seems the persistence of orchestration state is better thought out with regard to resiliency of an orchestration.&lt;/p&gt;&lt;p&gt;It's one of those things that you know happens, but you're never quite sure exactly in what situations orchestration state is saved to the message box.&lt;/p&gt;&lt;p&gt;Thankfully, the latest BizTalk Server 2004 help addresses this, and can be found &lt;a href="http://www.msdn.microsoft.com/library/en-us/sdk/htm/ebiz_prog_orch_rrdy.asp?frame=true"&gt;here&lt;/a&gt;.  This is well worth a read if you're like me and want to know a little bit more about what happens under the covers.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6708338-108446724548039366?l=thearchhacker.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6708338/posts/default/108446724548039366'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6708338/posts/default/108446724548039366'/><link rel='alternate' type='text/html' href='http://thearchhacker.blogspot.com/2004/05/persistence-in-orchestration.html' title='Persistence in Orchestration'/><author><name>Paul</name><uri>http://www.blogger.com/profile/12744829788574669901</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-6708338.post-108446120153133913</id><published>2004-05-13T14:49:00.000+01:00</published><updated>2004-05-13T16:13:21.530+01:00</updated><title type='text'>Delivery Notifications in Orchestration</title><content type='html'>&lt;p&gt;Well, this was a little gem that was pointed out to me by a buddy from Microsoft UK who said that surely this little snippet of information was worth a drive in my new car!&lt;/p&gt;&lt;p&gt;Well, I'm not so sure, but it's useful nonetheless ;-)&lt;/p&gt;&lt;p&gt;So, onto the topic in hand.  A documented feature of &lt;b&gt;Send Ports&lt;/b&gt; in &lt;b&gt;Orchestrations&lt;/b&gt; is that it is possible for an acknowledgement to be returned to the running orchestration when a message has been transmitted to its destination.  It's often been the case (in previous versions) that it would be useful to know when a message has been transmitted, and if there is a transmission failure and the message goes into the suspend queue, then to be able to take corrective action in the orchestration.  With &lt;b&gt;Delivery Notifications&lt;/b&gt; it is possible to do that!&lt;/p&gt;&lt;p&gt;&lt;h4&gt;How does it work?&lt;/h4&gt;&lt;/p&gt;&lt;p&gt;Well, when this option has been switched on, a context property called &lt;b&gt;BTS.AckRequired&lt;/b&gt; is set that informs the adapter that a transmission acknowledgement is required.  Once the message has been transmitted successfully an &lt;b&gt;'ack'&lt;/b&gt; is returned that the engine uses to progress the orchestration.  If the message fails to be transmitted (after the retry count has been exhausted), then a &lt;b&gt;'nack'&lt;/b&gt; is returned instead.  If a nack is received by the orchestration engine, then a &lt;b&gt;DeliveryFailureException&lt;/b&gt; is thrown that can be caught in the orchestration using an &lt;b&gt;Exception Block Handler&lt;/b&gt; in an enclosing non-atomic scope.  The non-atomic enclosing scope is not exited until a ack/nack is received - which makes this very useful as the orchestration won't continue and will just block.  &lt;i&gt;The documentation states that an atomic scope is required for the send shape although I have found that it also seems to work in a non-atomic scope as well.&lt;/i&gt;&lt;/p&gt;&lt;p&gt;&lt;h4&gt;How do I do it?&lt;/h4&gt;&lt;/p&gt;&lt;p&gt;In orchestration, perform the following steps to delivery notification heaven:&lt;/p&gt;&lt;p&gt;&lt;ol&gt;&lt;li&gt;Set up a &lt;b&gt;port&lt;/b&gt; that is used to send messages.&lt;/li&gt;&lt;li&gt;Look at the port properties, and set the &lt;b&gt;Delivery Notification&lt;/b&gt; property to &lt;b&gt;Transmitted&lt;/b&gt;.&lt;/li&gt;&lt;li&gt;Create a non-atomic scope shape with the transaction type set to &lt;b&gt;Long Running&lt;/b&gt;.&lt;/li&gt;&lt;li&gt;Add an &lt;b&gt;exception handler block&lt;/b&gt; to the scope to catch exceptions of type &lt;b&gt;DeliveryFailureException&lt;/b&gt;.&lt;/li&gt;&lt;li&gt;Add a &lt;b&gt;send&lt;/b&gt; shape inside the scope and hook it up to the port.&lt;/li&gt;&lt;/ol&gt;&lt;/p&gt;&lt;p&gt;Don't forget that the non-atomic scope (or the orchestration if no scope is specified) will not complete until either an &lt;b&gt;ack&lt;/b&gt; or a &lt;b&gt;nack&lt;/b&gt; is received.  Very useful for running some sort of corrective action in case of transmission failure.  Also, I've not tried, but I wonder if, rather than putting the corrective logic in the exception block, whether the &lt;b&gt;succeeded()&lt;/b&gt; XLANG/s expression could be used to test if the scope had failed, and then perform corrective action but in the main flow of the orchestration.  Sounds feasible I guess...&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6708338-108446120153133913?l=thearchhacker.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6708338/posts/default/108446120153133913'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6708338/posts/default/108446120153133913'/><link rel='alternate' type='text/html' href='http://thearchhacker.blogspot.com/2004/05/delivery-notifications-in.html' title='Delivery Notifications in Orchestration'/><author><name>Paul</name><uri>http://www.blogger.com/profile/12744829788574669901</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-6708338.post-108366437607542579</id><published>2004-05-04T10:52:00.000+01:00</published><updated>2004-05-04T10:57:35.293+01:00</updated><title type='text'>Exposing Orchestrations as Web Services Update!</title><content type='html'>&lt;p&gt;I received a comment from &lt;b&gt;Scott Colestock&lt;/b&gt; (thanks Scott!) on the blog entry to do with multiple schemas with the same root name and namespace, and then BizTalk failing at runtime because 2 schemas exist.&lt;/p&gt;&lt;p&gt;Basically, another workaround to the problem is to ensure that you use a custom pipeline that uses the XML Disassembler or Assembler (depending on which way you're going!) that specifies exactly what schema to use to resolve the message name.&lt;/p&gt;Scott's article which covers this in detail can be found &lt;a href="http://www.traceofthought.net/PermaLink,guid,cfa8a62a-af33-44b8-a40e-ede8d1b2867c.aspx"&gt;here&lt;/a&gt;.&lt;/p&gt;&lt;p&gt;Thanks again Scott :-)&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6708338-108366437607542579?l=thearchhacker.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6708338/posts/default/108366437607542579'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6708338/posts/default/108366437607542579'/><link rel='alternate' type='text/html' href='http://thearchhacker.blogspot.com/2004/05/exposing-orchestrations-as-web.html' title='Exposing Orchestrations as Web Services Update!'/><author><name>Paul</name><uri>http://www.blogger.com/profile/12744829788574669901</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-6708338.post-108366350173633919</id><published>2004-05-04T10:38:00.000+01:00</published><updated>2004-05-04T10:45:04.623+01:00</updated><title type='text'>Supported Operating Systems for FTP Adapter</title><content type='html'>&lt;p&gt;The following knowledge base article on the Microsoft website lists the operating systems that are supported by the FTP adapter for sending and receiving files.&lt;/p&gt;&lt;p&gt;Click &lt;a href="http://support.microsoft.com/default.aspx?scid=kb;EN-US;841478"&gt;here&lt;/a&gt; for the article.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6708338-108366350173633919?l=thearchhacker.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6708338/posts/default/108366350173633919'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6708338/posts/default/108366350173633919'/><link rel='alternate' type='text/html' href='http://thearchhacker.blogspot.com/2004/05/supported-operating-systems-for-ftp.html' title='Supported Operating Systems for FTP Adapter'/><author><name>Paul</name><uri>http://www.blogger.com/profile/12744829788574669901</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-6708338.post-108323162755174115</id><published>2004-04-29T10:40:00.000+01:00</published><updated>2004-04-29T10:44:44.153+01:00</updated><title type='text'>BizTalk Subscription Viewer Tool</title><content type='html'>&lt;p&gt;Another tool that is a life-saver when it comes to working out how messages that are submitted into BizTalk are matched to 'listening' &lt;strong&gt;Orchestrations&lt;/strong&gt; and &lt;strong&gt;Send Ports&lt;/strong&gt; is the BizTalk Subscription Viewer utility &lt;strong&gt;BTSSubcriptionViewer.exe&lt;/strong&gt;.&lt;/p&gt;&lt;p&gt;This tool can be found in the following folder:&lt;/p&gt;&lt;p&gt;&lt;strong&gt;\Program Files\Microsoft BizTalk Server 2004\SDK\Utilities&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;Once loaded, this tool is a Windows Application that has a split pane view.  Initially the views are empty.  Go to the &lt;strong&gt;Main-&gt;Load&lt;/strong&gt; menu to load all of the subscriptions from the message box database.&lt;/p&gt;&lt;p&gt;Ok, this is more like it.  A list of subscriptions are displayed in the top pane.  If you select a subscription, then the subscription filter expression is display in the bottom pane.  This effectively gives you an idea as to what properties BizTalk is looking to match in order to fire the subcriber.&lt;/p&gt;&lt;p&gt;There are some items in the list that are worth pointing out.  Some subscriptions may be prefixed with &lt;strong&gt;Activate&lt;/strong&gt;.  These are Orchestration (XLANG) subscriptions where BizTalk will activate a new instance of an orchestration when the properties of a message match the subscription.  There are also &lt;strong&gt;EPM&lt;/strong&gt; type subscriptions.  EPM stands for the Endpoint Manager and is responsible for the messaging subservice in BizTalk Server.  Therefore, these subscriptions are for Send Ports that are waiting to be fired.  There is also an internal subscription that has a service type of a GUID.  Looking at the subscription filter expression for these (there will be &lt;strong&gt;one per host&lt;/strong&gt;) suggests that this subscription manages the cache refresh of the host application (where each service of a host will periodically refresh its internal cache from the Management database).  However, I'm only making an educated guess of the cache refresh subscription.  Please comment here and correct me if I'm wrong :-)&lt;/p&gt;&lt;p&gt;So, why is the subscription viewer so important?  Well, if you've ever had to implement a complex &lt;strong&gt;Content Based Routing&lt;/strong&gt; project, or worked on &lt;strong&gt;Correlation&lt;/strong&gt; projects, then you'll understand why.  It is essential to be able to take a view of the current subscriptions in the message box especially when waiting on a message that is due to be correlated.  If things go wrong (and they almost always do when initially developing the solution) then this tool can be an absolute life-saver!!&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6708338-108323162755174115?l=thearchhacker.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6708338/posts/default/108323162755174115'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6708338/posts/default/108323162755174115'/><link rel='alternate' type='text/html' href='http://thearchhacker.blogspot.com/2004/04/biztalk-subscription-viewer-tool.html' title='BizTalk Subscription Viewer Tool'/><author><name>Paul</name><uri>http://www.blogger.com/profile/12744829788574669901</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-6708338.post-108322943889377205</id><published>2004-04-29T10:03:00.000+01:00</published><updated>2004-04-29T10:10:42.280+01:00</updated><title type='text'>Pipeline Command Line Tools</title><content type='html'>&lt;p&gt;Ok, for those that don't know, there are some really handy pipeline tools in the SDK under the folder:&lt;/p&gt;&lt;p&gt;&lt;strong&gt;\Program Files\Microsoft BizTalk Server 2004\SDK\Utilities\PipelineTools&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;These tools allow you to test your pipeline components and, even more handily, flat file schemas without having to set up the BizTalk Server environment.  They are pretty much essential when developing flat file schemas (particularly when you have a header, trailer and body schema).&lt;/p&gt;&lt;p&gt;Here is a list of the pipeline tools available:&lt;/p&gt;&lt;p&gt;&lt;ul&gt;&lt;li&gt;&lt;strong&gt;DSDump.exe&lt;/strong&gt; - this tool outputs a textual description of the schema.&lt;/li&gt;&lt;li&gt;&lt;strong&gt;Pipeline.exe&lt;/strong&gt; - this tool executes a pipeline and produces one or more output files.  Very useful for testing custom pipelines.&lt;/li&gt;&lt;li&gt;&lt;strong&gt;XMLDasm.exe&lt;/strong&gt; - this tool executes the XML Disassembler component by simulating a receive pipeline.&lt;/li&gt;&lt;li&gt;&lt;strong&gt;XMLAsm.exe&lt;/strong&gt; - this tool executes the XML Assembler component by simulating a send pipeline.&lt;/li&gt;&lt;li&gt;&lt;strong&gt;FFDasm.exe&lt;/strong&gt; - this tool executes the Flat File Disassembler component by simulating a receive pipeline. &lt;strong&gt;Essential for flat file development!&lt;/strong&gt;&lt;/li&gt;&lt;li&gt;&lt;strong&gt;FFAsm.exe&lt;/strong&gt; - this tool executes the Flat File Assembler component by simulating a send pipeline.  &lt;strong&gt;Again, essential for flat file development!&lt;/strong&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt; The &lt;strong&gt;pipeline.exe&lt;/strong&gt; tool does not access the BizTalk Server databases, so executing a pipeline that contains the BizTalk Framework Assembler/Disassembler may not work as it accesses the BizTalk Management database during runtime to match up receipts to documents.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6708338-108322943889377205?l=thearchhacker.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6708338/posts/default/108322943889377205'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6708338/posts/default/108322943889377205'/><link rel='alternate' type='text/html' href='http://thearchhacker.blogspot.com/2004/04/pipeline-command-line-tools.html' title='Pipeline Command Line Tools'/><author><name>Paul</name><uri>http://www.blogger.com/profile/12744829788574669901</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-6708338.post-108236479295201293</id><published>2004-04-19T09:53:00.000+01:00</published><updated>2004-04-19T10:01:59.936+01:00</updated><title type='text'>Updated BizTalk Server 2004 Tutorial</title><content type='html'>&lt;p&gt;An updated BizTalk Server 2004 tutorial is now available.&lt;/p&gt;&lt;p&gt;Download &lt;a href="http://www.microsoft.com/downloads/details.aspx?familyid=9C64562C-3FA7-49BA-885E-82213D00776E&amp;displaylang=en"&gt;here&lt;/a&gt;.&lt;/p&gt;&lt;p&gt;Ok, ok, so it's been out a while.....I know ;-)&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6708338-108236479295201293?l=thearchhacker.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6708338/posts/default/108236479295201293'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6708338/posts/default/108236479295201293'/><link rel='alternate' type='text/html' href='http://thearchhacker.blogspot.com/2004/04/updated-biztalk-server-2004-tutorial.html' title='Updated BizTalk Server 2004 Tutorial'/><author><name>Paul</name><uri>http://www.blogger.com/profile/12744829788574669901</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-6708338.post-108202911450676296</id><published>2004-04-15T12:38:00.000+01:00</published><updated>2004-04-15T12:42:31.826+01:00</updated><title type='text'>Exposing Orchestrations as Web Services Gotcha!</title><content type='html'>&lt;p&gt;A colleague came to me today with a problem to do with duplicate schemas at runtime when running his orchestrations.&lt;/p&gt;&lt;p&gt;The problem turned out that during generation of the proxy (when adding a web reference to a BizTalk project) to a web service that was automatically generated by the &lt;strong&gt;BizTalk Web Services Publishing Wizard&lt;/strong&gt;, then if the web service exposes a complex type such as a message, then the proxy automatically generates a schema called &lt;strong&gt;Reference.xsd&lt;/strong&gt; that contains a local definition of the message.&lt;/p&gt;&lt;p&gt;However, this may all seem fairly benign on the surface.  But, the proxy generator uses the WSDL to create the proxy orchestration (Reference.odx) and the schema (Reference.xsd), and the WSDL was created based on a web service that has been automatically generated by the BizTalk Web Services Publishing Wizard.  The WSDL for the web service contains definitions for the messages that are required as parameters to the web service operations, and they are defined in the WSDL with the &lt;strong&gt;same root name and namespace as the real schema that they are based on!&lt;/strong&gt;&lt;/p&gt;So, when you compile the orchestration that is consuming the web service, a Reference.xsd schema containing the definitions for the messages expected as parameters to the web service, are compiled into the assembly as well.&lt;/p&gt;&lt;p&gt;This is a big issue, because once both assemblies are deployed (one containing the consumed orchestration that includes the original schema for the message and one containing the orchestration that is calling the web service and includes a proxy generated schema for the message) then at runtime BizTalk will fail because &lt;strong&gt;2 schemas exist&lt;/strong&gt; in the Management database with the same root element and namespace names!&lt;/p&gt;&lt;p&gt;So, how do we get around this?  I can only think of these 2 ways:&lt;/p&gt;&lt;p&gt;&lt;ol&gt;&lt;li&gt;Create a .NET class that wraps the web reference, create a static method that wraps the web service call, and then call the class method from within an Expression shape in orchestration, thereby avoiding creating the web reference inside the BizTalk project.&lt;/li&gt;&lt;li&gt;Pass the message as a &lt;strong&gt;string&lt;/strong&gt; to the orchestration before running the wizard, but that way you'll need to convert the string back to a message reference within the consuming orchestration.&lt;/li&gt;&lt;/ol&gt;&lt;/p&gt;&lt;p&gt;If anybody else has any other ideas, I'd be interested to hear about them here!&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6708338-108202911450676296?l=thearchhacker.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6708338/posts/default/108202911450676296'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6708338/posts/default/108202911450676296'/><link rel='alternate' type='text/html' href='http://thearchhacker.blogspot.com/2004/04/exposing-orchestrations-as-web.html' title='Exposing Orchestrations as Web Services Gotcha!'/><author><name>Paul</name><uri>http://www.blogger.com/profile/12744829788574669901</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-6708338.post-108196549370960731</id><published>2004-04-14T18:58:00.000+01:00</published><updated>2004-04-14T19:28:23.560+01:00</updated><title type='text'>Working with Enumerations in a Web Service within Orchestration</title><content type='html'>&lt;p&gt;Well, this had me scratching my head for some time until the lightbulb lit up in my brain!  How was I going to call a web service within an orchestration that used an enumeration as one of its parameters?&lt;/p&gt;&lt;p&gt;The answer is surprisingly simple but very consistent with the way that orchestration works in BizTalk Server 2004 with respect to web services.&lt;/p&gt;&lt;p&gt;When you want to call a web service from within orchestration you can either do one of 2 things:&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Write a wrapper in .NET that calls the web service and call the wrapper from within an &lt;strong&gt;Expression shape&lt;/strong&gt;&lt;/li&gt;&lt;li&gt;Add a web reference to the BizTalk project and then create a configured port based on the web port for the web service&lt;/li&gt;&lt;/ul&gt;&lt;/p&gt;&lt;p&gt;So, what's wrong with the first option?  Well, you will need to write code for starters just to call the web service, and then once created, then you need to expose the web methods you require access to in order for them to be invoked from orchestration.&lt;/p&gt;&lt;p&gt;Here's the rub though: while this isn't a particularly desirable route to calling a web service from within orchestration, sometimes it's &lt;strong&gt;absolutely necessary&lt;/strong&gt; that it is done this way.  There are 2 very good reasons for this:&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;You don't want to go through the message box every time you call the service (which is what happens if you call the web service through a web port in orchestration).&lt;/li&gt;&lt;li&gt;More importantly, the &lt;strong&gt;web service interface uses parameter names that are on the XLANG/s reserved keywords list&lt;/strong&gt;.  That's right!  You can't name a parameter anything and just get away with it when using that web service from orchestration!  Therefore if you have no control over the web service interface that you're calling, you will need to create a wrapper in order to be able to call it from orchestration.&lt;/li&gt;&lt;/ul&gt;&lt;/p&gt;&lt;p&gt;So, in most circumstances you'll probably want to go the second route.  When you add the web reference into the BizTalk project in Visual Studio.NET, instead of a proxy class in C# (or VB.NET if that's your preference) being generated behind the scenes, a BizTalk Orchestration is created as the proxy.  Cool!&lt;/p&gt;&lt;p&gt;But, what happens when the web service method that you're calling contains a parameter that is based on an enumeration?  Fortunately, when the web reference is added, any enumerations that are exposed in the web service definition (WSDL) are turned into schemas that are available in the project under the web reference itself.&lt;/p&gt;&lt;p&gt;So, with this information to hand, all we need to do is to create an XLANG/s message based on the enumeration schema, populate it with the right enumeration value, and then pass this message as a parameter to the web method.&lt;/p&gt;&lt;p&gt;The following code snippet shows how this is done and is located in the &lt;strong&gt;Message Assignment shape&lt;/strong&gt; that sets up the request message for the call to the web service.  If you take a look at the sample code, this particular web service method expects 4 parameters, one of which is a parameter based on an enumeration (which I've set up with a call to the XmlIfy static utility method).  In addition, I made the enumeration value field in the schema a &lt;strong&gt;distinguished field&lt;/strong&gt; by modifying the schema that was generated automatically when adding the web reference to the BizTalk project.  &lt;strong&gt;Don't forget, if you update the web reference, you will need to promote the field as a distinguished field again&lt;/strong&gt; otherwise the project won't compile!  Note that you also need to construct the enumeration message as well as the web service request message in the &lt;strong&gt;Construct shape&lt;/strong&gt;.&lt;/p&gt;&lt;p style="border: solid 1px DarkGray; background-color: LightGrey; font-family: courier; font-size: 70%; color: DimGray; padding: 10px"&gt;notifyRequestMessage.address = registrationMessage.escalation.sendTo;&lt;br /&gt;notificationType = BizTalkUtility.XmlIfy( "&amp;lt;NotificationTypeEnum xmlns='http://somenamespace/notify' /&amp;gt;" );&lt;br/&gt;notificationType.NotificationTypeEnum = "SMTPEmail"; &lt;br /&gt;notifyRequestMessage.type = notificationType;&lt;br /&gt;notifyRequestMessage.subject = "My Subject";&lt;br /&gt;notifyRequestMessage.content = "My Content";&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Note: Whenever I work on a BizTalk project, I always have a utility library written in C# that allows me to perform various useful little functions like turning an XML document into a string, and a string into an XML document.  Highly useful!&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6708338-108196549370960731?l=thearchhacker.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6708338/posts/default/108196549370960731'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6708338/posts/default/108196549370960731'/><link rel='alternate' type='text/html' href='http://thearchhacker.blogspot.com/2004/04/working-with-enumerations-in-web.html' title='Working with Enumerations in a Web Service within Orchestration'/><author><name>Paul</name><uri>http://www.blogger.com/profile/12744829788574669901</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-6708338.post-108196280331289764</id><published>2004-04-14T18:13:00.000+01:00</published><updated>2004-04-14T18:17:19.936+01:00</updated><title type='text'>Apologies for lack of update recently!</title><content type='html'>&lt;p&gt;Things are hectic here at Solidsoft Towers!  Working on a big proposal that is sucking my time, so apologies for lack of recent updates.  Will get back to it when the proposal is winging its way into the client's lap... ;-)&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6708338-108196280331289764?l=thearchhacker.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6708338/posts/default/108196280331289764'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6708338/posts/default/108196280331289764'/><link rel='alternate' type='text/html' href='http://thearchhacker.blogspot.com/2004/04/apologies-for-lack-of-update-recently.html' title='Apologies for lack of update recently!'/><author><name>Paul</name><uri>http://www.blogger.com/profile/12744829788574669901</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-6708338.post-108142270587153384</id><published>2004-04-08T12:11:00.000+01:00</published><updated>2004-04-08T12:15:33.950+01:00</updated><title type='text'>Microsoft Webcast on BizTalk Server 2004 Architecture</title><content type='html'>&lt;p&gt;Here's a link to a great webcast on the architecture and scalability options of BizTalk Server 2004 presented by Scott Woodgate.&lt;/p&gt;&lt;p&gt;Click &lt;a href="http://msevents.microsoft.com/CUI/EventDetail.aspx?EventID=1032247089&amp;Culture=en-US"&gt;here&lt;/a&gt; to access the webcast.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6708338-108142270587153384?l=thearchhacker.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6708338/posts/default/108142270587153384'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6708338/posts/default/108142270587153384'/><link rel='alternate' type='text/html' href='http://thearchhacker.blogspot.com/2004/04/microsoft-webcast-on-biztalk-server.html' title='Microsoft Webcast on BizTalk Server 2004 Architecture'/><author><name>Paul</name><uri>http://www.blogger.com/profile/12744829788574669901</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-6708338.post-108117495433167036</id><published>2004-04-05T15:22:00.000+01:00</published><updated>2004-04-05T15:26:18.310+01:00</updated><title type='text'>Visio Orchestration Designer Add-In</title><content type='html'>&lt;p&gt;The add-in for Visio (2002 SR-1 or 2003) to allow business analysts to design business processes that can be used by a developer to implement orchestrations is now available.&lt;/p&gt;&lt;p&gt;It can be downloaded &lt;a href="http://www.microsoft.com/downloads/details.aspx?FamilyId=C74D08BD-617E-43AC-B303-B6063B929BB3&amp;displaylang=en"&gt;here&lt;/a&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6708338-108117495433167036?l=thearchhacker.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6708338/posts/default/108117495433167036'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6708338/posts/default/108117495433167036'/><link rel='alternate' type='text/html' href='http://thearchhacker.blogspot.com/2004/04/visio-orchestration-designer-add-in.html' title='Visio Orchestration Designer Add-In'/><author><name>Paul</name><uri>http://www.blogger.com/profile/12744829788574669901</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-6708338.post-108115914841589536</id><published>2004-04-05T10:59:00.000+01:00</published><updated>2004-04-05T11:02:52.450+01:00</updated><title type='text'>Sharepoint Adapter</title><content type='html'>&lt;p&gt;Those lovely folks over at &lt;a href="http://www.gotdotnet.com"&gt;GotDotNet&lt;/a&gt; have available a Sharepoint adapter for BizTalk Server 2004.&lt;/p&gt;&lt;p&gt;You can find it &lt;a href="http://www.gotdotnet.com/Community/Workspaces/viewuploads.aspx?id=0d1aa85c-cf8d-497e-84f4-3ffec8db115f"&gt;here&lt;/a&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6708338-108115914841589536?l=thearchhacker.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6708338/posts/default/108115914841589536'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6708338/posts/default/108115914841589536'/><link rel='alternate' type='text/html' href='http://thearchhacker.blogspot.com/2004/04/sharepoint-adapter.html' title='Sharepoint Adapter'/><author><name>Paul</name><uri>http://www.blogger.com/profile/12744829788574669901</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-6708338.post-108115720716232691</id><published>2004-04-05T10:26:00.000+01:00</published><updated>2004-04-05T10:30:30.810+01:00</updated><title type='text'>New Information Worker documentation available</title><content type='html'>&lt;p&gt;There is also new documentation available for Information Workers.  Download &lt;a href="http://download.microsoft.com/download/2/0/2/2022038d-40be-4aa8-8d04-9d1dafbc5132/BTS2004IW(EN).exe"&gt;here&lt;/a&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6708338-108115720716232691?l=thearchhacker.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6708338/posts/default/108115720716232691'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6708338/posts/default/108115720716232691'/><link rel='alternate' type='text/html' href='http://thearchhacker.blogspot.com/2004/04/new-information-worker-documentation.html' title='New Information Worker documentation available'/><author><name>Paul</name><uri>http://www.blogger.com/profile/12744829788574669901</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-6708338.post-108115704421049648</id><published>2004-04-05T10:24:00.000+01:00</published><updated>2004-04-05T10:27:47.890+01:00</updated><title type='text'>BizTalk Server 2004 Rollup 1 is available</title><content type='html'>&lt;p&gt;This is a rollup patch for BizTalk Server 2004 that should be applied to the RTM build of BizTalk Server 2004.  This will be included in the upcoming service pack 1 (no release dates available yet).&lt;/p&gt;&lt;p&gt;Click the following link to download the rollup patch: &lt;a href="http://www.microsoft.com/downloads/details.aspx?FamilyId=C7EB0146-5F20-4D94-9F52-3E7E575736DF&amp;displaylang=en"&gt;BizTalk Server 2004 Rollup 1&lt;/a&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6708338-108115704421049648?l=thearchhacker.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6708338/posts/default/108115704421049648'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6708338/posts/default/108115704421049648'/><link rel='alternate' type='text/html' href='http://thearchhacker.blogspot.com/2004/04/biztalk-server-2004-rollup-1-is.html' title='BizTalk Server 2004 Rollup 1 is available'/><author><name>Paul</name><uri>http://www.blogger.com/profile/12744829788574669901</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-6708338.post-108090946429221334</id><published>2004-04-02T13:37:00.000+01:00</published><updated>2004-04-02T20:45:23.436+01:00</updated><title type='text'>At last! New documentation is available for download from Microsoft</title><content type='html'>&lt;P&gt;Well, we've all been waiting for it. &lt;/P&gt;&lt;P&gt;New documentation for BizTalk Server 2004 can be downloaded from the following locations: &lt;/P&gt;&lt;P&gt;&lt;SPAN style="FONT-WEIGHT: bold;"&gt;Documentation&lt;/SPAN&gt; &lt;BR&gt;&lt;A href="http://download.microsoft.com/download/d/6/d/d6d0cf31-b17b-4f25-bf94-5de2af3a828e/BTS2004(EN).exe"&gt;Click to download BizTalk Server 2004 documentation&lt;/A&gt; &lt;/P&gt;&lt;P&gt;&lt;SPAN style="FONT-WEIGHT: bold;"&gt;SDK&lt;/SPAN&gt; &lt;BR&gt;&lt;A href="http://www.microsoft.com/downloads/details.aspx?familyid=8a1ca3af-790c-4261-838a-9f0661c72887&amp;amp;displaylang=en"&gt;Click to download BizTalk Server 2004 SDK&lt;/A&gt; &lt;/P&gt;&lt;P&gt;&lt;SPAN style="FONT-WEIGHT: bold;"&gt;Installation Guide&lt;/SPAN&gt; &lt;BR&gt;&lt;A href="http://download.microsoft.com/download/5/1/2/512c18fe-482c-4925-a790-3ef9110b3acc/Installation%20Guide.htm"&gt;Click to view the updated installation guide&lt;/A&gt; &lt;/P&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6708338-108090946429221334?l=thearchhacker.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6708338/posts/default/108090946429221334'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6708338/posts/default/108090946429221334'/><link rel='alternate' type='text/html' href='http://thearchhacker.blogspot.com/2004/04/at-last-new-documentation-is-available.html' title='At last! New documentation is available for download from Microsoft'/><author><name>Paul</name><uri>http://www.blogger.com/profile/12744829788574669901</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-6708338.post-108090885753164256</id><published>2004-04-02T13:27:00.000+01:00</published><updated>2004-04-02T13:31:17.200+01:00</updated><title type='text'>Problem encountered installing on Windows 2000</title><content type='html'>&lt;p&gt;If you've installed BizTalk Server 2004 on the 'slipstream' SP4 Windows 2000 build, then when you get to the ConfigFramework wizard, you may well find that the file AUTHZ.DLL is missing from the Winnt\System32 folder.&lt;/p&gt;&lt;p&gt;If this is the case (and it almost certainly will be), then you'll need to re-install the full version of SP4 for Windows 2000.  This will ensure that the AUTHZ.DLL file is installed, and you'll be able to run the ConfigFramework wizard.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6708338-108090885753164256?l=thearchhacker.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6708338/posts/default/108090885753164256'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6708338/posts/default/108090885753164256'/><link rel='alternate' type='text/html' href='http://thearchhacker.blogspot.com/2004/04/problem-encountered-installing-on.html' title='Problem encountered installing on Windows 2000'/><author><name>Paul</name><uri>http://www.blogger.com/profile/12744829788574669901</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-6708338.post-108082772864258029</id><published>2004-04-01T14:55:00.000+01:00</published><updated>2004-04-01T19:44:00.530+01:00</updated><title type='text'>First BizTalk Tip!</title><content type='html'>&lt;P&gt;Ok, first tip.&lt;/P&gt;&lt;P&gt;Apologies to all of those people that know this (and if you've worked with BizTalk Server 2004 for any length of time, you will!).&lt;/P&gt;&lt;P&gt;Any time you deploy a new BizTalk assembly, or even GACing a component that is used by orchestration or by a pipeline (except obviously components designed to run under a COM+ server application), don't forget to restart the BizTalk Server NT service BTSNTSvc.exe.&amp;nbsp; You can do this via the BizTalk Server Administration MMC snap-in by finding the server and restarting it, or just simply restarting the relevant BizTalk Host in the Services MMC snap-in.&lt;/P&gt;&lt;P&gt;Simple eh?&lt;/P&gt;&lt;P&gt;PS: You have no idea how many times I've been caught by this........grrrrr!&lt;/P&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6708338-108082772864258029?l=thearchhacker.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6708338/posts/default/108082772864258029'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6708338/posts/default/108082772864258029'/><link rel='alternate' type='text/html' href='http://thearchhacker.blogspot.com/2004/04/first-biztalk-tip.html' title='First BizTalk Tip!'/><author><name>Paul</name><uri>http://www.blogger.com/profile/12744829788574669901</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-6708338.post-108082076681545027</id><published>2004-04-01T12:59:00.000+01:00</published><updated>2004-04-02T21:18:34.216+01:00</updated><title type='text'>Welcome to my blog!</title><content type='html'>&lt;p&gt;Well, I've been nagged and nagged to get this blog up and running, and here it is.&lt;/p&gt;&lt;br /&gt;&lt;p&gt;Now all I've got to do is to put up some worthwhile posts that will actually be of use to people....&lt;/p&gt;&lt;br /&gt;&lt;p&gt;So, with that in mind, watch this space :)&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6708338-108082076681545027?l=thearchhacker.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6708338/posts/default/108082076681545027'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6708338/posts/default/108082076681545027'/><link rel='alternate' type='text/html' href='http://thearchhacker.blogspot.com/2004/04/welcome-to-my-blog.html' title='Welcome to my blog!'/><author><name>Paul</name><uri>http://www.blogger.com/profile/12744829788574669901</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry></feed>
