<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:copyright="http://blogs.law.harvard.edu/tech/rss" xmlns:image="http://purl.org/rss/1.0/modules/image/">
    <channel>
        <title>nServiceBus</title>
        <link>http://geekswithblogs.net/EltonStoneman/category/10946.aspx</link>
        <description>nServiceBus</description>
        <language>en-GB</language>
        <copyright>Elton Stoneman</copyright>
        <managingEditor>comments@sixeyed.com</managingEditor>
        <generator>Subtext Version 0.0.0.0</generator>
        <item>
            <title>Distributing WCF service load vertically as well as horizontally</title>
            <link>http://geekswithblogs.net/EltonStoneman/archive/2011/12/16/distributing-wcf-service-load-vertically-as-well-as-horizontally.aspx</link>
            <description>		&lt;p&gt;&lt;b&gt;Overview&lt;/b&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;I've been looking into a solution recently which has a series of remote nodes publishing events to a central node. The publishers have no logic, they just need to contact the central node and record that an event has happened. Off the back of that, the central node does some work inferring what the event means, and computing its relationship to a bunch of other events. Simple enough, but the solution needs to be scalable and make efficient use of its resources.&lt;/p&gt;
		&lt;p&gt;I started off building it around NServiceBus, but when I had a better understanding of the components and the physical architecture, decided on a different approach. The central node will most likely be an EC2 cluster; using NServiceBus, cluster nodes can communicate with each other's queues, but the remote nodes would need a bridging mechanism to talk to the central node, and I'd rather have a consistent communication model. So I started rebuilding the service layer in WCF, but I wanted flexibility on how the central cluster nodes distributed work amongst themselves.&lt;/p&gt;
		&lt;p&gt;&lt;b&gt;Solution&lt;/b&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Briefly, I wanted a nice solution for this scenario: remote nodes will always talk to the central cluster over HTTP with a REST service; central nodes will distribute load amongst themselves as efficiently as they can. In a low-load situation, the node receiving the originating message should do all the work in the workflow. In a high-load situation, the node receiving the originating message should farm out work to the other nodes. EC2 will let you set up a nice load balancer, but the option to balance load between nodes OR within a node needs a bit more thought - i.e. when a cluster node receives an event published message, it can call the next service in the workflow either by remotely sending a WCF service request to the load balanced URL, or by executing the code locally.&lt;/p&gt;
		&lt;p&gt;This is actually very simple, and I've published a working example on my github code gallery: &lt;a title="DistributedServiceSample" href="https://github.com/sixeyed/codegallery/tree/master/DistributedServiceSample" target="_blank"&gt;DistributedServiceSample&lt;/a&gt;. In the sample, all service calls in the central node are run through a generic service invoker:&lt;/p&gt;
		&lt;font face="Consolas" size="1"&gt;
				&lt;font face="Consolas" size="1"&gt;
						&lt;p&gt;
						&lt;/p&gt;
				&lt;/font&gt;
		&lt;/font&gt;
		&lt;font size="2"&gt;
				&lt;font color="#2b91af" face="Consolas"&gt;
						&lt;font color="#2b91af" face="Consolas"&gt;
								&lt;font color="#2b91af" face="Consolas"&gt;Service&lt;/font&gt;
						&lt;/font&gt;
				&lt;/font&gt;
				&lt;font face="Consolas"&gt;
						&lt;font face="Consolas"&gt;.Execute&amp;lt;&lt;/font&gt;
				&lt;/font&gt;
				&lt;font color="#2b91af" face="Consolas"&gt;
						&lt;font color="#2b91af" face="Consolas"&gt;
								&lt;font color="#2b91af" face="Consolas"&gt;IComputeService&lt;/font&gt;
						&lt;/font&gt;
				&lt;/font&gt;
		&lt;/font&gt;
		&lt;font face="Consolas" size="1"&gt;
				&lt;font face="Consolas" size="1"&gt;
						&lt;font size="2"&gt;&amp;gt;(svc =&amp;gt; svc.Compute(jobId));&lt;/font&gt;
						&lt;p&gt;
						&lt;/p&gt;
				&lt;/font&gt;
		&lt;/font&gt;The invoker either builds a WCF client proxy, or instantiates the service implementation locally, and makes the call. In the sample the logic for deciding whether to go remote or local is done in config, but this could be worked into something more complex based on current capacity etc. The sample also allows the invoker to decide whether to make a synchronous call, or farm the work out to an async task (again, through config). 
&lt;p&gt;&lt;strong&gt;Dependencies&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;Dynamically building a WCF client proxy is very simple, there are no dependencies outside .NET and you can leave all the endpoint configuration to the normal &amp;lt;serviceModel&amp;gt; config section. When the central node is in remote mode, it gets the proxy like this:&lt;/p&gt;&lt;font face="Consolas" size="1"&gt;&lt;font face="Consolas" size="1"&gt;&lt;p&gt;&lt;/p&gt;&lt;/font&gt;&lt;/font&gt;&lt;font size="2"&gt;&lt;font color="#0000ff" face="Consolas"&gt;&lt;font color="#0000ff" face="Consolas"&gt;&lt;font color="#0000ff" face="Consolas"&gt;var&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font face="Consolas"&gt;&lt;font face="Consolas"&gt; factory = &lt;/font&gt;&lt;/font&gt;&lt;font color="#0000ff" face="Consolas"&gt;&lt;font color="#0000ff" face="Consolas"&gt;&lt;font color="#0000ff" face="Consolas"&gt;new&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font face="Consolas"&gt;&lt;font face="Consolas"&gt;&lt;/font&gt;&lt;/font&gt;&lt;font color="#2b91af" face="Consolas"&gt;&lt;font color="#2b91af" face="Consolas"&gt;&lt;font color="#2b91af" face="Consolas"&gt;ChannelFactory&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font face="Consolas"&gt;&lt;font face="Consolas"&gt;&amp;lt;TService&amp;gt;(&lt;/font&gt;&lt;/font&gt;&lt;font color="#a31515" face="Consolas"&gt;&lt;font color="#a31515" face="Consolas"&gt;&lt;font color="#a31515" face="Consolas"&gt;"*"&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font face="Consolas" size="1"&gt;&lt;font face="Consolas" size="1"&gt;&lt;font size="2"&gt;);&lt;/font&gt;&lt;br /&gt;&lt;font size="2"&gt;service = factory.CreateChannel();&lt;/font&gt;&lt;p&gt;&lt;/p&gt;&lt;/font&gt;&lt;/font&gt;(The asterisk tells WCF to pull the client endpoint and binding from config based on the contract name and assumes there is only one client entry per contract). 
&lt;p&gt;When in local mode, it's a little bit more involved to do it dynamically. In the sample I have a marker interface (&lt;strong&gt;IService&lt;/strong&gt;) to denote a service contract. In the service application startup I register all service implementations in an IoC container (a wrapper around Unity), and then the central node gets the service like this:&lt;/p&gt;&lt;font face="Consolas" size="1"&gt;&lt;font face="Consolas" size="1"&gt;&lt;p&gt;&lt;font size="2"&gt;service = &lt;/font&gt;&lt;/p&gt;&lt;/font&gt;&lt;/font&gt;&lt;font color="#2b91af" face="Consolas"&gt;&lt;font color="#2b91af" face="Consolas"&gt;&lt;font color="#2b91af" face="Consolas" size="2"&gt;Container&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font face="Consolas" size="1"&gt;&lt;font face="Consolas" size="1"&gt;&lt;font size="2"&gt;.Get&amp;lt;TService&amp;gt;();&lt;/font&gt;&lt;p&gt;&lt;/p&gt;&lt;/font&gt;&lt;/font&gt;The actual method call on the service is done through functions or actions (depending on whether the service returns a response), so it's all typesafe. 
&lt;p&gt;&lt;strong&gt;Running the sample&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;Build the sample locally, and open &lt;a href="http://localhost/DistributedServiceSample.Services/JobService.svc"&gt;http://localhost/DistributedServiceSample.Services/JobService.svc&lt;/a&gt; in WCFStorm or soapUI. Call &lt;em&gt;CreateJob&lt;/em&gt; with whatever parameter you like, and you will see output similar to this in DebugView:&lt;/p&gt;&lt;p&gt;&lt;font face="Courier New" size="2"&gt;JobService.CreateJob called with Name: fhwfiy&lt;br /&gt;Service.GetExecutionMode using *Synchronous* for service: DistributedServiceSample.Contracts.Services.IJobService&lt;br /&gt;Service.GetServiceLocation using *Remote* for service: DistributedServiceSample.Contracts.Services.IJobService&lt;br /&gt;JobService.SaveJob called with jobId: fhwfiy&lt;br /&gt;Service.GetExecutionMode using *AsynchronousIgnoreResponse* for service: DistributedServiceSample.Contracts.Services.IComputeService&lt;br /&gt;Service.GetServiceLocation using *Local* for service: DistributedServiceSample.Contracts.Services.IComputeService&lt;br /&gt;ComputeService.Compute called with jobId: 621849676&lt;/font&gt;&lt;/p&gt;&lt;p&gt;The workflow is that &lt;em&gt;CreateJob&lt;/em&gt; triggers a &lt;em&gt;SaveJob&lt;/em&gt; call, which in turn triggers a &lt;em&gt;Compute&lt;/em&gt; call. The service decides whether each downstream call will be made locally or remotely, synchronously or asynchronously based on the contents of the &lt;font face="Courier New" size="2"&gt;&amp;lt;distributedservicesample.invoker&amp;gt;&lt;/font&gt; section in Web.config. &lt;/p&gt;&lt;p&gt;&lt;strong&gt;Extensions&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;The obvious extension is to add an operation name to the config settings, so different operations within the same service can be executed in different ways, which is pretty straightforward. More complex is the idea of dynamically deciding whether to make a local or a remote call. The logic for the decision is all isolated, so it would be a case of swapping out the config stuff with some environment checks, so calls were made locally unless CPU or private bytes or current connections were above a threshold.&lt;/p&gt;&lt;p&gt; &lt;/p&gt; &lt;img src="http://geekswithblogs.net/EltonStoneman/aggbug/148053.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Elton Stoneman</dc:creator>
            <guid>http://geekswithblogs.net/EltonStoneman/archive/2011/12/16/distributing-wcf-service-load-vertically-as-well-as-horizontally.aspx</guid>
            <pubDate>Fri, 16 Dec 2011 07:52:12 GMT</pubDate>
            <wfw:comment>http://geekswithblogs.net/EltonStoneman/comments/148053.aspx</wfw:comment>
            <comments>http://geekswithblogs.net/EltonStoneman/archive/2011/12/16/distributing-wcf-service-load-vertically-as-well-as-horizontally.aspx#feedback</comments>
            <wfw:commentRss>http://geekswithblogs.net/EltonStoneman/comments/commentRss/148053.aspx</wfw:commentRss>
        </item>
        <item>
            <title>Processing Excel uploads with BizTalk and nServiceBus</title>
            <link>http://geekswithblogs.net/EltonStoneman/archive/2009/11/21/processing-excel-uploads-with-biztalk-and-nservicebus.aspx</link>
            <description>&lt;p&gt; &lt;/p&gt;
