Things to consider when writing WCF LOB Adapters for consumption through BizTalk

 


If you are writing a WCF LOB adapter that can be consumed through BizTalk, you need to be aware of certain issues that can manifest because of the way BizTalk interacts with WCF adapters. Some of these can have performance and scalability impact and hence you should consider them when designing/configuring the adapter.




  1. Processing in IConnection/IConnectionFactory instance – When using SSO, for each message, BizTalk will end up creating a new IConnectionFactory and a new IConnection instance. If your adapter is doing a lot of processing in either of those instances, it can cause significant performance impact. So you will need to think of alternatives – possibly doing the processing upfront and caching.


  2. Caching of LOB artifacts on IConnection instance – Typically you will have some LOB artifacts that will comprise the context associated with an IConnection instance. If your adapter is using WCF LOB Adapter SDK’s connection pooling, in the non SSO scenario, the IConnection instances will be closed only when the idle connection timeout expires. So you need to think about freeing up the LOB resources that comprise your connection context. If you make idle connection timeout too small, it would impact performance since LOB connection creation will incur an overhead and if you keep it at a large value then you will be holding on to LOB artifacts for a longer time than you really need to, possible scalability/performance impact.


  3. Throughput stall – You can find more details about the issue on http://blogs.msdn.com/adapters/archive/2008/08/18/throughput-stalls-when-using-adapters-developed-against-the-wcf-lob-adapter-sdk-in-biztalk.aspx.  Note that if you don’t limit the number of concurrent connections through your adapter, you won’t run into this problem. The problem happens the contention between Open and Send/Execute for thread pool threads.


  4. Writing/promoting properties to BizTalk message context – When the adapter receives a WCF message from BizTalk, it will have all the properties comprising the BizTalk message context. For messages that originate from the adapter, if you want to have properties either written/promoted to BizTalk message context, you can look at http://technet.microsoft.com/en-us/library/bb246105.aspx on how to go about doing that.  


  5. Transaction overhead – BizTalk will by default start a transaction and send the message/process the response in that transaction scope. This can cause a significant overhead particularly if say the LOB doesn’t support transactions. In BizTalk 2009, there is an option on the Send port that lets you configure whether transactions should be enabled or not.

Run batch files without the MS-DOS Prompt

I wanted a way to not show the MS-DOS prompt while I was working and the Event Log Emailer was running. So I found two methods to have the Event Log Emailer or any MS-DOS prompt not show up while a batch is executing.

Method 1: To have an MS-DOS Batch file run in a minimized window Create a shortcut to the Batch file. Right-click the shortcut and click properties. In the properties dialogue, find the program tab and choose run “minimized” in the pull-down box. Run the Batch file from the shortcut.
Method 2: To have an MS-DOS Batch file run in a hidden window: In these circumstances, there is no MS-DOS window, nor any corresponding Taskbar button, so the Batch Code should begin @ECHO OFF and end with CLS and/or EXIT, or the process may stall invisibly.

For example, if the Batch file to be run in a hidden window is named C:\WORK\MYBATCH.BAT, create the following .VBS file:

CreateObject(“Wscript.Shell”).Run “C:\WORK\MYBATCH.BAT”,0

Requires Windows Script Host installed. Double-click or otherwise execute the .VBS file, for example, with the START command: start MyFile.VBS to run the Batch file invisibly.

MBV – HOW TO Unselect some “mandatory” queries or select only some of them

MBV – HOW TO Unselect some “mandatory” queries or select only some of them

Hello,


 


 


