by community-syndication | Mar 20, 2006 | BizTalk Community Blogs via Syndication
Visual Studio 2005 added support for Debugger Visualizers. With debugger visualizers, developers can define what information (and in what form) is shown in the debugger for a specific type. There are many visualizers for various .NET types floating around. Here is a small list of the most popular ones: ASP.NET Cache, Regular Expression, XmlDocument (and other Xml related types), a powerful looking DataSet visualizer and there is even a WindowsIdentity visualizer.
I am not going to explain in details how to write your own visualizer. You can find step by step instructions on MSDN. Most existing debugger visualizers I mentionned in the previous paragraph also have home pages where you will find details on how to write your own or even source code.
I’d like to share some tricks you might find useful when writing your own visualizers:
- You can write visualizers for public (obvious!) or internal or private types. The trick for non public types is to use the Assembly Qualified Name of the type you want to visualize. For instance, BizTalk 2006’s MessageContext property is actually an internal type (see purple type name below):
[assembly:
DebuggerVisualizer(typeof(<type of visualizer> ), typeof(<type of visualizer source>), TargetTypeName = “Microsoft.BizTalk.Message.Interop.MessageContext_ManagedViewOfNative, Microsoft.BizTalk.Pipeline, Version=3.0.1.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35”, Description = “<description>”)]
- Your visualizer code runs non JIT’ed. So make sure you do not perform too much work or it will be slow. If you do too much, the expression evaluator will time out and interrupt your visualizer with an “Expression Evaluation timed out exception”.
- Use DataGrid instead of DataGridView. I know I used a DataGridView in my visualizer, but the DataGrid is faster, especially when running non JIT’ed.
To illustrate these points, I wrote a BizTalk 2006 MessageContext debugger visualiser. You can download the complete solution BTSVisualizers.zip below. It works with Visual Studio 2005 and BizTalk 2006 only.
Load the visualizer solution in Visual Studio and build the release comfiguration.To install the MessageContext visualizer, shut down all instances of Visual Studio and copy BTSVisualizers.dll to %VS8ROOT%\Common7\Packages\Debugger\Visualizers. (If you installed Visual Studio at the default location, that would be C:\Program Files\Microsoft Visual Studio 8\Common7\Packages\Debugger\Visualizers) That’s it!
The next time you debug a pipeline (by attaching to BTSNTSVC.exe), you can hover the mouse on the “Context” variable of the message and see all entries in the message context:
Unfortunately, this visualizer will not display anything useful unless you are debugging a BizTalk artifact by attaching to BTSNTSVC.exe. This is because most debugging tools (like pipeline.exe) do not populate the message context.
by community-syndication | Mar 20, 2006 | BizTalk Community Blogs via Syndication
After you have upgraded from BizTalk 2004 to BizTalk 2006, you will be unable to read the old events generated prior to upgrade in the event viewer. In order to view those events, please follow the instructions below
- Copy the btsmsg.dll file from the BizTalk 2004 installation CD (For english, you can find it in <CD>\Msi\Program Files\1033).
- Copy this dll to the BizTalk Install Folder and rename it to BTSMsg_2004.dll
- Register this dll using regsvr32 and now, the Voyager event entries are available for viewing.
Note: This file will not be removed when the BizTalk 2006 is uninstalled. Please use /u option in regsvr32.exe to unregister the dll and then remove it from the install location.
by community-syndication | Mar 19, 2006 | BizTalk Community Blogs via Syndication
‘Thank you’ to all who attended last Thursday’s Twin Cities BizTalk User Group. You can get the ‘Orchestration Concepts: Message Construction, Direct Binding and Configuration’ presentation here. For those that were not at the presentation, note that the ‘Configuration’ section of this presentation focused on Orchestration Engine configuration and not configuration of applications running in BizTalk.
I packaged each demo’s source code into its own .zip file so they could be used as samples. ‘Readme’ notes on how to setup the samples, ‘reproduce’ the demos and what to look at to get the most out of the samples can be found later in this post.
Here are links to the samples:
- Calling Pipeline from Orchestration
- Orchestration Engine Configuration
- Partner (Port) Direct Binding (this sample uses the Inverse Partner Direct Binding pattern)
- (Update) Partner (Port) Direct Binding for BizTalk 2004
- Self-Correlated Direct Binding (this sample also used Message Box Direct Binding)
- (Update) Self-Correlated Direct Binding for BTS 2004
Note that the source code and readme.txt files can be used only with BizTalk 2006 (Beta 2) although only the ‘Calling Pipeline from Orchestration’ functionality will not work in BizTalk 2004 as the functionality does not exist in that release. If you are interested in 2004 samples request them through this blog.
If you would like more information on Direct Binding I suggest examining Charles Young’s Direct Binding article which you can fine here. There is also information on Direct Binding in Matt Milner’s ‘BizTalk Server 2004: A Messaging Engine Overview’ article.
—
Sample’s ‘ReadMe’ Notes
Call Pipeline from Orchestration:
- This sample shows how to call a send pipeline from an orchestration that aggregates two document messages into an envelope message.
- Review the CallPipeline.odx orchestration. This orchestration:
- Aggregates to instances based on MyItem.xsd into and instance of MyEnvelope.xsd using a custom Send Pipeline.
- Note the use of the Microsoft.XLANGs.Pipeline.SendPipelineInputMessages class to collect the item messages.
- Note the use of the Microsoft.XLANGs.Pipeline.XLANGPipelineManager class to call the custom pipeline.
- Create a Receive Port and Receive Location using the File Adapter and bind that port to the CallPipeline.odx’s logical Receive Port (the .zip file contains an ‘In’ directory that could be used for this.)
- Create a Send Port using the File Adapter and bind that port to the CallPipeline.odx’s logical Send Port (the .zip file contains an ‘Out’ directory that could be used for this.)
- Deploy the sample.
- Start the orchestration and receive location and send port.
- Copy and paste the ‘First MyItem.xml’ document into the Receive Location’s directory.
- Examine the output in the Send Port’s output directory to see that it contains two MyItem.xsd instances (although they are identical) within the MyEnvelope.xsd instance.
Orchestration Engine Configuration:
- This sample shows how to configure the orchestration engine to turn schema validation on, how to use AppDomain assignment and how to retrieve a value from BTSNTSvc.exe.config. T
by community-syndication | Mar 18, 2006 | BizTalk Community Blogs via Syndication
Following on from my post last night, I’ve just uploaded a BizTalk Server 2004 version of GenerateTypedBAMAPI to the GotDotNet workspace.
It’s functionally identical to the 2006 release already up there but will only work with BizTalk Server 2004 as the BAM XML file was changed slightly for the 2006 release.
One note on dependencies, as the tool uses Excel to crack the BAM Excel Workbook you will have to ensure Office System 2003 is installed which is a pre-requisite for BAM anyway.
Let me know if you have any problems or have any feature requests.
by community-syndication | Mar 17, 2006 | BizTalk Community Blogs via Syndication
Hi,
For those of you who work with me or have already used this, the “productization” of the GenerateBAMDefinition code has been a long time in the coming!
It’s been one of those “back-burner” activities where my proof-of-concept code has held together long enough but as more customers start using it and BizTalk Server 2006 changes required tweaking I’ve finally got round to sorting it out – oh and I needed it for my substantial BAM chapter in my upcoming BizTalk book – blatant plug!
Bring on the GenerateTypedBAMAPI tool! (or for those of you on a certain PoC, bring on the dancing girls 🙂
Business Activity Monitoring (BAM) is one of my favourite components of BizTalk as you’ve probably already noticed, it enables rich instrumentation of your BizTalk solution and any systems used either side effectively enabling a enterprise instrumentation solution.
Via an Excel Spreadsheet shipped with BizTalk you define Activities (ultimately become SQL tables) and Activity Items (ultimately become columns within tables), you can then define multiple Views (same concept as SQL views) where you can selectively include data items across multiple activities, rename them and specify measures (pre-calculated items such as Average Age) and dimensions (ways to slice/dice your data), you can even calculate durations between two milestones to perhaps enable timing of remote web service calls for SLA monitoring. Activity Items can either be a Business Milestones (datetime) or Data Items (string, int or decimal).
Once you’ve done this you use the bm.exe tool to create a high performance and scalable database structure from the BAM definition your defined in the Excel Spreadsheet, you get the whole database structure for free! You can specify indexes via the XML file to optimise any querying you may require. Any dimensions and measures you specified are used to create an OLAP cube for you and the DTS jobs are created to populate this cube at regular intervals (all for free!)
The Activities become SQL tables in the database structure and two tables are created per Activity, one called <ActivityName>_Active and one called <ActivityName>_Completed. This partioning means that any queries can be run against the _Completed table and thus not interfere with any other writing going on. The entries are moved from Active to Completed when the Activity is finished with via a SQL trigger.
So we have a database structure, how do we write to it? You can use the out-of-the-box Tracking Profile Editor (TPE) which lets you map Orchestration shapes and items in any BizTalk messages to the “list” of data you defined in the Excel Spreadsheet, this effectively tells BizTalk to subscribe to the events raised when a shape is “invoked” or a message arrives and store this data in the BAM database you created earlier (it does this using the underlying BAM API).
Now, TPE in 2004 was very limited you could only “provide” data to the BAM database you created if it was visible from the Orchestration, i.e. Business Milestones (datetimes) are created by taking System.DateTime.Now when you hit the Orchestration shape in question, and when a BizTalk message arrives any items in that message are stored in the message can be stored as Activity Items, but what if you wanted to store some data that’s only visible inside a Pipeline or a .NET component called from BizTalk? TPE has no visibility of this and so doesn’t offer a way to store this information.
In short TPE is great for a few simplistic scenarios but the good news is there is a full .NET API under the covers (which TPE uses as it happens) which you can use yourself, giving you much finer grained control over what happens and also the ability to store any information regardless of where it’s stored. This is especially true when you have a system that calls BizTalk (or called by) that holds information which would be useful to store alongside any BAM data captured by BizTalk and or course isn’t transmitted to the BizTalk system. For example, a BizTalk solution might call a Credit authorisation Web Service which returns true/false but the Web Service whilst executing has access to other information that might be useful – you could use BAM inside this Web Service (not installed on the BizTalk Server) to store this information
BizTalk Server 2004 didn’t allow you to install the BAM API on non-BizTalk servers without attracting a per-processor license fee for each server, feedback (some driven by me) to the product team resulted in a licensing change which means you can put the BAM API on any server and not pay any license fees (you must have licensed BizTalk somewhere in your organisation however), and have a SQL server for the BAM databases to be created.
This change enables a whole end-to-end instrumentation approach, all driven by BAM
So the BAM API, most solutions leveraging BAM will end up choosing this over TPE. The API is straight forward but loosely typed (no other way as it has to be general purpose to allow you to create whatever activities and items your like).
You must first “Begin” an Activity which creates the row in the <Activity>_Active table in the BAMPrimaryImport database, you can then “Update” the activity whenever you like before finally “Finishing” your Activity. Begin creates the row ready in the database, Update – updates columns in that row, and Finish “closes” the row off for further updates and causes the trigger to fire which move this row from the Active table to the Completed table.
There are three different types of Event Stream, Direct, Buffered and Orchestration:
The DirectEventStream writes straight to the BAMPrimaryImport database so has the equivalent performance hit (i.e. not good for high volume systems)
The BufferedEventStream which allows multiple writes to be buffered in memory before being stored in binary form to the MessageBox database where it’s then moved into the PrimaryImport database (good for high volume systems where the data doesn’t have to be persisted before continuing)
The OrchestrationEventStream which is used when your calling BAM from an Orchestration, it writes BAM entries to the Persistence Stream of your BizTalk Orchestration so piggy-backs the persistence of your orchestration meaning the performance hit is greatly reduced and it also benefits from the “rollback” behaviour of an Orchestration, so if you write three entries and then roll your orchestration back the entries will be removed unlike the other EventStreams which would require you to manually remove them. The entries are stored in the Message Box as per the BufferedEventStream and then moved off into the BAMPrimaryImport database.
They all share the same interface so are the same to program against except the OrchestrationStream which is a static class so doesn’t have be “newed” each time you wish to use it.
So, consider this BAM API code to write a BAM Activity and some data items:
System.Guid ActivityID = System.Guid.New().ToString();
DirectEventStream es = new DirectEventStream(“Integrated Security=SSPI;Data Source=.;Initial Catalog=BAMPrimaryImport”,1);
es.BeginActivity(“LoanApplication”, ActivityID);
..
es.UpdateActivity(“LoanApplication”,ActivityID,”Start”,System.DateTime.Now.ToString());
..
es.UpdateActivity(“LoanApplication”,ActivityID,”Name”,”Darren Jefford” );
..
es.UpdateActivity(“LoanApplication”,ActivityID,”End”, System.DateTime.Now.ToString());
..
es.EndActivity(“LoanApplication”,ActivityID);
So fairly straight forward then, but in most projects you end up with many activities containing many items, as you can see the API is loosely typed which means all Activity Names and Activity Items must be specified by using string literals which leads to many potential programming errors, especially if your anything like me and keep spelling Receive wrong. Misnaming any of these items or using the wrong data type causes a Runtime error, and as often happens if you change your BAM Definition as your project progresses you have to keep everything in sync – which to be honest is never going to happen 100% of the time!. Also, a lot of the code is repetitive, BeginActivity, EndActivity, etc.
In the PoC I took part in last year we were faced with 1000s line of code to produce a ful BAM API for the Orchestrations to use, we didn’t have the time for this let alone the changes that happened throughout the week.
So, this is where GenerateBAMDefinitions started, I wrote an XSLT transform that took the BAM XML exported from the spreadsheet to generate a typed BAM API automagically, that way developers would work against classes named the same as activities and properties with named the same as activity items, cutting out any typos in all these string literals, enabling code completition and simplifying the API to Begin, Update and Finish.
I’ve now brought it up to date with a full BizTalk 2006 version, and have written a command line exe that takes a parameter to the Excel Spreadsheet where it extracts the XML for you (no more manual extraction using Excel now), and then generates a typed API for you. Another new addition is the ability to specify the EventStream you wish to use (which wasn’t possible before).
There are no string literals to use and the fa%u00e7ade you build against the BAM API is far simpler and potential mistake free, e.g.:
LoanActivity a = LoanActivity( System.Guid.NewGuid().ToString() );
a.BeginLoanActivity();
a.Start = System.DateTime.Now;
a.Name = “Darren Jefford”;
a.End = System.DateTime.Now;
a.CommitLoanActivity();
a.EndLoanActivity();
This shaved days of development effort and kept the BAM instrumentation layer working a treat, it also enables you to ensure your build always has the most up-to-date API by allowing you to add your Excel Spreadsheet to your BizTalk solution and setting a pre-build action to run the new GenerateTypedBAMAPI tool whenever the project is built meaning any changes to the BAM definition are instantly reflected in your project.
Everything is wrapped up inside the GenerateTypedBAMAPI tool and I’ve done basic testing of all three Event Stream types and everything seems to work fine, it also copes with the slight API changes between OrchestrationEventStream (static) and the other EventStreams. When you add the generate file to your project ensure that you add a Project Reference to Microsoft.BizTalk.Bam.EventObservation.dll (Buffered and Direct EventStreams) or Microsoft.BizTalk.Bam.XLANGs.dll (OrchestrationEventStream) which you can find in %PROGRAMFILES%\Microsoft BizTalk Server 2006\Tracking.
If your run GenerateTypedBAMAPI from the command line it prints out the usage instructions which are pretty straight forward: GenerateTypedBAMAPI.exe <ExcelFile> <OutputCodeFile> Direct|Buffered|Orchestration
If you want to perform Continuation, Relationships or References then you can access the underling EventStream by calling the GetEventStream() method on the BAMDefinition class thus giving you complete flexibility (I’m planning to add native support for these soon, see below).
So, please try it out, especially those that are already using the previous incarnation – if you don’t like the code it generates for whatever reason or wish to lodge “I wish it could generate this..” then please let me know via the Email hyperlink on this blog or via the GotDotNet workspace.
The GotDotNet workspace hosting the tool is located here, Enjoy and please, please let me know any feedback you have (Good or Bad!). The release up there right now is for BizTalk Server 2006, I need to make a few XML namespace and project changes before I can upload the 2004 release but that should be over the weekend, I’ll post a new blog entry when it’s up there.
I’m planning to make the following extensions in the next month or so:
An enumeration of all Activities defined
Continuation Support
Reference support which will expose a typed-method allowing you to choose Activities to link to without having to use the string literal of the Activity Name.
Think of a better way to allow the caller to customise the Connection String (currently hard-coded to the local SQL server – you can of course change this by hand)
Enjoy.
by community-syndication | Mar 16, 2006 | BizTalk Community Blogs via Syndication
Dates you say? Stop the press! Hoist the mizenmast!
I had a situation where there was a node whose max occurs is unbounded and I needed to extract a single node from it to map to a destination node whose max occurs is one.
The problem was that I had to choose the node to map with the highest (newest) date:
<root>
<data>
<testdate>01-01-2000<testdate>
<testdata>a<testdata>
</data>
<data>
<testdate>01-01-2002<testdate>
<testdata>c<testdata>
</data>
<data>
<testdate>01-01-2001<testdate>
<testdata>b<testdata>
</data>
</root>
In the case above, I want the node with the highest <testval>, or 01-01-2002, therefore I want to map <testdata>c<testdata> to the destination node.
This can actually be done.
What I did was convert my date to ticks in a scripting functoid:
public string toTicks(string param1)
{
DateTime dt = DateTime.Parse(param1);
return dt.Ticks.ToString();
}
Afterwards I connected the scripting functoid to the cumulative max functoid.
Then I evaluate the output of the scripting functoid with the cumulative max functoid with an Equals functoid.
This should work for any set of repeating dates.
by community-syndication | Mar 15, 2006 | BizTalk Community Blogs via Syndication
Dates you say? Stop the press! Hoist the mizenmast!
I had a situation where there was a node whose max occurs is unbounded and I needed to extract a single node from it to map to a destination node whose max occurs is one.
The problem was that I had to choose the node to map with the highest (newest) date:
<root>
<data>
<testdate>01-01-2000<testdate>
<testdata>a<testdata>
</data>
<data>
<testdate>01-01-2002<testdate>
<testdata>c<testdata>
</data>
<data>
<testdate>01-01-2001<testdate>
<testdata>b<testdata>
</data>
</root>
In the case above, I want the node with the highest <testval>, or 01-01-2002, therefore I want to map <testdata>c<testdata> to the destination node.
This can actually be done.
What I did was convert my date to ticks in a scripting functoid:
public string toTicks(string param1)
{
DateTime dt = DateTime.Parse(param1);
return dt.Ticks.ToString();
}
Afterwards I connected the scripting functoid to the cumulative max functoid.
Then I evaluate the output of the scripting functoid with the cumulative max functoid with an Equals functoid.
This should work for any set of repeating dates.
by community-syndication | Mar 15, 2006 | BizTalk Community Blogs via Syndication
The WssAdapterBrowseUI.dll modifies the default WSS Adapter UI so that instead of typing the names and URLs of SharePoint document libraries, lists, or columns you will be presented with a list view/tree view from where you can select the appropriate SharePoint object. The friendly names/titles of SharePoint objects are being shown but the UI is filled with the appropriate value (document library relative URL, document library title, column title, etc). This component does not validate that values entered manually are correct.
Left image above is the original WSS UI included in BizTalk 2006. Right image above, is the modified WSS UI that includes browse SharePoint site functionality. The dropdown box (circled in red in image above) is visible only when the cursor is positioned inside the text box.
This functionality is implemented by wrapping the WSS adapter management class (found in Microsoft.BizTalk.KwTpm.WssAdapter.StaticAdapterManagement.dll) and annotating the returned XSD schemas in order to instruct BizTalk what classes can be used to query and display the SharePoint information. WssAdapterBrowseUI.dll replaces the Microsoft.BizTalk.KwTpm.WssAdapter.StaticAdapterManagement.dll
assembly, forwards all calls to StaticAdapterManagement classes and it modifies the returned results.
Microsoft.BizTalk.KwTpm.WssAdapter.StaticAdapterManagement.dll is still needed since WssAdapterBrowseUI.dll uses it.
Setup steps:
– backup registry information
– copy WssAdapterBrowseUI.dll to BizTalk folder
– modify registry information so that BizTalk uses WssAdapterBrowseUI.dll instead of Microsoft.BizTalk.KwTpm.WssAdapter.StaticAdapterManagement.dll
Disclaimer
Use this code at your own risk. No support is provided and this code has NOT been tested.
Important
If you re-run BizTalk setup, configuration or if you need to apply a BizTalk QFE or future Service Pack, you will have to uninstall this component before doing so. This component is not supported!
Registry Backup
Run command below to make a copy of the default Wss Adapter registration. Open file in notepad to make sure backup worked.
reg export “HKEY_CLASSES_ROOT\CLSID\{BA7DAD66-5FC8-4a24-A27E-D9F68FD67C3A}” OriginalWssAdapterRegistration.reg
Keep this backup since you will need to restore the original Wss Adapter registration before applying any BizTalk SP or QFE.
Copy WssAdapterBrowseUI.dll to BizTalk folder
Copy supplied WssAdapterBrowseUI.dll (or build your own, see How to build WssAdapterBrowseUI.dll) to C:\Program Files\Microsoft BizTalk Server 2006
Update registry
Update Wss Adapter registration to use the new adapter management class
a) open “WssAdapterRegistration-Annotated.reg.RENAMEIT” in notepad and make sure that paths are correct
Notice – if you update any file paths in the registry file make sure you use \\ instead of \
b) Rename “WssAdapterRegistration-Annotated.reg.RENAMEIT” (remove “.RENAMEIT” from the name)
c) import registry settings by opening WssAdapterRegistration-Annotated.reg
How to build WssAdapterBrowseUI.dll
The sources and binaries are included in the attached zip file. Open WssAdapterBrowseUI.csproj in Visual Studio 2005. If references to assemblies
Microsoft.BizTalk.Adapter.Framework.dll
Microsoft.BizTalk.KwTpm.WssAdapter.StaticAdapterManagement.dll
are not correct update the references.
Referenced assembly Microsoft.BizTalk.Adapter.Framework.dll is found under \Program Files\Microsoft BizTalk Server 2006\Developer Tools
Referenced assembly Microsoft.BizTalk.KwTpm.WssAdapter.StaticAdapterManagement.dll is found under \Program Files\Microsoft BizTalk Server 2006
Build the project.
by community-syndication | Mar 15, 2006 | BizTalk Community Blogs via Syndication
Here is a link to the BizTalk Server 2006 Beta help documentation (3/3/06 build) in a .chm file. Please post any comments here relating specifically to the adapter documenatation so I can fix or modify it for our RTW release. Thank you for your feedback!
http://blogs.msdn.com/luke/archive/2006/02/03/524534.aspx
by community-syndication | Mar 15, 2006 | BizTalk Community Blogs via Syndication
The WssAdapterBrowseUI.dll modifies the default WSS Adapter UI so that instead of typing the names and URLs of SharePoint document libraries, lists, or columns you will be presented with a list view/tree view from where you can select the appropriate SharePoint object. The friendly names/titles of SharePoint objects are being shown but the UI is filled with the appropriate value (document library relative URL, document library title, column title, etc). This component does not validate that values entered manually are correct.
Left image above is the original WSS UI included in BizTalk 2006. Right image above, is the modified WSS UI that includes browse SharePoint site functionality. The dropdown box (circled in red in image above) is visible only when the cursor is positioned inside the text box.
This functionality is implemented by wrapping the WSS adapter management class (found in Microsoft.BizTalk.KwTpm.WssAdapter.StaticAdapterManagement.dll) and annotating the returned XSD schemas in order to instruct BizTalk what classes can be used to query and display the SharePoint information. WssAdapterBrowseUI.dll replaces the Microsoft.BizTalk.KwTpm.WssAdapter.StaticAdapterManagement.dll
assembly, forwards all calls to StaticAdapterManagement classes and it modifies the returned results.
Microsoft.BizTalk.KwTpm.WssAdapter.StaticAdapterManagement.dll is still needed since WssAdapterBrowseUI.dll uses it.
Setup steps:
– backup registry information
– copy WssAdapterBrowseUI.dll to BizTalk folder
– modify registry information so that BizTalk uses WssAdapterBrowseUI.dll instead of Microsoft.BizTalk.KwTpm.WssAdapter.StaticAdapterManagement.dll
Disclaimer
Use this code at your own risk. No support is provided and this code has NOT been tested.
Important
If you re-run BizTalk setup, configuration or if you need to apply a BizTalk QFE or future Service Pack, you will have to uninstall this component before doing so. This component is not supported!
Registry Backup
Run command below to make a copy of the default Wss Adapter registration. Open file in notepad to make sure backup worked.
reg export “HKEY_CLASSES_ROOT\CLSID\{BA7DAD66-5FC8-4a24-A27E-D9F68FD67C3A}” OriginalWssAdapterRegistration.reg
Keep this backup since you will need to restore the original Wss Adapter registration before applying any BizTalk SP or QFE.
Copy WssAdapterBrowseUI.dll to BizTalk folder
Copy supplied WssAdapterBrowseUI.dll (or build your own, see How to build WssAdapterBrowseUI.dll) to C:\Program Files\Microsoft BizTalk Server 2006
Update registry
Update Wss Adapter registration to use the new adapter management class
a) open “WssAdapterRegistration-Annotated.reg.RENAMEIT” in notepad and make sure that paths are correct
Notice – if you update any file paths in the registry file make sure you use \\ instead of \
b) Rename “WssAdapterRegistration-Annotated.reg.RENAMEIT” (remove “.RENAMEIT” from the name)
c) import registry settings by opening WssAdapterRegistration-Annotated.reg
How to build WssAdapterBrowseUI.dll
The sources and binaries are included in the attached zip file. Open WssAdapterBrowseUI.csproj in Visual Studio 2005. If references to assemblies
Microsoft.BizTalk.Adapter.Framework.dll
Microsoft.BizTalk.KwTpm.WssAdapter.StaticAdapterManagement.dll
are not correct update the references.
Referenced assembly Microsoft.BizTalk.Adapter.Framework.dll is found under \Program Files\Microsoft BizTalk Server 2006\Developer Tools
Referenced assembly Microsoft.BizTalk.KwTpm.WssAdapter.StaticAdapterManagement.dll is found under \Program Files\Microsoft BizTalk Server 2006
Build the project.