&lt;p class="MsoNormal" align="center" style="margin: 0cm 0cm 10pt; text-align: center"&gt;&lt;font face="Calibri"&gt;&lt;span lang="EN-GB" style="font-size: 10pt"&gt;[Source: &lt;/span&gt;&lt;span lang="EN-GB"&gt;&lt;a href="http://geekswithblogs.net/EltonStoneman"&gt;&lt;span style="font-size: 10pt"&gt;&lt;font color="#800080"&gt;http://geekswithblogs.net/EltonStoneman&lt;/font&gt;&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;&lt;span lang="EN-GB" style="font-size: 10pt"&gt;]&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="margin: 0cm 0cm 10pt"&gt;&lt;span lang="EN-GB"&gt;&lt;font face="Calibri"&gt;Following on from the sample for &lt;/font&gt;&lt;a href="http://geekswithblogs.net/EltonStoneman/archive/2009/11/18/processing-an-excel-upload-with-nservicebus.aspx"&gt;&lt;font face="Calibri"&gt;processing Excel uploads with nServiceBus&lt;/font&gt;&lt;/a&gt;&lt;font face="Calibri"&gt;, I have a comparable version using BizTalk on MSDN Code Gallery here: &lt;/font&gt;&lt;a href="http://code.msdn.microsoft.com/BTSAndNSBExcelUpload"&gt;&lt;font face="Calibri" color="#800080"&gt;BizTalk and nServiceBus Excel Upload&lt;/font&gt;&lt;/a&gt;&lt;font face="Calibri"&gt;. The BizTalk (2006 R2) sample uses a FILE receive port with a simple pipeline component to disassemble the Excel file into separate messages. A SQL send port subscribes to the messages, and with an outbound map calls the AdventureWorks stored procedure to insert each product.&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="margin: 0cm 0cm 10pt"&gt;&lt;span lang="EN-GB"&gt;&lt;font face="Calibri"&gt;Processing Excel in BizTalk is nothing new, but I wanted to do a comparison against the nServiceBus example, and also see how BizTalk and nServiceBus could be integrated. My original thinking was that the trigger in the nServiceBus solution relies on a FileSystemWatcher, which is less reliable and less flexible than BizTalk’s FILE adapter. A hybrid solution could use the FILE adapter to receive and parse the upload, then send each row as an AddProduct message to MSMQ, which the nServiceBus handler subscribes to.&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="margin: 0cm 0cm 10pt"&gt;&lt;span lang="EN-GB"&gt;&lt;font face="Calibri"&gt;Running this on the same environment (a Windows Server 2003 VM running under VirtualBox in Ubuntu 9.04), the BizTalk solution processes the 3,500 row Excel file in 3 mins 10 seconds (compared to 4m 15s for the distributed NSB running with 5 threads), and the 12,000 row file in 11m 14s (compared to 14m 0s). I was surprised to find the BizTalk solution running more quickly, as the original NSB was using non-recoverable messaging, so all messages were in memory, while BizTalk had the latency of writing to the message box. &lt;/font&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="margin: 0cm 0cm 10pt"&gt;&lt;i style="mso-bidi-font-style: normal"&gt;&lt;span lang="EN-GB"&gt;&lt;font face="Calibri"&gt;Performance Comparison&lt;o:p&gt;&lt;/o:p&gt;&lt;/font&gt;&lt;/span&gt;&lt;/i&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="margin: 0cm 0cm 10pt"&gt;&lt;span lang="EN-GB"&gt;&lt;font face="Calibri"&gt;This is not an intended to be a thorough benchmark of NSB and BizTalk – both sample projects are basic, untuned implementations, and the tests are on a single box rather than two or three. But for comparison, I ran the 3,500 row upload repeatedly under different configurations:&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoListParagraphCxSpFirst" style="margin: 0cm 0cm 0pt 36pt; text-indent: -18pt; mso-list: l2 level1 lfo1"&gt;&lt;span lang="EN-GB" style="mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-bidi-font-family: Calibri; mso-bidi-theme-font: minor-latin"&gt;&lt;span style="mso-list: Ignore"&gt;&lt;font face="Calibri"&gt;1.&lt;/font&gt;&lt;span style="font: 7pt 'Times New Roman'"&gt;       &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span lang="EN-GB"&gt;&lt;font face="Calibri"&gt;NSB with distributor – host and distributor using 20 threads&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoListParagraphCxSpMiddle" style="margin: 0cm 0cm 0pt 36pt; text-indent: -18pt; mso-list: l2 level1 lfo1"&gt;&lt;span lang="EN-GB" style="mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-bidi-font-family: Calibri; mso-bidi-theme-font: minor-latin"&gt;&lt;span style="mso-list: Ignore"&gt;&lt;font face="Calibri"&gt;2.&lt;/font&gt;&lt;span style="font: 7pt 'Times New Roman'"&gt;       &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span lang="EN-GB"&gt;&lt;font face="Calibri"&gt;NSB with distributor – host and distributor using 20 threads, recoverable messaging&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoListParagraphCxSpMiddle" style="margin: 0cm 0cm 0pt 36pt; text-indent: -18pt; mso-list: l2 level1 lfo1"&gt;&lt;span lang="EN-GB" style="mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-bidi-font-family: Calibri; mso-bidi-theme-font: minor-latin"&gt;&lt;span style="mso-list: Ignore"&gt;&lt;font face="Calibri"&gt;3.&lt;/font&gt;&lt;span style="font: 7pt 'Times New Roman'"&gt;       &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span lang="EN-GB"&gt;&lt;font face="Calibri"&gt;NSB without distributor – host using 20 threads&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoListParagraphCxSpMiddle" style="margin: 0cm 0cm 0pt 36pt; text-indent: -18pt; mso-list: l2 level1 lfo1"&gt;&lt;span lang="EN-GB" style="mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-bidi-font-family: Calibri; mso-bidi-theme-font: minor-latin"&gt;&lt;span style="mso-list: Ignore"&gt;&lt;font face="Calibri"&gt;4.&lt;/font&gt;&lt;span style="font: 7pt 'Times New Roman'"&gt;       &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span lang="EN-GB"&gt;&lt;font face="Calibri"&gt;NSB without distributor – host using 20 threads, recoverable messaging&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoListParagraphCxSpMiddle" style="margin: 0cm 0cm 0pt 36pt; text-indent: -18pt; mso-list: l2 level1 lfo1"&gt;&lt;span lang="EN-GB" style="mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-bidi-font-family: Calibri; mso-bidi-theme-font: minor-latin"&gt;&lt;span style="mso-list: Ignore"&gt;&lt;font face="Calibri"&gt;5.&lt;/font&gt;&lt;span style="font: 7pt 'Times New Roman'"&gt;       &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span lang="EN-GB"&gt;&lt;font face="Calibri"&gt;BizTalk FILE receive and SQL send&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoListParagraphCxSpMiddle" style="margin: 0cm 0cm 0pt 36pt; text-indent: -18pt; mso-list: l2 level1 lfo1"&gt;&lt;span lang="EN-GB" style="mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-bidi-font-family: Calibri; mso-bidi-theme-font: minor-latin"&gt;&lt;span style="mso-list: Ignore"&gt;&lt;font face="Calibri"&gt;6.&lt;/font&gt;&lt;span style="font: 7pt 'Times New Roman'"&gt;       &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span lang="EN-GB"&gt;&lt;font face="Calibri"&gt;NSB parsing Excel file, BizTalk subscribing to AddProduct messages – MSMQ receive using batches of 100&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoListParagraphCxSpLast" style="margin: 0cm 0cm 10pt 36pt; text-indent: -18pt; mso-list: l2 level1 lfo1"&gt;&lt;span lang="EN-GB" style="mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-bidi-font-family: Calibri; mso-bidi-theme-font: minor-latin"&gt;&lt;span style="mso-list: Ignore"&gt;&lt;font face="Calibri"&gt;7.&lt;/font&gt;&lt;span style="font: 7pt 'Times New Roman'"&gt;       &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span lang="EN-GB"&gt;&lt;font face="Calibri"&gt;BizTalk parsing Excel file, NSB without distributor subscribing to AddProduct messages – host using 20 threads&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="margin: 0cm 0cm 10pt"&gt;&lt;span lang="EN-GB"&gt;&lt;font face="Calibri"&gt;Which gave these averaged results:&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="margin: 0cm 0cm 10pt"&gt;&lt;span style="mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-no-proof: yes"&gt;&lt;v:shapetype id="_x0000_t75" stroked="f" filled="f" path="m@4@5l@4@11@9@11@9@5xe" o:preferrelative="t" o:spt="75" coordsize="21600,21600"&gt;&lt;v:stroke joinstyle="miter"&gt;&lt;/v:stroke&gt;&lt;v:formulas&gt;&lt;v:f eqn="if lineDrawn pixelLineWidth 0"&gt;&lt;/v:f&gt;&lt;v:f eqn="sum @0 1 0"&gt;&lt;/v:f&gt;&lt;v:f eqn="sum 0 0 @1"&gt;&lt;/v:f&gt;&lt;v:f eqn="prod @2 1 2"&gt;&lt;/v:f&gt;&lt;v:f eqn="prod @3 21600 pixelWidth"&gt;&lt;/v:f&gt;&lt;v:f eqn="prod @3 21600 pixelHeight"&gt;&lt;/v:f&gt;&lt;v:f eqn="sum @0 0 1"&gt;&lt;/v:f&gt;&lt;v:f eqn="prod @6 1 2"&gt;&lt;/v:f&gt;&lt;v:f eqn="prod @7 21600 pixelWidth"&gt;&lt;/v:f&gt;&lt;v:f eqn="sum @8 21600 0"&gt;&lt;/v:f&gt;&lt;v:f eqn="prod @7 21600 pixelHeight"&gt;&lt;/v:f&gt;&lt;v:f eqn="sum @10 21600 0"&gt;&lt;/v:f&gt;&lt;/v:formulas&gt;&lt;v:path o:connecttype="rect" gradientshapeok="t" o:extrusionok="f"&gt;&lt;/v:path&gt;&lt;o:lock aspectratio="t" v:ext="edit"&gt;&lt;/o:lock&gt;&lt;/v:shapetype&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="margin: 0cm 0cm 10pt"&gt;&lt;span lang="EN-GB"&gt;&lt;font face="Calibri"&gt;&lt;img height="282" width="456" alt="" src="/images/geekswithblogs_net/EltonStoneman/NSBBTSChart.PNG" /&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="margin: 0cm 0cm 10pt"&gt;&lt;span lang="EN-GB"&gt;&lt;font face="Calibri"&gt;Boosting the number of threads dramatically improved the NSB performance, and removing the distributor halved the duration. I would expect that running the distributor on a separate node would yield similarly good results on each processing node. The hybrid BizTalk/NSB configurations were the slowest – to be expected, as you have the latency of the message box and the latency of MSMQ saving to disk. NSB configurations without recoverable messaging were only marginally slower than the recoverable version, which seems incorrect based on &lt;/font&gt;&lt;a href="http://www.udidahan.com/2008/05/21/nservicebus-performance/"&gt;&lt;font face="Calibri" color="#800080"&gt;Udi Dahan’s performance benchmark&lt;/font&gt;&lt;/a&gt;&lt;font face="Calibri"&gt;, so I’ll need to look into that further.&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="margin: 0cm 0cm 10pt"&gt;&lt;span lang="EN-GB"&gt;&lt;font face="Calibri"&gt;There’s plenty of scope for improving performance in both solutions. BizTalk can be endlessly tuned (the &lt;/font&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/aa475435(BTS.10).aspx"&gt;&lt;font face="Calibri"&gt;2004 guidelines&lt;/font&gt;&lt;/a&gt;&lt;font face="Calibri"&gt; still apply as a good starting point). By modifying the NSB solution to send the AddProduct messages in one opration and using 80 threads for the handler, duration fell to 25 seconds – 140 messages per second.&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="margin: 0cm 0cm 10pt"&gt;&lt;i style="mso-bidi-font-style: normal"&gt;&lt;span lang="EN-GB"&gt;&lt;font face="Calibri"&gt;Integrating BizTalk and nServiceBus&lt;/font&gt;&lt;/span&gt;&lt;/i&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="margin: 0cm 0cm 10pt"&gt;&lt;span lang="EN-GB"&gt;&lt;font face="Calibri"&gt;Despite having the worst performance, integrating BizTalk and nServiceBus is a viable option which may be very useful in some cases. It would allow you to leverage BizTalk’s adapter suite and mapping functionality to join LOB systems into an nServiceBus estate. Integration is actually very straightforward. By default NSB uses MSMQ, so to publish messages from BizTalk to an NSB subscriber just means configuring an MSMQ send port with the expected queue, and mapping your message to NSB format – which is an envelope containing one or messages:&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="margin: 0cm 0cm 0pt; mso-layout-grid-align: none"&gt;&lt;span style="font-size: 9pt; color: blue; font-family: 'Courier New'; mso-ansi-language: EN-US; mso-no-proof: yes"&gt;&amp;lt;?&lt;/span&gt;&lt;span style="font-size: 9pt; color: #a31515; font-family: 'Courier New'; mso-ansi-language: EN-US; mso-no-proof: yes"&gt;xml&lt;/span&gt;&lt;span style="font-size: 9pt; color: blue; font-family: 'Courier New'; mso-ansi-language: EN-US; mso-no-proof: yes"&gt; &lt;/span&gt;&lt;span style="font-size: 9pt; color: red; font-family: 'Courier New'; mso-ansi-language: EN-US; mso-no-proof: yes"&gt;version&lt;/span&gt;&lt;span style="font-size: 9pt; color: blue; font-family: 'Courier New'; mso-ansi-language: EN-US; mso-no-proof: yes"&gt;=&lt;/span&gt;&lt;span style="font-size: 9pt; font-family: 'Courier New'; mso-ansi-language: EN-US; mso-no-proof: yes"&gt;"&lt;span style="color: blue"&gt;1.0&lt;/span&gt;"&lt;span style="color: blue"&gt; ?&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="margin: 0cm 0cm 0pt; mso-layout-grid-align: none"&gt;&lt;span style="font-size: 9pt; color: blue; font-family: 'Courier New'; mso-ansi-language: EN-US; mso-no-proof: yes"&gt;&amp;lt;&lt;/span&gt;&lt;span style="font-size: 9pt; color: #a31515; font-family: 'Courier New'; mso-ansi-language: EN-US; mso-no-proof: yes"&gt;Messages&lt;/span&gt;&lt;span style="font-size: 9pt; color: blue; font-family: 'Courier New'; mso-ansi-language: EN-US; mso-no-proof: yes"&gt; &lt;/span&gt;&lt;span style="font-size: 9pt; color: red; font-family: 'Courier New'; mso-ansi-language: EN-US; mso-no-proof: yes"&gt;xmlns:xsi&lt;/span&gt;&lt;span style="font-size: 9pt; color: blue; font-family: 'Courier New'; mso-ansi-language: EN-US; mso-no-proof: yes"&gt;=&lt;/span&gt;&lt;span style="font-size: 9pt; font-family: 'Courier New'; mso-ansi-language: EN-US; mso-no-proof: yes"&gt;"&lt;span style="color: blue"&gt;http://www.w3.org/2001/XMLSchema-instance&lt;/span&gt;"&lt;span style="color: blue"&gt; &lt;/span&gt;&lt;span style="color: red"&gt;xmlns:xsd&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;"&lt;span style="color: blue"&gt;http://www.w3.org/2001/XMLSchema&lt;/span&gt;"&lt;span style="color: blue"&gt; &lt;/span&gt;&lt;span style="color: red"&gt;xmlns&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;"&lt;span style="color: blue"&gt;http://tempuri.net/ExcelUpload.Messages&lt;/span&gt;"&lt;span style="color: blue"&gt;&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="margin: 0cm 0cm 0pt; mso-layout-grid-align: none"&gt;&lt;span style="font-size: 9pt; color: blue; font-family: 'Courier New'; mso-ansi-language: EN-US; mso-no-proof: yes"&gt;&lt;span style="mso-spacerun: yes"&gt;  &lt;/span&gt;&amp;lt;&lt;/span&gt;&lt;span style="font-size: 9pt; color: #a31515; font-family: 'Courier New'; mso-ansi-language: EN-US; mso-no-proof: yes"&gt;AddProduct&lt;/span&gt;&lt;span style="font-size: 9pt; color: blue; font-family: 'Courier New'; mso-ansi-language: EN-US; mso-no-proof: yes"&gt;&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="margin: 0cm 0cm 0pt; mso-layout-grid-align: none"&gt;&lt;span style="font-size: 9pt; color: blue; font-family: 'Courier New'; mso-ansi-language: EN-US; mso-no-proof: yes"&gt;&lt;span style="mso-spacerun: yes"&gt;    &lt;/span&gt;&amp;lt;&lt;/span&gt;&lt;span style="font-size: 9pt; color: #a31515; font-family: 'Courier New'; mso-ansi-language: EN-US; mso-no-proof: yes"&gt;BatchId&lt;/span&gt;&lt;span style="font-size: 9pt; color: blue; font-family: 'Courier New'; mso-ansi-language: EN-US; mso-no-proof: yes"&gt;&amp;gt;&lt;/span&gt;&lt;span style="font-size: 9pt; font-family: 'Courier New'; mso-ansi-language: EN-US; mso-no-proof: yes"&gt;7a80fed4-9d30-44fe-95b0-08218c5f328e&lt;span style="color: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;BatchId&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="margin: 0cm 0cm 0pt; mso-layout-grid-align: none"&gt;&lt;span style="font-size: 9pt; color: blue; font-family: 'Courier New'; mso-ansi-language: EN-US; mso-no-proof: yes"&gt;&lt;span style="mso-spacerun: yes"&gt;    &lt;/span&gt;&amp;lt;&lt;/span&gt;&lt;span style="font-size: 9pt; color: #a31515; font-family: 'Courier New'; mso-ansi-language: EN-US; mso-no-proof: yes"&gt;RegistrationIndex&lt;/span&gt;&lt;span style="font-size: 9pt; color: blue; font-family: 'Courier New'; mso-ansi-language: EN-US; mso-no-proof: yes"&gt;&amp;gt;&lt;/span&gt;&lt;span style="font-size: 9pt; font-family: 'Courier New'; mso-ansi-language: EN-US; mso-no-proof: yes"&gt;58&lt;span style="color: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;RegistrationIndex&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="margin: 0cm 0cm 0pt; mso-layout-grid-align: none"&gt;&lt;span style="font-size: 9pt; color: blue; font-family: 'Courier New'; mso-ansi-language: EN-US; mso-no-proof: yes"&gt;&lt;span style="mso-spacerun: yes"&gt;    &lt;/span&gt;&amp;lt;&lt;/span&gt;&lt;span style="font-size: 9pt; color: #a31515; font-family: 'Courier New'; mso-ansi-language: EN-US; mso-no-proof: yes"&gt;RegistrationsInBatch&lt;/span&gt;&lt;span style="font-size: 9pt; color: blue; font-family: 'Courier New'; mso-ansi-language: EN-US; mso-no-proof: yes"&gt;&amp;gt;&lt;/span&gt;&lt;span style="font-size: 9pt; font-family: 'Courier New'; mso-ansi-language: EN-US; mso-no-proof: yes"&gt;254&lt;span style="color: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;RegistrationsInBatch&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="margin: 0cm 0cm 0pt; mso-layout-grid-align: none"&gt;&lt;span style="font-size: 9pt; color: blue; font-family: 'Courier New'; mso-ansi-language: EN-US; mso-no-proof: yes"&gt;&lt;span style="mso-spacerun: yes"&gt;    &lt;/span&gt;&amp;lt;&lt;/span&gt;&lt;span style="font-size: 9pt; color: #a31515; font-family: 'Courier New'; mso-ansi-language: EN-US; mso-no-proof: yes"&gt;BatchSourcePath&lt;/span&gt;&lt;span style="font-size: 9pt; color: blue; font-family: 'Courier New'; mso-ansi-language: EN-US; mso-no-proof: yes"&gt;&amp;gt;&lt;/span&gt;&lt;span style="font-size: 9pt; font-family: 'Courier New'; mso-ansi-language: EN-US; mso-no-proof: yes"&gt;E:\ExcelUpload\1.0.0.0\Binaries\Drops\ProductUpload.xls&lt;span style="color: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;BatchSourcePath&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="margin: 0cm 0cm 0pt; mso-layout-grid-align: none"&gt;&lt;span style="font-size: 9pt; color: blue; font-family: 'Courier New'; mso-ansi-language: EN-US; mso-no-proof: yes"&gt;&lt;span style="mso-spacerun: yes"&gt;    &lt;/span&gt;&amp;lt;&lt;/span&gt;&lt;span style="font-size: 9pt; color: #a31515; font-family: 'Courier New'; mso-ansi-language: EN-US; mso-no-proof: yes"&gt;OriginatorDestination&lt;/span&gt;&lt;span style="font-size: 9pt; color: blue; font-family: 'Courier New'; mso-ansi-language: EN-US; mso-no-proof: yes"&gt;&amp;gt;&lt;/span&gt;&lt;span style="font-size: 9pt; font-family: 'Courier New'; mso-ansi-language: EN-US; mso-no-proof: yes"&gt;ExcelUpload.Client.InputQueue@WIN2003R2-VM&lt;span style="color: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;OriginatorDestination&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="margin: 0cm 0cm 0pt; mso-layout-grid-align: none"&gt;&lt;span style="font-size: 9pt; color: blue; font-family: 'Courier New'; mso-ansi-language: EN-US; mso-no-proof: yes"&gt;&lt;span style="mso-spacerun: yes"&gt;    &lt;/span&gt;&amp;lt;&lt;/span&gt;&lt;span style="font-size: 9pt; color: #a31515; font-family: 'Courier New'; mso-ansi-language: EN-US; mso-no-proof: yes"&gt;Name&lt;/span&gt;&lt;span style="font-size: 9pt; color: blue; font-family: 'Courier New'; mso-ansi-language: EN-US; mso-no-proof: yes"&gt;&amp;gt;&lt;/span&gt;&lt;span style="font-size: 9pt; font-family: 'Courier New'; mso-ansi-language: EN-US; mso-no-proof: yes"&gt;new product 58&lt;span style="color: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;Name&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="margin: 0cm 0cm 0pt; mso-layout-grid-align: none"&gt;&lt;span style="font-size: 9pt; color: blue; font-family: 'Courier New'; mso-ansi-language: EN-US; mso-no-proof: yes"&gt;&lt;span style="mso-spacerun: yes"&gt;    &lt;/span&gt;&amp;lt;&lt;/span&gt;&lt;span style="font-size: 9pt; color: #a31515; font-family: 'Courier New'; mso-ansi-language: EN-US; mso-no-proof: yes"&gt;ProductNumber&lt;/span&gt;&lt;span style="font-size: 9pt; color: blue; font-family: 'Courier New'; mso-ansi-language: EN-US; mso-no-proof: yes"&gt;&amp;gt;&lt;/span&gt;&lt;span style="font-size: 9pt; font-family: 'Courier New'; mso-ansi-language: EN-US; mso-no-proof: yes"&gt;xlu-np-58&lt;span style="color: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;ProductNumber&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="margin: 0cm 0cm 0pt; mso-layout-grid-align: none"&gt;&lt;span style="font-size: 9pt; color: blue; font-family: 'Courier New'; mso-ansi-language: EN-US; mso-no-proof: yes"&gt;&lt;span style="mso-spacerun: yes"&gt;    &lt;/span&gt;&amp;lt;&lt;/span&gt;&lt;span style="font-size: 9pt; color: #a31515; font-family: 'Courier New'; mso-ansi-language: EN-US; mso-no-proof: yes"&gt;SafetyStockLevel&lt;/span&gt;&lt;span style="font-size: 9pt; color: blue; font-family: 'Courier New'; mso-ansi-language: EN-US; mso-no-proof: yes"&gt;&amp;gt;&lt;/span&gt;&lt;span style="font-size: 9pt; font-family: 'Courier New'; mso-ansi-language: EN-US; mso-no-proof: yes"&gt;100&lt;span style="color: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;SafetyStockLevel&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="margin: 0cm 0cm 0pt; mso-layout-grid-align: none"&gt;&lt;span style="font-size: 9pt; color: blue; font-family: 'Courier New'; mso-ansi-language: EN-US; mso-no-proof: yes"&gt;&lt;span style="mso-spacerun: yes"&gt;    &lt;/span&gt;&amp;lt;&lt;/span&gt;&lt;span style="font-size: 9pt; color: #a31515; font-family: 'Courier New'; mso-ansi-language: EN-US; mso-no-proof: yes"&gt;ReorderPoint&lt;/span&gt;&lt;span style="font-size: 9pt; color: blue; font-family: 'Courier New'; mso-ansi-language: EN-US; mso-no-proof: yes"&gt;&amp;gt;&lt;/span&gt;&lt;span style="font-size: 9pt; font-family: 'Courier New'; mso-ansi-language: EN-US; mso-no-proof: yes"&gt;20&lt;span style="color: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;ReorderPoint&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="margin: 0cm 0cm 0pt; mso-layout-grid-align: none"&gt;&lt;span style="font-size: 9pt; color: blue; font-family: 'Courier New'; mso-ansi-language: EN-US; mso-no-proof: yes"&gt;&lt;span style="mso-spacerun: yes"&gt;    &lt;/span&gt;&amp;lt;&lt;/span&gt;&lt;span style="font-size: 9pt; color: #a31515; font-family: 'Courier New'; mso-ansi-language: EN-US; mso-no-proof: yes"&gt;StandardCost&lt;/span&gt;&lt;span style="font-size: 9pt; color: blue; font-family: 'Courier New'; mso-ansi-language: EN-US; mso-no-proof: yes"&gt;&amp;gt;&lt;/span&gt;&lt;span style="font-size: 9pt; font-family: 'Courier New'; mso-ansi-language: EN-US; mso-no-proof: yes"&gt;10&lt;span style="color: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;StandardCost&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="margin: 0cm 0cm 0pt; mso-layout-grid-align: none"&gt;&lt;span style="font-size: 9pt; color: blue; font-family: 'Courier New'; mso-ansi-language: EN-US; mso-no-proof: yes"&gt;&lt;span style="mso-spacerun: yes"&gt;    &lt;/span&gt;&amp;lt;&lt;/span&gt;&lt;span style="font-size: 9pt; color: #a31515; font-family: 'Courier New'; mso-ansi-language: EN-US; mso-no-proof: yes"&gt;ListPrice&lt;/span&gt;&lt;span style="font-size: 9pt; color: blue; font-family: 'Courier New'; mso-ansi-language: EN-US; mso-no-proof: yes"&gt;&amp;gt;&lt;/span&gt;&lt;span style="font-size: 9pt; font-family: 'Courier New'; mso-ansi-language: EN-US; mso-no-proof: yes"&gt;15.5&lt;span style="color: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;ListPrice&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="margin: 0cm 0cm 0pt; mso-layout-grid-align: none"&gt;&lt;span style="font-size: 9pt; color: blue; font-family: 'Courier New'; mso-ansi-language: EN-US; mso-no-proof: yes"&gt;&lt;span style="mso-spacerun: yes"&gt;    &lt;/span&gt;&amp;lt;&lt;/span&gt;&lt;span style="font-size: 9pt; color: #a31515; font-family: 'Courier New'; mso-ansi-language: EN-US; mso-no-proof: yes"&gt;DaysToManufacture&lt;/span&gt;&lt;span style="font-size: 9pt; color: blue; font-family: 'Courier New'; mso-ansi-language: EN-US; mso-no-proof: yes"&gt;&amp;gt;&lt;/span&gt;&lt;span style="font-size: 9pt; font-family: 'Courier New'; mso-ansi-language: EN-US; mso-no-proof: yes"&gt;60&lt;span style="color: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;DaysToManufacture&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="margin: 0cm 0cm 0pt; mso-layout-grid-align: none"&gt;&lt;span style="font-size: 9pt; color: blue; font-family: 'Courier New'; mso-ansi-language: EN-US; mso-no-proof: yes"&gt;&lt;span style="mso-spacerun: yes"&gt;    &lt;/span&gt;&amp;lt;&lt;/span&gt;&lt;span style="font-size: 9pt; color: #a31515; font-family: 'Courier New'; mso-ansi-language: EN-US; mso-no-proof: yes"&gt;SellStartDate&lt;/span&gt;&lt;span style="font-size: 9pt; color: blue; font-family: 'Courier New'; mso-ansi-language: EN-US; mso-no-proof: yes"&gt;&amp;gt;&lt;/span&gt;&lt;span style="font-size: 9pt; font-family: 'Courier New'; mso-ansi-language: EN-US; mso-no-proof: yes"&gt;2005-02-27T00:00:00.0000000&lt;span style="color: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;SellStartDate&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="margin: 0cm 0cm 0pt; mso-layout-grid-align: none"&gt;&lt;span style="font-size: 9pt; color: blue; font-family: 'Courier New'; mso-ansi-language: EN-US; mso-no-proof: yes"&gt;&lt;span style="mso-spacerun: yes"&gt;  &lt;/span&gt;&amp;lt;/&lt;/span&gt;&lt;span style="font-size: 9pt; color: #a31515; font-family: 'Courier New'; mso-ansi-language: EN-US; mso-no-proof: yes"&gt;AddProduct&lt;/span&gt;&lt;span style="font-size: 9pt; color: blue; font-family: 'Courier New'; mso-ansi-language: EN-US; mso-no-proof: yes"&gt;&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="margin: 0cm 0cm 10pt"&gt;&lt;span style="font-size: 9pt; color: blue; font-family: 'Courier New'; mso-ansi-language: EN-US; mso-no-proof: yes"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="font-size: 9pt; color: #a31515; font-family: 'Courier New'; mso-ansi-language: EN-US; mso-no-proof: yes"&gt;Messages&lt;/span&gt;&lt;span style="font-size: 9pt; color: blue; font-family: 'Courier New'; mso-ansi-language: EN-US; mso-no-proof: yes"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="margin: 0cm 0cm 10pt"&gt;&lt;span lang="EN-GB"&gt;&lt;font face="Calibri"&gt;The MSMQ adapter lets you specify Recoverable and Transactional flags, so your BizTalk-generated messages have the same durability options. When an NSB handler is listening at the queue, it processes the BizTalk messages in the same way as NSB messages.&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="margin: 0cm 0cm 10pt"&gt;&lt;span lang="EN-GB"&gt;&lt;font face="Calibri"&gt;Publishing NSB messages to BizTalk is trickier, as the Send and Publish methods from NSB check to see if there are any subscribers before they write to the queue (compare this to the &lt;/font&gt;&lt;a href="http://ayende.com/Blog/archive/2008/12/17/rhino-service-bus.aspx"&gt;&lt;font face="Calibri"&gt;Notify method in RhinoServiceBus&lt;/font&gt;&lt;/a&gt;&lt;font face="Calibri"&gt;). If a BizTalk MSMQ receive port is the only handler, no subscribers will be registered with NSB and the message won’t be published. So you need to either call Send with a named queue (&lt;/font&gt;&lt;/span&gt;&lt;span style="font-size: 9pt; font-family: 'Courier New'; mso-ansi-language: EN-US; mso-no-proof: yes"&gt;Bus.Send&amp;lt;&lt;span style="color: #2b91af"&gt;AddProduct&lt;/span&gt;&amp;gt;(&lt;span style="color: #a31515"&gt;"ExcelUpload.AddProductService.1.InputQueue"&lt;/span&gt;, m =&amp;gt;...)&lt;/span&gt;&lt;span lang="EN-GB"&gt;&lt;font face="Calibri"&gt;, or send a subscription message from BizTalk to register a subscriber. In the the second option you’d need to specify the message type in the subscription:&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="margin: 0cm 0cm 0pt; mso-layout-grid-align: none"&gt;&lt;span style="font-size: 9pt; color: blue; font-family: 'Courier New'; mso-ansi-language: EN-US"&gt;&amp;lt;?xml version="1.0" ?&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="margin: 0cm 0cm 0pt; mso-layout-grid-align: none"&gt;&lt;span style="font-size: 9pt; color: blue; font-family: 'Courier New'; mso-ansi-language: EN-US"&gt;&amp;lt;&lt;/span&gt;&lt;span style="font-size: 9pt; color: firebrick; font-family: 'Courier New'; mso-ansi-language: EN-US"&gt;string&lt;/span&gt;&lt;span style="font-size: 9pt; color: blue; font-family: 'Courier New'; mso-ansi-language: EN-US"&gt;&amp;gt;&lt;/span&gt;&lt;span style="font-size: 9pt; color: black; font-family: 'Courier New'; mso-ansi-language: EN-US; mso-bidi-font-weight: bold"&gt;ExcelUpload&lt;b&gt;.&lt;/b&gt;Messages.StartBatchUpload, ExcelUpload.Messages, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null&lt;/span&gt;&lt;span style="font-size: 9pt; color: blue; font-family: 'Courier New'; mso-ansi-language: EN-US"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="font-size: 9pt; color: firebrick; font-family: 'Courier New'; mso-ansi-language: EN-US"&gt;string&lt;/span&gt;&lt;span style="font-size: 9pt; color: blue; font-family: 'Courier New'; mso-ansi-language: EN-US"&gt;&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="margin: 0cm 0cm 0pt"&gt;&lt;i style="mso-bidi-font-style: normal"&gt;&lt;span lang="EN-GB"&gt;&lt;o:p&gt;&lt;font face="Calibri"&gt; &lt;/font&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/i&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="margin: 0cm 0cm 10pt"&gt;&lt;i style="mso-bidi-font-style: normal"&gt;&lt;span lang="EN-GB"&gt;&lt;font face="Calibri"&gt;Running the Sample&lt;o:p&gt;&lt;/o:p&gt;&lt;/font&gt;&lt;/span&gt;&lt;/i&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="margin: 0cm 0cm 10pt"&gt;&lt;span lang="EN-GB"&gt;&lt;font face="Calibri"&gt;(If you haven’t seen &lt;/font&gt;&lt;a href="http://geekswithblogs.net/EltonStoneman/archive/2009/11/18/processing-an-excel-upload-with-nservicebus.aspx"&gt;&lt;font face="Calibri"&gt;the original NSB sample&lt;/font&gt;&lt;/a&gt;&lt;font face="Calibri"&gt;, have a read as it details the pre-requisites).&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="margin: 0cm 0cm 10pt"&gt;&lt;span lang="EN-GB"&gt;&lt;font face="Calibri"&gt;To run the BizTalk solution, download ExcelUpload.BizTalk.Binaries.zip, unzip it and:&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoListParagraphCxSpFirst" style="margin: 0cm 0cm 0pt 36pt; text-indent: -18pt; mso-list: l0 level1 lfo2"&gt;&lt;span lang="EN-GB" style="font-family: Symbol; mso-fareast-font-family: Symbol; mso-bidi-font-family: Symbol"&gt;&lt;span style="mso-list: Ignore"&gt;·&lt;span style="font: 7pt 'Times New Roman'"&gt;         &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span lang="EN-GB"&gt;&lt;font face="Calibri"&gt;Copy &lt;i style="mso-bidi-font-style: normal"&gt;ExcelUpload.PipelineComponents.dll&lt;/i&gt; to your pipeline components directory – e.g. &lt;i style="mso-bidi-font-style: normal"&gt;C:\Program Files\Microsoft BizTalk Server 2006\Pipeline Components&lt;/i&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoListParagraphCxSpMiddle" style="margin: 0cm 0cm 0pt 36pt; text-indent: -18pt; mso-list: l0 level1 lfo2"&gt;&lt;span lang="EN-GB" style="font-family: Symbol; mso-fareast-font-family: Symbol; mso-bidi-font-family: Symbol"&gt;&lt;span style="mso-list: Ignore"&gt;·&lt;span style="font: 7pt 'Times New Roman'"&gt;         &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span lang="EN-GB"&gt;&lt;font face="Calibri"&gt;If you haven’t done so from the previous sample, run &lt;i style="mso-bidi-font-style: normal"&gt;uspInsertProduct.CREATE.sql&lt;/i&gt; &lt;/font&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoListParagraphCxSpMiddle" style="margin: 0cm 0cm 0pt 36pt; text-indent: -18pt; mso-list: l0 level1 lfo2"&gt;&lt;span lang="EN-GB" style="font-family: Symbol; mso-fareast-font-family: Symbol; mso-bidi-font-family: Symbol"&gt;&lt;span style="mso-list: Ignore"&gt;·&lt;span style="font: 7pt 'Times New Roman'"&gt;         &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span lang="EN-GB"&gt;&lt;font face="Calibri"&gt;Run &lt;i style="mso-bidi-font-style: normal"&gt;uspInsertProduct.CREATESYNONYM.sql&lt;/i&gt; &lt;/font&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoListParagraphCxSpMiddle" style="margin: 0cm 0cm 0pt 36pt; text-indent: -18pt; mso-list: l0 level1 lfo2"&gt;&lt;span lang="EN-GB" style="font-family: Symbol; mso-fareast-font-family: Symbol; mso-bidi-font-family: Symbol"&gt;&lt;span style="mso-list: Ignore"&gt;·&lt;span style="font: 7pt 'Times New Roman'"&gt;         &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span lang="EN-GB"&gt;&lt;font face="Calibri"&gt;Import the MSI into BizTalk&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoListParagraphCxSpMiddle" style="margin: 0cm 0cm 0pt 36pt; text-indent: -18pt; mso-list: l0 level1 lfo2"&gt;&lt;span lang="EN-GB" style="font-family: Symbol; mso-fareast-font-family: Symbol; mso-bidi-font-family: Symbol"&gt;&lt;span style="mso-list: Ignore"&gt;·&lt;span style="font: 7pt 'Times New Roman'"&gt;         &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span lang="EN-GB"&gt;&lt;font face="Calibri"&gt;Run the MSI&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoListParagraphCxSpMiddle" style="margin: 0cm 0cm 0pt 36pt; text-indent: -18pt; mso-list: l0 level1 lfo2"&gt;&lt;span lang="EN-GB" style="font-family: Symbol; mso-fareast-font-family: Symbol; mso-bidi-font-family: Symbol"&gt;&lt;span style="mso-list: Ignore"&gt;·&lt;span style="font: 7pt 'Times New Roman'"&gt;         &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span lang="EN-GB"&gt;&lt;font face="Calibri"&gt;Start send port SendInsertProduct.SQL (you’ll need to change the connection details)&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoListParagraphCxSpMiddle" style="margin: 0cm 0cm 0pt 36pt; text-indent: -18pt; mso-list: l0 level1 lfo2"&gt;&lt;span lang="EN-GB" style="font-family: Symbol; mso-fareast-font-family: Symbol; mso-bidi-font-family: Symbol"&gt;&lt;span style="mso-list: Ignore"&gt;·&lt;span style="font: 7pt 'Times New Roman'"&gt;         &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span lang="EN-GB"&gt;&lt;font face="Calibri"&gt;Enable receive location ReceiveStartUpload.FILE.XLS (monitors c:\drops\ExcelUpload)&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoListParagraphCxSpLast" style="margin: 0cm 0cm 10pt 36pt; text-indent: -18pt; mso-list: l0 level1 lfo2"&gt;&lt;span lang="EN-GB" style="font-family: Symbol; mso-fareast-font-family: Symbol; mso-bidi-font-family: Symbol"&gt;&lt;span style="mso-list: Ignore"&gt;·&lt;span style="font: 7pt 'Times New Roman'"&gt;         &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span lang="EN-GB"&gt;&lt;font face="Calibri"&gt;Drop an Excel file&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="margin: 0cm 0cm 10pt"&gt;&lt;span lang="EN-GB"&gt;&lt;font face="Calibri"&gt;As before, you’ll need to clear down the database between runs if you drop the same file repeatedly.&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="margin: 0cm 0cm 10pt"&gt;&lt;span lang="EN-GB"&gt;&lt;font face="Calibri"&gt;If you want to run the hybrid solutions, you should use the binaries in the new download rather than the original, as these run without a distributor. Run &lt;i style="mso-bidi-font-style: normal"&gt;start.cmd&lt;/i&gt; and there are three windows – Client (the file watcher), Host (the StartBatchUpload handler) and AddProductService (this is the AddProduct handler). &lt;/font&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="margin: 0cm 0cm 10pt"&gt;&lt;span lang="EN-GB"&gt;&lt;font face="Calibri"&gt;To run configuration 6 – NSB parsing the file and BizTalk handling the AddProduct messages:&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoListParagraphCxSpFirst" style="margin: 0cm 0cm 0pt 38.25pt; text-indent: -18pt; mso-add-space: auto; mso-list: l1 level1 lfo3"&gt;&lt;span lang="EN-GB" style="font-family: Symbol; mso-fareast-font-family: Symbol; mso-bidi-font-family: Symbol"&gt;&lt;span style="mso-list: Ignore"&gt;·&lt;span style="font: 7pt 'Times New Roman'"&gt;         &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span lang="EN-GB"&gt;&lt;font face="Calibri"&gt;Run start.cmd&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoListParagraphCxSpMiddle" style="margin: 0cm 0cm 0pt 38.25pt; text-indent: -18pt; mso-add-space: auto; mso-list: l1 level1 lfo3"&gt;&lt;span lang="EN-GB" style="font-family: Symbol; mso-fareast-font-family: Symbol; mso-bidi-font-family: Symbol"&gt;&lt;span style="mso-list: Ignore"&gt;·&lt;span style="font: 7pt 'Times New Roman'"&gt;         &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span lang="EN-GB"&gt;&lt;font face="Calibri"&gt;Kill the AddProductService console&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoListParagraphCxSpMiddle" style="margin: 0cm 0cm 0pt 38.25pt; text-indent: -18pt; mso-add-space: auto; mso-list: l1 level1 lfo3"&gt;&lt;span lang="EN-GB" style="font-family: Symbol; mso-fareast-font-family: Symbol; mso-bidi-font-family: Symbol"&gt;&lt;span style="mso-list: Ignore"&gt;·&lt;span style="font: 7pt 'Times New Roman'"&gt;         &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span lang="EN-GB"&gt;&lt;font face="Calibri"&gt;Disable receive location ReceiveStartUpload.FILE.XLS&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoListParagraphCxSpMiddle" style="margin: 0cm 0cm 0pt 38.25pt; text-indent: -18pt; mso-add-space: auto; mso-list: l1 level1 lfo3"&gt;&lt;span lang="EN-GB" style="font-family: Symbol; mso-fareast-font-family: Symbol; mso-bidi-font-family: Symbol"&gt;&lt;span style="mso-list: Ignore"&gt;·&lt;span style="font: 7pt 'Times New Roman'"&gt;         &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span lang="EN-GB"&gt;&lt;font face="Calibri"&gt;Enable receive location ReceiveAddProduct.MSMQ&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoListParagraphCxSpMiddle" style="margin: 0cm 0cm 0pt 38.25pt; text-indent: -18pt; mso-add-space: auto; mso-list: l1 level1 lfo3"&gt;&lt;span lang="EN-GB" style="font-family: Symbol; mso-fareast-font-family: Symbol; mso-bidi-font-family: Symbol"&gt;&lt;span style="mso-list: Ignore"&gt;·&lt;span style="font: 7pt 'Times New Roman'"&gt;         &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span lang="EN-GB"&gt;&lt;font face="Calibri"&gt;Unenlist send port SendAddProduct.MSMQ&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoListParagraphCxSpMiddle" style="margin: 0cm 0cm 0pt 38.25pt; text-indent: -18pt; mso-add-space: auto; mso-list: l1 level1 lfo3"&gt;&lt;span lang="EN-GB" style="font-family: Symbol; mso-fareast-font-family: Symbol; mso-bidi-font-family: Symbol"&gt;&lt;span style="mso-list: Ignore"&gt;·&lt;span style="font: 7pt 'Times New Roman'"&gt;         &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span lang="EN-GB"&gt;&lt;font face="Calibri"&gt;Start send port SendInsertProduct.SQL&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoListParagraphCxSpLast" style="margin: 0cm 0cm 10pt 38.25pt; text-indent: -18pt; mso-add-space: auto; mso-list: l1 level1 lfo3"&gt;&lt;span lang="EN-GB" style="font-family: Symbol; mso-fareast-font-family: Symbol; mso-bidi-font-family: Symbol"&gt;&lt;span style="mso-list: Ignore"&gt;·&lt;span style="font: 7pt 'Times New Roman'"&gt;         &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span lang="EN-GB"&gt;&lt;font face="Calibri"&gt;Drop an Excel file&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="margin: 0cm 0cm 10pt"&gt;&lt;span lang="EN-GB"&gt;&lt;font face="Calibri"&gt;To run configuration 7 – BizTalk parsing the file and NSB handling the AddProduct messages:&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoListParagraphCxSpFirst" style="margin: 0cm 0cm 0pt 38.25pt; text-indent: -18pt; mso-add-space: auto; mso-list: l1 level1 lfo3"&gt;&lt;span lang="EN-GB" style="font-family: Symbol; mso-fareast-font-family: Symbol; mso-bidi-font-family: Symbol"&gt;&lt;span style="mso-list: Ignore"&gt;·&lt;span style="font: 7pt 'Times New Roman'"&gt;         &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span lang="EN-GB"&gt;&lt;font face="Calibri"&gt;Run start.cmd&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoListParagraphCxSpMiddle" style="margin: 0cm 0cm 0pt 38.25pt; text-indent: -18pt; mso-add-space: auto; mso-list: l1 level1 lfo3"&gt;&lt;span lang="EN-GB" style="font-family: Symbol; mso-fareast-font-family: Symbol; mso-bidi-font-family: Symbol"&gt;&lt;span style="mso-list: Ignore"&gt;·&lt;span style="font: 7pt 'Times New Roman'"&gt;         &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span lang="EN-GB"&gt;&lt;font face="Calibri"&gt;Kill the Host and Client consoles&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoListParagraphCxSpMiddle" style="margin: 0cm 0cm 0pt 38.25pt; text-indent: -18pt; mso-add-space: auto; mso-list: l1 level1 lfo3"&gt;&lt;span lang="EN-GB" style="font-family: Symbol; mso-fareast-font-family: Symbol; mso-bidi-font-family: Symbol"&gt;&lt;span style="mso-list: Ignore"&gt;·&lt;span style="font: 7pt 'Times New Roman'"&gt;         &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span lang="EN-GB"&gt;&lt;font face="Calibri"&gt;Enable receive location ReceiveStartUpload.FILE.XLS&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoListParagraphCxSpMiddle" style="margin: 0cm 0cm 0pt 38.25pt; text-indent: -18pt; mso-add-space: auto; mso-list: l1 level1 lfo3"&gt;&lt;span lang="EN-GB" style="font-family: Symbol; mso-fareast-font-family: Symbol; mso-bidi-font-family: Symbol"&gt;&lt;span style="mso-list: Ignore"&gt;·&lt;span style="font: 7pt 'Times New Roman'"&gt;         &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span lang="EN-GB"&gt;&lt;font face="Calibri"&gt;Disable receive location ReceiveAddProduct.MSMQ&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoListParagraphCxSpMiddle" style="margin: 0cm 0cm 0pt 38.25pt; text-indent: -18pt; mso-add-space: auto; mso-list: l1 level1 lfo3"&gt;&lt;span lang="EN-GB" style="font-family: Symbol; mso-fareast-font-family: Symbol; mso-bidi-font-family: Symbol"&gt;&lt;span style="mso-list: Ignore"&gt;·&lt;span style="font: 7pt 'Times New Roman'"&gt;         &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span lang="EN-GB"&gt;&lt;font face="Calibri"&gt;Start send port SendAddProduct.MSMQ&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoListParagraphCxSpMiddle" style="margin: 0cm 0cm 0pt 38.25pt; text-indent: -18pt; mso-add-space: auto; mso-list: l1 level1 lfo3"&gt;&lt;span lang="EN-GB" style="font-family: Symbol; mso-fareast-font-family: Symbol; mso-bidi-font-family: Symbol"&gt;&lt;span style="mso-list: Ignore"&gt;·&lt;span style="font: 7pt 'Times New Roman'"&gt;         &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span lang="EN-GB"&gt;&lt;font face="Calibri"&gt;Unenlist send port SendInsertProduct.SQL&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoListParagraphCxSpLast" style="margin: 0cm 0cm 10pt 38.25pt; text-indent: -18pt; mso-add-space: auto; mso-list: l1 level1 lfo3"&gt;&lt;span lang="EN-GB" style="font-family: Symbol; mso-fareast-font-family: Symbol; mso-bidi-font-family: Symbol"&gt;&lt;span style="mso-list: Ignore"&gt;·&lt;span style="font: 7pt 'Times New Roman'"&gt;         &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span lang="EN-GB"&gt;&lt;font face="Calibri"&gt;Drop an Excel file&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="margin: 0cm 0cm 10pt"&gt;&lt;i style="mso-bidi-font-style: normal"&gt;&lt;span lang="EN-GB"&gt;&lt;font face="Calibri"&gt;Source Code&lt;o:p&gt;&lt;/o:p&gt;&lt;/font&gt;&lt;/span&gt;&lt;/i&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="margin: 0cm 0cm 10pt"&gt;&lt;span lang="EN-GB"&gt;&lt;font face="Calibri"&gt;The source and referenced assemblies are in &lt;i style="mso-bidi-font-style: normal"&gt;ExcelUpload.BizTalk.Source.zip&lt;/i&gt;. There is a VS 2008 solution for the nServiceBus components, and a VS 2005 solution for the BizTalk components.&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;img src="http://geekswithblogs.net/EltonStoneman/aggbug/136449.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>EltonStoneman</dc:creator>
            <guid>http://geekswithblogs.net/EltonStoneman/archive/2009/11/21/processing-excel-uploads-with-biztalk-and-nservicebus.aspx</guid>
            <pubDate>Sat, 21 Nov 2009 01:57:56 GMT</pubDate>
            <wfw:comment>http://geekswithblogs.net/EltonStoneman/comments/136449.aspx</wfw:comment>
            <comments>http://geekswithblogs.net/EltonStoneman/archive/2009/11/21/processing-excel-uploads-with-biztalk-and-nservicebus.aspx#feedback</comments>
            <slash:comments>47</slash:comments>
            <wfw:commentRss>http://geekswithblogs.net/EltonStoneman/comments/commentRss/136449.aspx</wfw:commentRss>
        </item>
        <item>
            <title>Processing an Excel upload with nServiceBus</title>
            <link>http://geekswithblogs.net/EltonStoneman/archive/2009/11/18/processing-an-excel-upload-with-nservicebus.aspx</link>
            <description>&lt;p&gt; &lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;&lt;meta http-equiv="Content-Type" content="text/html; charset=utf-8" /&gt;
&lt;meta name="ProgId" content="Word.Document" /&gt;
&lt;meta name="Generator" content="Microsoft Word 12" /&gt;
&lt;meta name="Originator" content="Microsoft Word 12" /&gt;
&lt;link rel="File-List" href="file:///C:\DOCUME~1\ELTON~1.STO\LOCALS~1\Temp\msohtmlclip1\01\clip_filelist.xml" /&gt;
&lt;link rel="Edit-Time-Data" href="file:///C:\DOCUME~1\ELTON~1.STO\LOCALS~1\Temp\msohtmlclip1\01\clip_editdata.mso" /&gt;&lt;!--[if !mso]&gt;
&lt;style&gt;
v\:* {behavior:url(#default#VML);}
o\:* {behavior:url(#default#VML);}
w\:* {behavior:url(#default#VML);}
.shape {behavior:url(#default#VML);}
&lt;/style&gt;
&lt;![endif]--&gt;&lt;!--[if gte mso 9]&gt;&lt;xml&gt;
&lt;o:OfficeDocumentSettings&gt;
&lt;o:RelyOnVML /&gt;
&lt;o:AllowPNG /&gt;
&lt;/o:OfficeDocumentSettings&gt;
&lt;/xml&gt;&lt;![endif]--&gt;
&lt;link rel="themeData" href="file:///C:\DOCUME~1\ELTON~1.STO\LOCALS~1\Temp\msohtmlclip1\01\clip_themedata.thmx" /&gt;
&lt;link rel="colorSchemeMapping" href="file:///C:\DOCUME~1\ELTON~1.STO\LOCALS~1\Temp\msohtmlclip1\01\clip_colorschememapping.xml" /&gt;&lt;!--[if gte mso 9]&gt;&lt;xml&gt;
&lt;w:WordDocument&gt;
&lt;w:View&gt;Normal&lt;/w:View&gt;
&lt;w:Zoom&gt;0&lt;/w:Zoom&gt;
&lt;w:TrackMoves&gt;false&lt;/w:TrackMoves&gt;
&lt;w:TrackFormatting /&gt;
&lt;w:DoNotShowRevisions /&gt;
&lt;w:DoNotPrintRevisions /&gt;
&lt;w:DoNotShowComments /&gt;
&lt;w:DoNotShowInsertionsAndDeletions /&gt;
&lt;w:DoNotShowPropertyChanges /&gt;
&lt;w:PunctuationKerning /&gt;
&lt;w:ValidateAgainstSchemas /&gt;
&lt;w:SaveIfXMLInvalid&gt;false&lt;/w:SaveIfXMLInvalid&gt;
&lt;w:IgnoreMixedContent&gt;false&lt;/w:IgnoreMixedContent&gt;
&lt;w:AlwaysShowPlaceholderText&gt;false&lt;/w:AlwaysShowPlaceholderText&gt;
&lt;w:DoNotPromoteQF /&gt;
&lt;w:LidThemeOther&gt;EN-GB&lt;/w:LidThemeOther&gt;
&lt;w:LidThemeAsian&gt;X-NONE&lt;/w:LidThemeAsian&gt;
&lt;w:LidThemeComplexScript&gt;X-NONE&lt;/w:LidThemeComplexScript&gt;
&lt;w:Compatibility&gt;
&lt;w:BreakWrappedTables /&gt;
&lt;w:SnapToGridInCell /&gt;
&lt;w:WrapTextWithPunct /&gt;
&lt;w:UseAsianBreakRules /&gt;
&lt;w:DontGrowAutofit /&gt;
&lt;w:SplitPgBreakAndParaMark /&gt;
&lt;w:DontVertAlignCellWithSp /&gt;
&lt;w:DontBreakConstrainedForcedTables /&gt;
&lt;w:DontVertAlignInTxbx /&gt;
&lt;w:Word11KerningPairs /&gt;
&lt;w:CachedColBalance /&gt;
&lt;w:UseFELayout /&gt;
&lt;/w:Compatibility&gt;
&lt;w:DoNotOptimizeForBrowser /&gt;
&lt;m:mathPr&gt;
&lt;m:mathFont m:val="Cambria Math" /&gt;
&lt;m:brkBin m:val="before" /&gt;
&lt;m:brkBinSub m:val="&amp;#45;-" /&gt;
&lt;m:smallFrac m:val="off" /&gt;
&lt;m:dispDef /&gt;
&lt;m:lMargin m:val="0" /&gt;
&lt;m:rMargin m:val="0" /&gt;
&lt;m:defJc m:val="centerGroup" /&gt;
&lt;m:wrapIndent m:val="1440" /&gt;
&lt;m:intLim m:val="subSup" /&gt;
&lt;m:naryLim m:val="undOvr" /&gt;
&lt;/m:mathPr&gt;&lt;/w:WordDocument&gt;
&lt;/xml&gt;&lt;![endif]--&gt;&lt;!--[if gte mso 9]&gt;&lt;xml&gt;
&lt;w:LatentStyles DefLockedState="false" DefUnhideWhenUsed="true"
DefSemiHidden="true" DefQFormat="false" DefPriority="99"
LatentStyleCount="267"&gt;
&lt;w:LsdException Locked="false" Priority="1" SemiHidden="false"
UnhideWhenUsed="false" QFormat="true" Name="Normal" /&gt;
&lt;w:LsdException Locked="false" Priority="9" SemiHidden="false"
UnhideWhenUsed="false" QFormat="true" Name="heading 1" /&gt;
&lt;w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 2" /&gt;
&lt;w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 3" /&gt;
&lt;w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 4" /&gt;
&lt;w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 5" /&gt;
&lt;w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 6" /&gt;
&lt;w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 7" /&gt;
&lt;w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 8" /&gt;
&lt;w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 9" /&gt;
&lt;w:LsdException Locked="false" Priority="39" Name="toc 1" /&gt;
&lt;w:LsdException Locked="false" Priority="39" Name="toc 2" /&gt;
&lt;w:LsdException Locked="false" Priority="39" Name="toc 3" /&gt;
&lt;w:LsdException Locked="false" Priority="39" Name="toc 4" /&gt;
&lt;w:LsdException Locked="false" Priority="39" Name="toc 5" /&gt;
&lt;w:LsdException Locked="false" Priority="39" Name="toc 6" /&gt;
&lt;w:LsdException Locked="false" Priority="39" Name="toc 7" /&gt;
&lt;w:LsdException Locked="false" Priority="39" Name="toc 8" /&gt;
&lt;w:LsdException Locked="false" Priority="39" Name="toc 9" /&gt;
&lt;w:LsdException Locked="false" Priority="35" QFormat="true" Name="caption" /&gt;
&lt;w:LsdException Locked="false" Priority="10" SemiHidden="false"
UnhideWhenUsed="false" QFormat="true" Name="Title" /&gt;
&lt;w:LsdException Locked="false" Priority="1" Name="Default Paragraph Font" /&gt;
&lt;w:LsdException Locked="false" Priority="11" SemiHidden="false"
UnhideWhenUsed="false" QFormat="true" Name="Subtitle" /&gt;
&lt;w:LsdException Locked="false" Priority="22" SemiHidden="false"
UnhideWhenUsed="false" QFormat="true" Name="Strong" /&gt;
&lt;w:LsdException Locked="false" Priority="20" SemiHidden="false"
UnhideWhenUsed="false" QFormat="true" Name="Emphasis" /&gt;
&lt;w:LsdException Locked="false" Priority="59" SemiHidden="false"
UnhideWhenUsed="false" Name="Table Grid" /&gt;
&lt;w:LsdException Locked="false" UnhideWhenUsed="false" Name="Placeholder Text" /&gt;
&lt;w:LsdException Locked="false" Priority="1" SemiHidden="false"
UnhideWhenUsed="false" QFormat="true" Name="No Spacing" /&gt;
&lt;w:LsdException Locked="false" Priority="60" SemiHidden="false"
UnhideWhenUsed="false" Name="Light Shading" /&gt;
&lt;w:LsdException Locked="false" Priority="61" SemiHidden="false"
UnhideWhenUsed="false" Name="Light List" /&gt;
&lt;w:LsdException Locked="false" Priority="62" SemiHidden="false"
UnhideWhenUsed="false" Name="Light Grid" /&gt;
&lt;w:LsdException Locked="false" Priority="63" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Shading 1" /&gt;
&lt;w:LsdException Locked="false" Priority="64" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Shading 2" /&gt;
&lt;w:LsdException Locked="false" Priority="65" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium List 1" /&gt;
&lt;w:LsdException Locked="false" Priority="66" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium List 2" /&gt;
&lt;w:LsdException Locked="false" Priority="67" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Grid 1" /&gt;
&lt;w:LsdException Locked="false" Priority="68" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Grid 2" /&gt;
&lt;w:LsdException Locked="false" Priority="69" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Grid 3" /&gt;
&lt;w:LsdException Locked="false" Priority="70" SemiHidden="false"
UnhideWhenUsed="false" Name="Dark List" /&gt;
&lt;w:LsdException Locked="false" Priority="71" SemiHidden="false"
UnhideWhenUsed="false" Name="Colorful Shading" /&gt;
&lt;w:LsdException Locked="false" Priority="72" SemiHidden="false"
UnhideWhenUsed="false" Name="Colorful List" /&gt;
&lt;w:LsdException Locked="false" Priority="73" SemiHidden="false"
UnhideWhenUsed="false" Name="Colorful Grid" /&gt;
&lt;w:LsdException Locked="false" Priority="60" SemiHidden="false"
UnhideWhenUsed="false" Name="Light Shading Accent 1" /&gt;
&lt;w:LsdException Locked="false" Priority="61" SemiHidden="false"
UnhideWhenUsed="false" Name="Light List Accent 1" /&gt;
&lt;w:LsdException Locked="false" Priority="62" SemiHidden="false"
UnhideWhenUsed="false" Name="Light Grid Accent 1" /&gt;
&lt;w:LsdException Locked="false" Priority="63" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Shading 1 Accent 1" /&gt;
&lt;w:LsdException Locked="false" Priority="64" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Shading 2 Accent 1" /&gt;
&lt;w:LsdException Locked="false" Priority="65" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium List 1 Accent 1" /&gt;
&lt;w:LsdException Locked="false" UnhideWhenUsed="false" Name="Revision" /&gt;
&lt;w:LsdException Locked="false" Priority="34" SemiHidden="false"
UnhideWhenUsed="false" QFormat="true" Name="List Paragraph" /&gt;
&lt;w:LsdException Locked="false" Priority="29" SemiHidden="false"
UnhideWhenUsed="false" QFormat="true" Name="Quote" /&gt;
&lt;w:LsdException Locked="false" Priority="30" SemiHidden="false"
UnhideWhenUsed="false" QFormat="true" Name="Intense Quote" /&gt;
&lt;w:LsdException Locked="false" Priority="66" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium List 2 Accent 1" /&gt;
&lt;w:LsdException Locked="false" Priority="67" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Grid 1 Accent 1" /&gt;
&lt;w:LsdException Locked="false" Priority="68" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Grid 2 Accent 1" /&gt;
&lt;w:LsdException Locked="false" Priority="69" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Grid 3 Accent 1" /&gt;
&lt;w:LsdException Locked="false" Priority="70" SemiHidden="false"
UnhideWhenUsed="false" Name="Dark List Accent 1" /&gt;
&lt;w:LsdException Locked="false" Priority="71" SemiHidden="false"
UnhideWhenUsed="false" Name="Colorful Shading Accent 1" /&gt;
&lt;w:LsdException Locked="false" Priority="72" SemiHidden="false"
UnhideWhenUsed="false" Name="Colorful List Accent 1" /&gt;
&lt;w:LsdException Locked="false" Priority="73" SemiHidden="false"
UnhideWhenUsed="false" Name="Colorful Grid Accent 1" /&gt;
&lt;w:LsdException Locked="false" Priority="60" SemiHidden="false"
UnhideWhenUsed="false" Name="Light Shading Accent 2" /&gt;
&lt;w:LsdException Locked="false" Priority="61" SemiHidden="false"
UnhideWhenUsed="false" Name="Light List Accent 2" /&gt;
&lt;w:LsdException Locked="false" Priority="62" SemiHidden="false"
UnhideWhenUsed="false" Name="Light Grid Accent 2" /&gt;
&lt;w:LsdException Locked="false" Priority="63" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Shading 1 Accent 2" /&gt;
&lt;w:LsdException Locked="false" Priority="64" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Shading 2 Accent 2" /&gt;
&lt;w:LsdException Locked="false" Priority="65" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium List 1 Accent 2" /&gt;
&lt;w:LsdException Locked="false" Priority="66" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium List 2 Accent 2" /&gt;
&lt;w:LsdException Locked="false" Priority="67" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Grid 1 Accent 2" /&gt;
&lt;w:LsdException Locked="false" Priority="68" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Grid 2 Accent 2" /&gt;
&lt;w:LsdException Locked="false" Priority="69" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Grid 3 Accent 2" /&gt;
&lt;w:LsdException Locked="false" Priority="70" SemiHidden="false"
UnhideWhenUsed="false" Name="Dark List Accent 2" /&gt;
&lt;w:LsdException Locked="false" Priority="71" SemiHidden="false"
UnhideWhenUsed="false" Name="Colorful Shading Accent 2" /&gt;
&lt;w:LsdException Locked="false" Priority="72" SemiHidden="false"
UnhideWhenUsed="false" Name="Colorful List Accent 2" /&gt;
&lt;w:LsdException Locked="false" Priority="73" SemiHidden="false"
UnhideWhenUsed="false" Name="Colorful Grid Accent 2" /&gt;
&lt;w:LsdException Locked="false" Priority="60" SemiHidden="false"
UnhideWhenUsed="false" Name="Light Shading Accent 3" /&gt;
&lt;w:LsdException Locked="false" Priority="61" SemiHidden="false"
UnhideWhenUsed="false" Name="Light List Accent 3" /&gt;
&lt;w:LsdException Locked="false" Priority="62" SemiHidden="false"
UnhideWhenUsed="false" Name="Light Grid Accent 3" /&gt;
&lt;w:LsdException Locked="false" Priority="63" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Shading 1 Accent 3" /&gt;
&lt;w:LsdException Locked="false" Priority="64" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Shading 2 Accent 3" /&gt;
&lt;w:LsdException Locked="false" Priority="65" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium List 1 Accent 3" /&gt;
&lt;w:LsdException Locked="false" Priority="66" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium List 2 Accent 3" /&gt;
&lt;w:LsdException Locked="false" Priority="67" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Grid 1 Accent 3" /&gt;
&lt;w:LsdException Locked="false" Priority="68" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Grid 2 Accent 3" /&gt;
&lt;w:LsdException Locked="false" Priority="69" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Grid 3 Accent 3" /&gt;
&lt;w:LsdException Locked="false" Priority="70" SemiHidden="false"
UnhideWhenUsed="false" Name="Dark List Accent 3" /&gt;
&lt;w:LsdException Locked="false" Priority="71" SemiHidden="false"
UnhideWhenUsed="false" Name="Colorful Shading Accent 3" /&gt;
&lt;w:LsdException Locked="false" Priority="72" SemiHidden="false"
UnhideWhenUsed="false" Name="Colorful List Accent 3" /&gt;
&lt;w:LsdException Locked="false" Priority="73" SemiHidden="false"
UnhideWhenUsed="false" Name="Colorful Grid Accent 3" /&gt;
&lt;w:LsdException Locked="false" Priority="60" SemiHidden="false"
UnhideWhenUsed="false" Name="Light Shading Accent 4" /&gt;
&lt;w:LsdException Locked="false" Priority="61" SemiHidden="false"
UnhideWhenUsed="false" Name="Light List Accent 4" /&gt;
&lt;w:LsdException Locked="false" Priority="62" SemiHidden="false"
UnhideWhenUsed="false" Name="Light Grid Accent 4" /&gt;
&lt;w:LsdException Locked="false" Priority="63" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Shading 1 Accent 4" /&gt;
&lt;w:LsdException Locked="false" Priority="64" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Shading 2 Accent 4" /&gt;
&lt;w:LsdException Locked="false" Priority="65" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium List 1 Accent 4" /&gt;
&lt;w:LsdException Locked="false" Priority="66" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium List 2 Accent 4" /&gt;
&lt;w:LsdException Locked="false" Priority="67" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Grid 1 Accent 4" /&gt;
&lt;w:LsdException Locked="false" Priority="68" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Grid 2 Accent 4" /&gt;
&lt;w:LsdException Locked="false" Priority="69" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Grid 3 Accent 4" /&gt;
&lt;w:LsdException Locked="false" Priority="70" SemiHidden="false"
UnhideWhenUsed="false" Name="Dark List Accent 4" /&gt;
&lt;w:LsdException Locked="false" Priority="71" SemiHidden="false"
UnhideWhenUsed="false" Name="Colorful Shading Accent 4" /&gt;
&lt;w:LsdException Locked="false" Priority="72" SemiHidden="false"
UnhideWhenUsed="false" Name="Colorful List Accent 4" /&gt;
&lt;w:LsdException Locked="false" Priority="73" SemiHidden="false"
UnhideWhenUsed="false" Name="Colorful Grid Accent 4" /&gt;
&lt;w:LsdException Locked="false" Priority="60" SemiHidden="false"
UnhideWhenUsed="false" Name="Light Shading Accent 5" /&gt;
&lt;w:LsdException Locked="false" Priority="61" SemiHidden="false"
UnhideWhenUsed="false" Name="Light List Accent 5" /&gt;
&lt;w:LsdException Locked="false" Priority="62" SemiHidden="false"
UnhideWhenUsed="false" Name="Light Grid Accent 5" /&gt;
&lt;w:LsdException Locked="false" Priority="63" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Shading 1 Accent 5" /&gt;
&lt;w:LsdException Locked="false" Priority="64" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Shading 2 Accent 5" /&gt;
&lt;w:LsdException Locked="false" Priority="65" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium List 1 Accent 5" /&gt;
&lt;w:LsdException Locked="false" Priority="66" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium List 2 Accent 5" /&gt;
&lt;w:LsdException Locked="false" Priority="67" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Grid 1 Accent 5" /&gt;
&lt;w:LsdException Locked="false" Priority="68" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Grid 2 Accent 5" /&gt;
&lt;w:LsdException Locked="false" Priority="69" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Grid 3 Accent 5" /&gt;
&lt;w:LsdException Locked="false" Priority="70" SemiHidden="false"
UnhideWhenUsed="false" Name="Dark List Accent 5" /&gt;
&lt;w:LsdException Locked="false" Priority="71" SemiHidden="false"
UnhideWhenUsed="false" Name="Colorful Shading Accent 5" /&gt;
&lt;w:LsdException Locked="false" Priority="72" SemiHidden="false"
UnhideWhenUsed="false" Name="Colorful List Accent 5" /&gt;
&lt;w:LsdException Locked="false" Priority="73" SemiHidden="false"
UnhideWhenUsed="false" Name="Colorful Grid Accent 5" /&gt;
&lt;w:LsdException Locked="false" Priority="60" SemiHidden="false"
UnhideWhenUsed="false" Name="Light Shading Accent 6" /&gt;
&lt;w:LsdException Locked="false" Priority="61" SemiHidden="false"
UnhideWhenUsed="false" Name="Light List Accent 6" /&gt;
&lt;w:LsdException Locked="false" Priority="62" SemiHidden="false"
UnhideWhenUsed="false" Name="Light Grid Accent 6" /&gt;
&lt;w:LsdException Locked="false" Priority="63" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Shading 1 Accent 6" /&gt;
&lt;w:LsdException Locked="false" Priority="64" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Shading 2 Accent 6" /&gt;
&lt;w:LsdException Locked="false" Priority="65" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium List 1 Accent 6" /&gt;
&lt;w:LsdException Locked="false" Priority="66" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium List 2 Accent 6" /&gt;
&lt;w:LsdException Locked="false" Priority="67" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Grid 1 Accent 6" /&gt;
&lt;w:LsdException Locked="false" Priority="68" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Grid 2 Accent 6" /&gt;
&lt;w:LsdException Locked="false" Priority="69" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Grid 3 Accent 6" /&gt;
&lt;w:LsdException Locked="false" Priority="70" SemiHidden="false"
UnhideWhenUsed="false" Name="Dark List Accent 6" /&gt;
&lt;w:LsdException Locked="false" Priority="71" SemiHidden="false"
UnhideWhenUsed="false" Name="Colorful Shading Accent 6" /&gt;
&lt;w:LsdException Locked="false" Priority="72" SemiHidden="false"
UnhideWhenUsed="false" Name="Colorful List Accent 6" /&gt;
&lt;w:LsdException Locked="false" Priority="73" SemiHidden="false"
UnhideWhenUsed="false" Name="Colorful Grid Accent 6" /&gt;
&lt;w:LsdException Locked="false" Priority="19" SemiHidden="false"
UnhideWhenUsed="false" QFormat="true" Name="Subtle Emphasis" /&gt;
&lt;w:LsdException Locked="false" Priority="21" SemiHidden="false"
UnhideWhenUsed="false" QFormat="true" Name="Intense Emphasis" /&gt;
&lt;w:LsdException Locked="false" Priority="31" SemiHidden="false"
UnhideWhenUsed="false" QFormat="true" Name="Subtle Reference" /&gt;
&lt;w:LsdException Locked="false" Priority="32" SemiHidden="false"
UnhideWhenUsed="false" QFormat="true" Name="Intense Reference" /&gt;
&lt;w:LsdException Locked="false" Priority="33" SemiHidden="false"
UnhideWhenUsed="false" QFormat="true" Name="Book Title" /&gt;
&lt;w:LsdException Locked="false" Priority="37" Name="Bibliography" /&gt;
&lt;w:LsdException Locked="false" Priority="39" QFormat="true" Name="TOC Heading" /&gt;
&lt;/w:LatentStyles&gt;
&lt;/xml&gt;&lt;![endif]--&gt;&lt;style type="text/css"&gt;&lt;!--
 /* Font Definitions */
 @font-face
	{font-family:Wingdings;
	panose-1:5 0 0 0 0 0 0 0 0 0;
	mso-font-charset:2;
	mso-generic-font-family:auto;
	mso-font-pitch:variable;
	mso-font-signature:0 268435456 0 0 -2147483648 0;}
@font-face
	{font-family:"Cambria Math";
	panose-1:2 4 5 3 5 4 6 3 2 4;
	mso-font-charset:0;
	mso-generic-font-family:roman;
	mso-font-pitch:variable;
	mso-font-signature:-1610611985 1107304683 0 0 159 0;}
@font-face
	{font-family:Calibri;
	panose-1:2 15 5 2 2 2 4 3 2 4;
	mso-font-charset:0;
	mso-generic-font-family:swiss;
	mso-font-pitch:variable;
	mso-font-signature:-1610611985 1073750139 0 0 159 0;}
 /* Style Definitions */
 p.MsoNormal, li.MsoNormal, div.MsoNormal
	{mso-style-priority:1;
	mso-style-unhide:no;
	mso-style-qformat:yes;
	mso-style-parent:"";
	margin-top:0cm;
	margin-right:0cm;
	margin-bottom:10.0pt;
	margin-left:0cm;
	mso-pagination:widow-orphan;
	font-size:11.0pt;
	mso-bidi-font-size:10.0pt;
	font-family:"Calibri","sans-serif";
	mso-ascii-font-family:Calibri;
	mso-ascii-theme-font:minor-latin;
	mso-fareast-font-family:"Times New Roman";
	mso-fareast-theme-font:minor-fareast;
	mso-hansi-font-family:Calibri;
	mso-hansi-theme-font:minor-latin;
	mso-bidi-font-family:"Times New Roman";
	mso-bidi-theme-font:minor-bidi;}
a:link, span.MsoHyperlink
	{mso-style-noshow:yes;
	mso-style-priority:99;
	mso-style-unhide:no;
	color:blue;
	mso-themecolor:hyperlink;
	text-decoration:underline;
	text-underline:single;}
a:visited, span.MsoHyperlinkFollowed
	{mso-style-noshow:yes;
	mso-style-priority:99;
	color:purple;
	mso-themecolor:followedhyperlink;
	text-decoration:underline;
	text-underline:single;}
p.MsoListParagraph, li.MsoListParagraph, div.MsoListParagraph
	{mso-style-priority:34;
	mso-style-unhide:no;
	mso-style-qformat:yes;
	margin-top:0cm;
	margin-right:0cm;
	margin-bottom:10.0pt;
	margin-left:36.0pt;
	mso-add-space:auto;
	mso-pagination:widow-orphan;
	font-size:11.0pt;
	mso-bidi-font-size:10.0pt;
	font-family:"Calibri","sans-serif";
	mso-ascii-font-family:Calibri;
	mso-ascii-theme-font:minor-latin;
	mso-fareast-font-family:"Times New Roman";
	mso-fareast-theme-font:minor-fareast;
	mso-hansi-font-family:Calibri;
	mso-hansi-theme-font:minor-latin;
	mso-bidi-font-family:"Times New Roman";
	mso-bidi-theme-font:minor-bidi;}
p.MsoListParagraphCxSpFirst, li.MsoListParagraphCxSpFirst, div.MsoListParagraphCxSpFirst
	{mso-style-priority:34;
	mso-style-unhide:no;
	mso-style-qformat:yes;
	mso-style-type:export-only;
	margin-top:0cm;
	margin-right:0cm;
	margin-bottom:0cm;
	margin-left:36.0pt;
	margin-bottom:.0001pt;
	mso-add-space:auto;
	mso-pagination:widow-orphan;
	font-size:11.0pt;
	mso-bidi-font-size:10.0pt;
	font-family:"Calibri","sans-serif";
	mso-ascii-font-family:Calibri;
	mso-ascii-theme-font:minor-latin;
	mso-fareast-font-family:"Times New Roman";
	mso-fareast-theme-font:minor-fareast;
	mso-hansi-font-family:Calibri;
	mso-hansi-theme-font:minor-latin;
	mso-bidi-font-family:"Times New Roman";
	mso-bidi-theme-font:minor-bidi;}
p.MsoListParagraphCxSpMiddle, li.MsoListParagraphCxSpMiddle, div.MsoListParagraphCxSpMiddle
	{mso-style-priority:34;
	mso-style-unhide:no;
	mso-style-qformat:yes;
	mso-style-type:export-only;
	margin-top:0cm;
	margin-right:0cm;
	margin-bottom:0cm;
	margin-left:36.0pt;
	margin-bottom:.0001pt;
	mso-add-space:auto;
	mso-pagination:widow-orphan;
	font-size:11.0pt;
	mso-bidi-font-size:10.0pt;
	font-family:"Calibri","sans-serif";
	mso-ascii-font-family:Calibri;
	mso-ascii-theme-font:minor-latin;
	mso-fareast-font-family:"Times New Roman";
	mso-fareast-theme-font:minor-fareast;
	mso-hansi-font-family:Calibri;
	mso-hansi-theme-font:minor-latin;
	mso-bidi-font-family:"Times New Roman";
	mso-bidi-theme-font:minor-bidi;}
p.MsoListParagraphCxSpLast, li.MsoListParagraphCxSpLast, div.MsoListParagraphCxSpLast
	{mso-style-priority:34;
	mso-style-unhide:no;
	mso-style-qformat:yes;
	mso-style-type:export-only;
	margin-top:0cm;
	margin-right:0cm;
	margin-bottom:10.0pt;
	margin-left:36.0pt;
	mso-add-space:auto;
	mso-pagination:widow-orphan;
	font-size:11.0pt;
	mso-bidi-font-size:10.0pt;
	font-family:"Calibri","sans-serif";
	mso-ascii-font-family:Calibri;
	mso-ascii-theme-font:minor-latin;
	mso-fareast-font-family:"Times New Roman";
	mso-fareast-theme-font:minor-fareast;
	mso-hansi-font-family:Calibri;
	mso-hansi-theme-font:minor-latin;
	mso-bidi-font-family:"Times New Roman";
	mso-bidi-theme-font:minor-bidi;}
.MsoChpDefault
	{mso-style-type:export-only;
	mso-default-props:yes;
	mso-bidi-font-size:10.0pt;
	mso-ascii-font-family:Calibri;
	mso-ascii-theme-font:minor-latin;
	mso-fareast-font-family:"Times New Roman";
	mso-fareast-theme-font:minor-fareast;
	mso-hansi-font-family:Calibri;
	mso-hansi-theme-font:minor-latin;
	mso-bidi-font-family:"Times New Roman";
	mso-bidi-theme-font:minor-bidi;}
.MsoPapDefault
	{mso-style-type:export-only;
	margin-bottom:10.0pt;}
@page Section1
	{size:612.0pt 792.0pt;
	margin:72.0pt 72.0pt 72.0pt 72.0pt;
	mso-header-margin:36.0pt;
	mso-footer-margin:36.0pt;
	mso-paper-source:0;}
div.Section1
	{page:Section1;}
 /* List Definitions */
 @list l0
	{mso-list-id:1664165705;
	mso-list-type:hybrid;
	mso-list-template-ids:-1453919300 67698689 67698691 67698693 67698689 67698691 67698693 67698689 67698691 67698693;}
@list l0:level1
	{mso-level-number-format:bullet;
	mso-level-text:;
	mso-level-tab-stop:none;
	mso-level-number-position:left;
	text-indent:-18.0pt;
	font-family:Symbol;}
ol
	{margin-bottom:0cm;}
ul
	{margin-bottom:0cm;}
--&gt;&lt;/style&gt;&lt;!--[if gte mso 10]&gt;
&lt;style&gt;
/* Style Definitions */
table.MsoNormalTable
{mso-style-name:"Table Normal";
mso-tstyle-rowband-size:0;
mso-tstyle-colband-size:0;
mso-style-noshow:yes;
mso-style-priority:99;
mso-style-qformat:yes;
mso-style-parent:"";
mso-padding-alt:0cm 5.4pt 0cm 5.4pt;
mso-para-margin-top:0cm;
mso-para-margin-right:0cm;
mso-para-margin-bottom:10.0pt;
mso-para-margin-left:0cm;
mso-pagination:widow-orphan;
font-size:11.0pt;
mso-bidi-font-size:10.0pt;
font-family:"Calibri","sans-serif";
mso-ascii-font-family:Calibri;
mso-ascii-theme-font:minor-latin;
mso-hansi-font-family:Calibri;
mso-hansi-theme-font:minor-latin;}
&lt;/style&gt;
&lt;![endif]--&gt;
&lt;p align="center" class="MsoNormal" style="text-align: center;"&gt;&lt;span style="font-size: 10pt;"&gt;[Source: &lt;/span&gt;&lt;a href="../../../../EltonStoneman"&gt;&lt;span style="font-size: 10pt;"&gt;http://geekswithblogs.net/EltonStoneman&lt;/span&gt;&lt;/a&gt;&lt;span style="font-size: 10pt;"&gt;]&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;We’ve had a couple of projects recently with similar requirements to process an Excel file as a batch upload of data. One was a BizTalk project where the &lt;a href="http://www.fpoint.com/biztalk/default.aspx"&gt;FarPoint Spread pipeline component&lt;/a&gt; was a good fit; the other was a Web app where we put together a custom parser based on the open-source &lt;a href="http://www.codeplex.com/ExcelDataReader"&gt;ExcelDataReader&lt;/a&gt;. The custom solution was appropriate for the expected size of upload files, but wouldn’t scale well to deal with large files quickly, so I wanted to look at a distributed alternative using &lt;a href="http://www.nservicebus.com/"&gt;nServiceBus&lt;/a&gt;. My sample implementation is on MSDN Code Gallery here: &lt;a href="http://code.msdn.microsoft.com/NSBExcelUpload"&gt;nServiceBus Excel Upload&lt;/a&gt;. I’ll look at a comparative BizTalk solution in a future post.&lt;/p&gt;
&lt;p class="MsoNormal"&gt;If you haven’t come across nServiceBus, it’s a queue-based messaging framework which is inherently asynchronous. “Scalability and reliability are in its DNA”, and it has some impressive case studies. Using nServiceBus you can set up a simple publish-subscribe architecture between nodes, or a load-balanced architecture with a central distributor. In the distributed version, the upload sample looks like this:&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;img height="259" width="400" alt="" src="/images/geekswithblogs_net/EltonStoneman/ExcelNSB.png" /&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style=""&gt;&lt;v:shapetype id="_x0000_t75" coordsize="21600,21600" o:spt="75" o:preferrelative="t" path="m@4@5l@4@11@9@11@9@5xe" filled="f" stroked="f"&gt;  &lt;v:stroke joinstyle="miter"&gt;  &lt;v:formulas&gt;   &lt;v:f eqn="if lineDrawn pixelLineWidth 0"&gt;   &lt;v:f eqn="sum @0 1 0"&gt;   &lt;v:f eqn="sum 0 0 @1"&gt;   &lt;v:f eqn="prod @2 1 2"&gt;   &lt;v:f eqn="prod @3 21600 pixelWidth"&gt;   &lt;v:f eqn="prod @3 21600 pixelHeight"&gt;   &lt;v:f eqn="sum @0 0 1"&gt;   &lt;v:f eqn="prod @6 1 2"&gt;   &lt;v:f eqn="prod @7 21600 pixelWidth"&gt;   &lt;v:f eqn="sum @8 21600 0"&gt;   &lt;v:f eqn="prod @7 21600 pixelHeight"&gt;   &lt;v:f eqn="sum @10 21600 0"&gt;  &lt;/v:f&gt;  &lt;v:path o:extrusionok="f" gradientshapeok="t" o:connecttype="rect"&gt;  &lt;o:lock v:ext="edit" aspectratio="t"&gt; &lt;/o:lock&gt;&lt;v:shape id="Picture_x0020_2" o:spid="_x0000_i1025" type="#_x0000_t75" alt="ExcelNSB.png" style="width: 330pt; height: 213.75pt; visibility: visible;"&gt;  &lt;v:imagedata src="file:///C:\DOCUME~1\ELTON~1.STO\LOCALS~1\Temp\msohtmlclip1\01\clip_image001.png" o:title="ExcelNSB"&gt; &lt;/v:imagedata&gt;&lt;/v:shape&gt;&lt;/v:path&gt;&lt;/v:f&gt;&lt;/v:f&gt;&lt;/v:f&gt;&lt;/v:f&gt;&lt;/v:f&gt;&lt;/v:f&gt;&lt;/v:f&gt;&lt;/v:f&gt;&lt;/v:f&gt;&lt;/v:f&gt;&lt;/v:f&gt;&lt;/v:formulas&gt;&lt;/v:stroke&gt;&lt;/v:shapetype&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;(Note that the diagram represents the bus as a separate entity, in reality it’s distributed among the queues of all the nodes. The diagram also omits the distributor).&lt;/p&gt;
&lt;p class="MsoNormal"&gt;In nServiceBus, services are requested by publishing messages onto the bus. Requests are fulfilled by a handler which subscribes to a type of message. The Excel upload sample takes a workbook which contains a set of products and uploads them to the AdventureWorks database. There are three types of message:&lt;/p&gt;
&lt;ul&gt;
    &lt;li&gt;&lt;!--[if !supportLists]--&gt;&lt;!--[endif]--&gt;&lt;b style=""&gt;StartBatchUpload&lt;/b&gt; – published when a file has been received and is ready to be processed; subscriber does some basic validation on the Excel data structure, and then for each row in the worksheet publishes an AddProduct message;&lt;/li&gt;
    &lt;li&gt;&lt;!--[if !supportLists]--&gt;&lt;span style="font-family: Symbol;"&gt;&lt;span style=""&gt;&lt;span style="font-family: &amp;quot;Times New Roman&amp;quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;!--[endif]--&gt;&lt;b style=""&gt;AddProduct&lt;/b&gt; – subscriber maps the product defined in the message to a stored procedure call which inserts the new product. When the last product in the batch is reached, sends a BatchStatusChanged message to the original publisher of the StartBatchUpload message;&lt;/li&gt;
    &lt;li&gt;&lt;!--[if !supportLists]--&gt;&lt;span style="font-family: Symbol;"&gt;&lt;span style=""&gt;&lt;span style="font-family: &amp;quot;Times New Roman&amp;quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;!--[endif]--&gt;&lt;b style=""&gt;BatchStatusChanged&lt;/b&gt; – logs the status change and renames the Excel upload file.&lt;/li&gt;
&lt;/ul&gt;
&lt;p class="MsoNormal"&gt;This is a basic example, more validation would be expected, but the workflow is representative. Parsing the Excel file is done quickly, allowing for any number of nodes to participate in the resource-intensive work of creating the products. Using a single host with 5 threads, an Excel file with 3,500 rows takes just over 4 minutes to process on a dev laptop. That’s 13 messages per second which is nothing special, but this is on a single host which is also running the distributor and SQL Server. The processing host has a flat memory profile (consistently around 40Mb) and runs at less than 20% CPU. The distributor takes around 15% CPU, and MSMQ another 15%.&lt;/p&gt;
&lt;p class="MsoNormal"&gt;For a much larger upload – 12,000 rows – the processing and memory profile is the same, and the upload takes around 14 minutes (~14 messages per second) on the same infrastructure.&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;i style=""&gt;Running the Sample&lt;o:p&gt;&lt;/o:p&gt;&lt;/i&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;Access to a SQL Server instance with the &lt;a href="http://msftdbprodsamples.codeplex.com/"&gt;AdventureWorks sample database&lt;/a&gt; installed is a pre-requisite. You’ll need to add the new stored procedure with &lt;i style=""&gt;uspInsertProduct.CREATE.sql&lt;/i&gt;. The connection string used by the host is specified in &lt;i style=""&gt;ExcelUpload.Host.exe.config&lt;/i&gt; (defaults to unnamed local instance).&lt;/p&gt;
&lt;p class="MsoNormal"&gt;You’ll need MSMQ running on all nodes. Queues are specified in configuration and are created by nServiceBus if they don’t exist – an exception is the storage queue for the distributor which needs to be manually created, this PowerShell snippet will do it:&lt;/p&gt;
&lt;p class="MsoNormal" style="margin-bottom: 0.0001pt;"&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;;"&gt;&lt;span style=""&gt;      &lt;/span&gt;[Reflection.Assembly]::LoadWithPartialName("System.Messaging")&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;;"&gt;&lt;span style=""&gt;      &lt;/span&gt;[System.Messaging.MessageQueue]::Create(".\Private$\distributorStorage", $true)&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;Unzip the file &lt;i style=""&gt;ExcelUpload.Binaries.zip&lt;/i&gt;. You’ll have a batch file – &lt;i style=""&gt;start.cmd&lt;/i&gt; – and five subdirectories – Client, Host, Distributor, SampleFiles and Drops. Run &lt;i style=""&gt;start.cmd&lt;/i&gt;, check the console screens for errors, then copy one of the Excel files from SampleFiles to Drops. You should see activity in the host, client and distributor console screens, and new rows being added to the [Production].[Product] table.&lt;/p&gt;
&lt;p class="MsoNormal"&gt;If you drop the same file twice, the unique key on Products will be violated, so the upload will error. On a fresh install there are under 1000 products, so this resets the table to the default state:&lt;/p&gt;
&lt;p class="MsoNormal" style="text-indent: 36pt;"&gt;&lt;span lang="EN-US" style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: blue;"&gt;delete&lt;/span&gt;&lt;span lang="EN-US" style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;;"&gt; [Production]&lt;span style="color: gray;"&gt;.&lt;/span&gt;[Product] &lt;span style="color: blue;"&gt;where&lt;/span&gt; ProductID &lt;span style="color: gray;"&gt;&amp;gt;&lt;/span&gt; 999&lt;span style="color: gray;"&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;i style=""&gt;Implementation Details&lt;/i&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;The sample uses the release version of nServiceBus – &lt;a href="http://garr.dl.sourceforge.net/project/nservicebus/nservicebus/Version%201.9%20RTM/NServiceBus_version_1.9_RTM_Core_Binaries.zip"&gt;1.9&lt;/a&gt; – as the distributor was broken in the 2.0 beta at the time of writing.&lt;/p&gt;
&lt;p class="MsoNormal"&gt;The two console apps run the “client” (which monitors a configured file location for an Excel drop, and publishes the StartBatchUpload message), and the “host” (which subscribes to StartBatchUpload and publishes AddProduct and BatchStatusChanged messages). Both use &lt;a href="http://codebetter.com/blogs/dru.sellers/archive/2009/01/11/topshelf.aspx"&gt;Topshelf&lt;/a&gt; so they can run as a console, or can be installed as a Windows service (e.g. &lt;i style=""&gt;ExcelUpload.Client.exe /install&lt;/i&gt;).&lt;/p&gt;
&lt;p class="MsoNormal"&gt;If you want to run several hosts on the same machine, they will need to use different queues. Copy the whole of the Host directory, and modify &lt;i style=""&gt;ExcelUpload.Host.exe.config&lt;/i&gt; to specify a unique queue name:&lt;/p&gt;
&lt;p class="MsoNormal" style="text-indent: 36pt;"&gt;&lt;span lang="EN-US" style="font-size: 9pt; font-family: &amp;quot;Courier New&amp;quot;; color: red;"&gt;InputQueue&lt;/span&gt;&lt;span lang="EN-US" style="font-size: 9pt; font-family: &amp;quot;Courier New&amp;quot;; color: blue;"&gt;=&lt;/span&gt;&lt;span lang="EN-US" style="font-size: 9pt; font-family: &amp;quot;Courier New&amp;quot;;"&gt;"&lt;span style="color: blue;"&gt;ExcelUpload.Service.1.InputQueue&lt;/span&gt;"&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;Then run &lt;i style=""&gt;ExcelUpload.Host.exe&lt;/i&gt; from all the copied locations, and you’ll see the console hosts sharing the message processing when a file is dropped.&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/p&gt;




 &lt;img src="http://geekswithblogs.net/EltonStoneman/aggbug/136390.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>EltonStoneman</dc:creator>
            <guid>http://geekswithblogs.net/EltonStoneman/archive/2009/11/18/processing-an-excel-upload-with-nservicebus.aspx</guid>
            <pubDate>Wed, 18 Nov 2009 09:46:13 GMT</pubDate>
            <wfw:comment>http://geekswithblogs.net/EltonStoneman/comments/136390.aspx</wfw:comment>
            <comments>http://geekswithblogs.net/EltonStoneman/archive/2009/11/18/processing-an-excel-upload-with-nservicebus.aspx#feedback</comments>
            <slash:comments>52</slash:comments>
            <wfw:commentRss>http://geekswithblogs.net/EltonStoneman/comments/commentRss/136390.aspx</wfw:commentRss>
        </item>
    </channel>
</rss>