Let me discuss about a new feature that I introduced in version 10.11 that I released recently (http://blogs.technet.com/jpierauc/pages/msgboxviewer.aspx)  :


 


 


MBV 10.11 (in GUI tool) allow you now to unselect some “mandatory” queries and prevent them to execute so, and select only some of them.


 


Maybe this feature can surprise you first if we consider these queries as “mandatory” but I found in fact the need to be able to select sometimes only few important queries to have very quickly result of a report, like the Jobs one, or the MsgBox Integrity one, or the MsgBox or DTA Tables size, or only send ports, etc..


 


if we are now able to disable some mandatory queries, there can not considered anymore as mandatory 😉 so I decided also to rename the  “Mandatory queries” list to “Important Queries” in the interface.


 


Let me explain now how to unselect some important queries (so previously named “Mandatory”) :


 


There is now a global option in MBV named ”Can unselect some important queries” that you have to turn to “True” (it is “False” by default) in the global properties grid.

When you set it to “True” and display the Important Queries List, you will notice then check boxes in this list and also two butons Check All /Uncheck ALL , and you will be able so to select/unselect also these queries.



Notice that by default the behaviour is same than in previous versions: no check boxes are visible in this first Queries list,
so by default this feature is invisible !


 


 


Be careful however :


 


Topology Report and Warnings Report can be impacted if you unselect some specific important queries as some optional queries need for example some information returned by some important queries so you can have some errors or incomplete Topology and Warning reports depending of  which important queries you have unselected.


 


So my recommendation is to use this feature only if you are interested by some specific query reports that you want  to monitor


 


 


 


 


Let me kow your comments/questions on this feature !


 


JP

Hacking the Assembly Manifest

[Source: http://geekswithblogs.net/EltonStoneman]

I was debugging a particularly nasty problem and found myself wanting to edit the manifest of a compiled .NET assembly, to change the version number of the assemblies it was referencing. Not necessarily best practice, but in this case it would enable me to confirm the exact issue without a two-hour build-and-deploy cycle. Turns out that nasty hacks like this are very straightforward:

  1. Run ILDASM, open the assembly and choose FileDump to extract the IL
  2. Open the IL file in Visual Studio and edit the manifest – in this case, the version numbers of the referenced assemblies are easily found at the top of the file:

    // Metadata version: v2.0.50727
    .assembly extern mscorlib
    {
    .publickeytoken = (B7 7A 5C 56 19 34 E0 89 ) // .z\V.4..
    .ver 2:0:0:0
    }
    .assembly extern x.y.z
    {
    .publickeytoken = (E4 21 0D 54 23 66 A2 B4 ) // . .D’f..
    .ver 1:0:9:12
    }

  3. Save the IL and reassemble it with ILASM – if the assembly was signed, re-sign it using ilasm /DLL x.y.z.il /KEY=x.y.z.snk
  4. Ensure the new assembly has the same name as the original, and it will operate as an exact replacement, only now its dependencies will be for the modified versions.

Simon McEnlly’s article on CodeProject describes going further with the manifest to change the visibility of methods, and generally modifying and rebuilding assemblies where you don’t have the source code. Note that if the assembly is signed and you don’t have the strong name key to re-sign it, the modified assembly will warn about being tampered with and won’t load.

MBV – HOW TO run only some specific queries in the Console version of MBV : BTSDBCOLLECT.EXE

MBV – HOW TO run only some specific queries in the Console version of MBV : BTSDBCOLLECT.EXE

Hello,


 



Following a recent  discussion I had with a US colleague about that,  I would like to share with you below the few steps to follow to be able to run only some specific queries in the Console version of MBV – BTSDBCOLLECT.EXE.


 



 


As you maybe already know it :


 


          BtsDbCollect.exe  will execute by default – w/o arguments – all important queries + most of the optional ones


          BtsDbCollect.exe /ALL will execute ALL queries


 


Now, if you want BtsDbCollect to run only a subset of queries, follow these steps :


 


1)      Run the GUI version of MBV – MsgBoxViewer.exe – and select only the queries you want in the interface.
You can even unselect some important queries – previously named “Mandatory“ – :  set the global option “Can Unselect some important queries” to “True” and then unselect the important queries you want via the checkboxes – see my mail below for more details on this new feature.


2)      Close the tool


3)      copy the resulting file “MBVSettings.xml” in the same folder than BtsDbCollect.exe


4)   If needed, change this settings file the 3 properties specifying the correct path for the output files, ex:

<HTMLandXMLFolder>C:\JP\MyProjects\BtsDBCollect</HTMLandXMLFolder>
<
HistoryLogFilePath>C:\JP\MyProjects\BtsDBCollect\MsgBoxViewer_History.log</HistoryLogFilePath>
<
StatusLogFilePath>C:\JP\MyProjects\BtsDBCollect\MsgBoxViewer_Status.log</StatusLogFilePath>


6)      And that’s it !  Each time you will execute BtsDbcollect.exe, it will use this Settings XML  file and so will execute only the queries you chose before


 


 


Let me know if you have any questions


 



JP

Intro to WCF for the AZ.NET User Group

I’m in Arizona currently, specifically Phoenix, and last night I had the chance to speak at the AZ.NET User Group thanks to the wonderful folks at INETA.  I promised the folks there that the slides would be posted last night, so I’m only about 8 hours late.  The talk was an Introduction to Windows Communication Foundation, and the demos focused on showing a simple service being setup from nothing to running.

You can download the slides here, or the final code here.

Handling a Web-Service Null Response: The ’CreateBodyPart’ Pipeline Component

Today I’m releasing a small component that addresses an interesting problem I’ve never come across before – a null response from a web-service.
The web-service in question is provided by a third-party and unfortunately cannot be changed. Their WSDL defines the root response element with a maxOccurs=1 and a minOccurs=0, which allows for a null response […]

Breeze’s MOSS Technology ‘Stimulus Package’ hits Melbourne

If you’re in the Melb area – we’ve got a great offer coming your way

We want to show your technical teams how to get the most out of your existing SharePoint
(WSS or MOSS) implementations.

4 Days – Open to Microsoft Partners and Customers
This is an Official Microsoft Event.

Check out all the details here – https://www.microsoft.com.au/events/register/home.aspx?levent=344938&linvitation

Now is your chance to take advantage of these times and make the technology at your
finger tips work for you!