Thursday, March 11, 2010
#
Have you heard about this tool?
This is a capture tool that records your actions as you perform them on your workstation, remote desktop, etc. It's made by the same company that makes SnagIt, etc.
http://www.techsmith.com/camtasia.asp
I have used this at several customers to record our install and configurations of BizTalk and more - this can come in very handy to help reduce differences in environments (because you can go back and review exactly what you did in the previous environment) as well as to supplement your installation docs. The product also includes an editing studio and various media types for export.
I haven't been paid to write this - I just think the tool is very nice.
Earlier this week I had an ESB endpoint (Off-Ramp in ESB parlance) that I was sending to over http using WCF-BasicHttp. I needed to switch the protocol to https: which I did by changing my UDDI Binding over to https: No problem from a management perspective; however, when I tried to run the process I saw this exception:
Event Type: Error
Event Source: BizTalk Server 2009
Event Category: BizTalk Server 2009
Event ID: 5754
Date: 3/10/2010
Time: 2:58:23 PM
User: N/A
Computer: XXXXXXXXX
Description:
A message sent to adapter "WCF-BasicHttp" on send port "SPDynamic.XXX.SR" with URI "https://XXXXXXXXX.com/XXXXXXX/whatever.asmx" is suspended.
Error details: System.ArgumentException: The provided URI scheme 'https' is invalid; expected 'http'.
Parameter name: via
at System.ServiceModel.Channels.TransportChannelFactory`1.ValidateScheme(Uri via)
at System.ServiceModel.Channels.HttpChannelFactory.ValidateCreateChannelParameters(EndpointAddress remoteAddress, Uri via)
at System.ServiceModel.Channels.HttpChannelFactory.OnCreateChannel(EndpointAddress remoteAddress, Uri via)
at System.ServiceModel.Channels.ChannelFactoryBase`1.InternalCreateChannel(EndpointAddress address, Uri via)
at System.ServiceModel.Channels.ChannelFactoryBase`1.CreateChannel(EndpointAddress address, Uri via)
at System.ServiceModel.Channels.ServiceChannelFactory.ServiceChannelFactoryOverRequest.CreateInnerChannelBinder(EndpointAddress to, Uri via)
at System.ServiceModel.Channels.ServiceChannelFactory.CreateServiceChannel(EndpointAddress address, Uri via)
at System.ServiceModel.Channels.ServiceChannelFactory.CreateChannel(Type channelType, EndpointAddress address, Uri via)
at System.ServiceModel.ChannelFactory`1.CreateChannel(EndpointAddress address, Uri via)
at System.ServiceModel.ChannelFactory`1.CreateChannel()
at Microsoft.BizTalk.Adapter.Wcf.Runtime.WcfClient`2.GetChannel[TChannel](IBaseMessage bizTalkMessage, ChannelFactory`1& cachedFactory)
at Microsoft.BizTalk.Adapter.Wcf.Runtime.WcfClient`2.SendMessage(IBaseMessage bizTalkMessage)
MessageId: {1170F4ED-550F-4F7E-B0E0-1EE92A25AB10}
InstanceID: {1640C6C6-CA9C-4746-AEB0-584FDF7BB61E}
I knew from a previous experience that I likely needed to set the SecurityMode setting for my Send Port. But how do you do this for a Dynamic port (which I was using since this is an ESB solution)?
Within the UDDI portal you have to add an additional Instance Info to your Binding named:
EndPointConfig
Then you have to set its value to:
SecurityMode=Transport
Like this:

The EndPointConfig is how the ESB Toolkit 2.0 provides extensibility for the various transports. To see what the key-value pair options are for a given transport, open up an itinerary and change one of your resolvers to a “static” resolver by setting the “Resolver Implementation” to Static. Then select a “Transport Name” ”, for instance to WCF-BasicHttp. At this point you can then click on the “EndPoint Configuration” property for to see an adapter/ramp specific properties dialog (key-value pairs.)

Here’s the dialog that popped up for WCF-BasicHttp:

I simply set the SecurityMode to Transport. Please note that you will get different properties within the window depending on the Transport Name you select for the resolver.
When you are done with your settings, export the itinerary to disk and find that xml; then find that resolver’s xml within that file. It will look like endpointConfig=SecurityMode=Transport in this case. Note that if you set additional properties you will have additional key-value pairs after endpointConfig=
Copy that string and paste it into the UDDI portal for you Binding’s EndPointConfig Instance Info value.
Thursday, February 25, 2010
#
When deploying the Microsoft.BizTalk.ESB.BAM.Exceptions.xml BAM activity (as part of the Core ESB Toolkit install) we ran into this error:
---
OLE DB error: OLE DB or ODBC error: DBNETLIB][ConnectionOpen (Connect()).]SQL Server does not exist or access denied : 08001
Errors in the high-level relational engine. A connection could not be made to the data source with the DataSourceID of ‘bam_ExcByApplication’, Name of ‘bamExcByApplication’
---
The issue was that we used a SQL Server Alias while configuring BizTalk to point to our backend SQL servers. This apparently led to the alias name being embedded into the Analysis Services artifact generation when we tried to deployed the BAM Activity. We had the SQL Server Alias on the two BizTalk application servers. We did not have it on the two Analysis Services cluster nodes. Once we added it to the SSAS nodes we were able to successfully deploy the activity.
I had this exception in the Application Event Log after trying to bring up the portal in IE (after a newly installed and configured BizTalk & ESB platform):
---
Exception information:
Exception type: WebException
Exception message: The remote server returned an error: (401) Unauthorized.
---
I was working in a two (application) server BizTalk environment but I only had this exception on one server. The portal came up fine on the other server.
I looked at IIS log files and found a 401 for /ESB.Exceptions.Service/ExceptionService.svc/GetUserSettings
I browsed to the /ESB.Exceptions.Service/ExceptionService.svc in IE and saw this in the Application Event Log:
---
Exception information:
Exception type: NotSupportedException
Exception message: Security settings for this service require Windows Authentication but it is not enabled for the IIS application that hosts this service.
---
Uhh... I did have that configured: Windows Integrated was turned on and Anonymous was turned off.
The issue was that I did not run the set command for NTAuthenticationProviders (specified in this KB: http://support.microsoft.com/kb/215383) on that server. I had previously ran the set command on the other server in my environment before running the Microsoft.Practices.ESB.UDDIPublisher.exe
Tuesday, February 09, 2010
#
I ran into the error, below, because the host instance didn't have permissions to read the C:\Program Files\Microsoft BizTalk ESB Toolkit 2.0\esb.config file. Also, don't forget to restart your host instance (or run iisreset) after you update your permissions.
Event Type: Error
Event Source: BizTalk ESB Toolkit 2.0
Event Category: None
Event ID: 6060
Date: 2/9/2010
Time: 2:03:58 PM
User: N/A
Computer: XXXXXXXXXXXXX
Description:
Error 194008: An error occurred reading the, esb, Section in the config file.
Source: Microsoft.Practices.ESB.Resolver.ResolverMgr
Method: System.Collections.Generic.Dictionary`2[System.String,System.String] Resolve(Microsoft.Practices.ESB.Resolver.ResolverInfo, Microsoft.BizTalk.Message.Interop.IBaseMessage, Microsoft.BizTalk.Component.Interop.IPipelineContext)
Error Source: Microsoft.Practices.ESB.Resolver
Error TargetSite: Microsoft.Practices.ESB.Configuration.ESBConfigurationSection get_ESBConfig()
Error StackTrace: at Microsoft.Practices.ESB.Resolver.ResolverConfigHelper.get_ESBConfig()
at Microsoft.Practices.ESB.Resolver.ResolverMgr.get_ResolverProviderCache()
at Microsoft.Practices.ESB.Resolver.ResolverMgr.GetResolver(ResolverInfo info)
at Microsoft.Practices.ESB.Resolver.ResolverMgr.Resolve(ResolverInfo info, IBaseMessage message, IPipelineContext pipelineContext)
Tuesday, February 02, 2010
#
Event Type: Error
Event Source: BizTalk ESB Toolkit 2.0
Event Category: None
Event ID: 6060
Date: 1/31/2010
Time: 7:06:00 AM
User: N/A
Computer: WS03_OFFICE07
Description:
Parameter name cannot be null or an empty string.
Parameter name: key
Source: Microsoft.Practices.ESB.Resolver.ResolverMgr
Method: System.Collections.Generic.Dictionary`2[System.String,System.String] Resolve(Microsoft.Practices.ESB.Resolver.ResolverInfo, Microsoft.BizTalk.Message.Interop.IBaseMessage, Microsoft.BizTalk.Component.Interop.IPipelineContext)
Error Source: Microsoft.Practices.EnterpriseLibrary.Caching
Error TargetSite: Void ValidateKey(System.String)
Error StackTrace: at Microsoft.Practices.EnterpriseLibrary.Caching.Cache.ValidateKey(String key)
at Microsoft.Practices.EnterpriseLibrary.Caching.Cache.GetData(String key)
at Microsoft.Practices.EnterpriseLibrary.Caching.CacheManager.GetData(String key)
at Microsoft.Practices.ESB.Cache.Cache`1.Get(String key, Boolean returnAndRemove)
at Microsoft.Practices.ESB.Cache.Cache`1.Get(String key)
at Microsoft.Practices.ESB.Resolver.ResolverMgr.GetResolver(ResolverInfo info)
at Microsoft.Practices.ESB.Resolver.ResolverMgr.Resolve(ResolverInfo info, IBaseMessage message, IPipelineContext pipelineContext)
For more information, see Help and Support Center at http://go.microsoft.com/fwlink/events.asp.
The issue was that I had the BRI string like this: BRI:// instead of BRI:\\ in the pipeline component's configuration. The latter is the correct way…
I recently had the pleasure of installing and configuring the ESB Toolkit 2.0 in a multi-server environment. There are some notes on how to do this in the official documentation but they’re not exhaustive and they don’t include details on how to install the management portal in a multi-server environment.
Prerequisites:
· Install and Configure BizTalk in your multi-server environment
· Install and Configure UDDI in your multi-server environment:
o You install and configure the Database components on the SQL Server! Yes, your DBAs are going to be unhappy about this.
o Install and configure the other UDDI components on your BizTalk Servers
o Note that you can only run the Notification Service component on server (I assume you could cluster it but we didn’t get into this…)
ESB Toolkit 2.0 Installation and Configuration:
· Follow the documentation for “Installing the ESB Toolkit Core” on all of your servers
· Please note that you can use the “File” configuration in a multi-server environment. To me, it seems that the docs are pushing the “SSO” configuration but you don’t have to use “SSO” for a multi-server environment. Just run the configuration tool on the second to “n” server and point toward the already created databases. Also I have heard that people have had a lot of problems with the SSO configuration
· Double check the esb.config file and make sure all of the settings are correct
· You may need to turn Kerberos on for IIS before you can successfully execute the Microsoft.Practices.ESB.UDDIPublisher.exe: http://support.microsoft.com/kb/215383
· Make sure you unpack the samples C:\Program Files\Microsoft BizTalk ESB Toolkit 2.0\ESBSource.zip following the official documentation. (Basically just follow all of the instructions in the “Installing the ESB Toolkit Core” section of the docs
ESB Management portal Installation and Configuration in a Multi-Server Environment:
· Keep in mind that the portal is a sample
· You can’t use the Management_Install scripts on a server that doesn’t have Visual Studio on it because the scripts require the Visual Studio 2008 SDK to function; the Visual Studio 2008 SDK requires Visual Studio for it to be installed… obviously VS won’t be installed in a multi-server environment
· The Portals solution (.sln) does include a setup project. I wanted a debug build so I had to open the solution (on my developer workstation) and in Visual Studio and use Configuration Manager to make sure that the setup project would be built for a “debug” build
· Build the solution, on your developer workstation, and find the .msi that was created for the portal
· Now on each sever in your group, perform the following:
· Create an application pool, in IIS, named EsbPortalNetworkAppPool and have it run under Network Service
· Install the .msi on your first server; the .msi creates the appropriate Virtual Directories (but doesn’t configure them correctly, see the authentication changes, below); use the application pool you created, when prompted. This creates four virtual directories one for the portal and one for each of its three services. Please note that this installs the portal, the ESB.BAM.Service, ESB.Exceptions.Service and the ESB.UDDI.Services to c:\inetpub\wwwroot
· Create the ESBAdmin db using the C:\projects\Microsoft.Practices.ESB\ESBSource\Source\Samples\Management Portal\SQL\ESB.Administration Database.sql file; it blew up at the bottom (find the “Create BizTalk Server Administrators Login” section) because my BizTalk Admin and BizTalk App Users groups were named differently; I manually added the appropriate permissions in SQL Server
· Update the C:\Inetpub\wwwroot\ESB.Portal\web.config with the correct db location and group names (connectionStrings and authorization nodes)
· Update the C:\Inetpub\wwwroot\ESB.Exceptions.Service\web.config to point to the EsbExceptionDb (connectionStrings node)
· Update the C:\Inetpub\wwwroot\ESB.BAM.Service\web.config to point to the BAMPrimaryImport db (connectionStrings node)
· Add Windows Integrated to the ESB.Exceptions.Service, ESB.BAM.Service and ESB.Portal virtual directories
· Removed Anonymous from ESB.Exceptions.Service, ESB.BAM.Service and ESB.Portal virtual directories
· Follow the installation and configuration steps for the “Installing the ESB Management Portal Alert Service” and “Installing the ESB Management Portal UDDI Publishing Service” sections. We did this on one server in the group, no more.
· We also followed the “Configuring Exception Management InfoPath Form Template Shares” section but I don’t see how that is necessary at this point.
Update 2/10/2010:
- Make sure your host instance service accounts have access to the esb.config file
- In order to use the esbimportutil.exe to deploy itineraries I had to copy the Microsoft.Practices.Modeling.Common, Microsoft.Practices.Modeling.Services and Microsoft.Practices.Modeling.ExtensionProvider (not sure on the last one but the first two are definately needed) assemblies from a developer workstation to the GAC on the server(s)
Update 2/22/2010
- Update the EmailTransformation.xslt (for the ESB Portal Alert Service) so that the hyperlinks that it generates point to the server name/dns name for the environment you are installing in
I hope this helps. If I run into issues or I find that I need to correct this post I will update it…
Friday, May 22, 2009
#
I presented at the Twin Cities Connected Systems User Group last night on the Managed Services Engine. You can get the presentation here.
The Managed Services Engine is a CTP technology that acts as a service intermediary. It helps abstract consumers form the services that they call, performing things such as xslt mapping, protocol switching, version mapping and service stubbing (useful for testing unhappy service respone paths as well as development of the consumer before the service is really ready.)
You can get the Managed Services Engine on CodePlex: http://www.codeplex.com/servicesengine
Thursday, May 21, 2009
#
From the BizTalk documentation: “The DTS package, BAM_DM_<ActivityName>, performs the partitioning and archiving/purging. Each time this package runs, it truncates another partition and archives/drops all partitions that are outside the online window.”
Here’s my restatement of this: The BAM_DM_<ActivityName> package (SSIS or DTS depending on your version of BizTalk and despite the fact that the docs refer to DTS only) performs two operations: building partition tables and archiving those partitions to the BAMArchive database when a partition’s creation date is past the online window.
If you open up a BAM_DM_<ActivityName> SSIS/DTS package and walk through it you’ll see that the second step calls the bam_Metadata_SpawnPartition stored procedure. Toward the end of that sproc it inserts a new record into the bam_Metadata_Partitions table setting the CreationTime’s value but not the ArchivedTime value which means it will be NULL.
A later step in the package calls the bam_Metadata_BeginArchiving stored procedure. Toward the end of this stored procedure it performs an SQL Update on the bam_Metadata_Partitions table where the ArchivedTime is null and the CreationTime is less than the online threshold (derived from the online window.) If the Update succeeds any partitions that should be archived have their ArchivingInProgress value set to 1 (this is set so that if the package runs again, before it completes, the second run will essentially just exit without doing anything.)
Later steps (two of them) in the package perform the actual archiving; they examine the CreationTime and ArchivedTime to figure out what they should archive, using the same logic outlined above (for the . bam_Metadata_BeginArchiving sproc).
There are many more details but hopefully provides enough detail for the takeway.
Takeaway: your BAM_DM_<ActivityName> package almost certainly needs to run twice to actually archive data to the BAMArchive database because the time between when the partition is created during the second step of the package and when archiving will happen (later steps) isn’t going to be greater than your online window. The lowest you can set your online windows is 1 minute. Unless you have massive quantities of BAM data, and a slow SQL Server, it isn’t going to take more than a minute between when the bam_Metadata_SpawnPartition sproc runs (which sets the CreationTime) and the archiving steps execute. So, the first time you run your package it will create the partitions; the second time it will archive those partitions, if they fall outside the online window. This means you need to think carefully about how often you schedule your BAM_DM_<ActivityName> packages and how that is related to the online window.
For additional context reference the Business Activity Monitoring in Depth for Developers whitepaper here: http://download.microsoft.com/download/D/D/A/DDA95D1F-14D4-49A2-B2C8-E244535E8502/BAM_for_Developers.docx
Monday, May 04, 2009
#
I ran into an issue with bm.exe this morning.
Here’s the error I saw when running the bm.exe depoy-all command on a spreadsheet.
Deploying View... ERROR: The BAM deployment failed.
Encountered error while executing command on SQL Server "MyMachineName".
String or binary data would be truncated.
The statement has been terminated.
I ran SQL Profiler the next time I executed this (as well as adding the –Trace:On parameter to the deploy-all command which _never_ seems to add any additional information. After a little bit of sleuthing it looked like this was the last statement executed before profiler showed sql statements that were deleting BAM tables, sprocs, etc.
-- Register activity in RTA metadata table
INSERT [dbo].[bam_Metadata_RealTimeAggregations]
(
CubeName,
RtaName,
RTAWindow,
Timeslice,
ConnectionString
)
VALUES
(
N'CreateOESIView',
N'CreateOESIPT',
3600, -- RTA window defaults to 60 hours
60, -- Time slice defaults to 60 mins
N'[HugeStringHere]’
The ConnectionString column’s max size is 3600 and you guessed it, my [HugeStringHere] value was larger than that. The string was actually not just a connection string and included CREATE CUBE and other statements in it.
It turns out that the PivotTable that I created in Excel for this particular view was too big – as in it had too much stuff in it (Dimensions, Measures). I created a smaller pivot table with fewer Dimensions in it and then the activity deployed without problems.
Thursday, July 19, 2007
#
In the BizTalk Hotrod quarterly ezine. You can find a condensed version of the article at http://www.biztalkhotrod.com
The full version (huge!) can be found at http://biztalkhotrod.com/Documents/BizTalk%20Smack%20Down%20Full.pdf
The article was a ton of work but was well worth the effort. The intent was to have some fun comparing BizTalk and WF/WCF. Let me know if you have any feedback!
Sunday, May 06, 2007
#
Thanks to all who attended my session on BAM last weekend.
You can find the presentation and demo source code here. Note that I did not get the WCF Interception running so the XML file for that is not included - I'll discuss that in a follow up post in the next week or two.
To run the demo artifacts you'll need BizTalk Server 2006 R2 Beta 2, .NET 3.0 installed and Excel 2007 installed.
Monday, April 23, 2007
#
I'm a little late in posting about this but there is a new BizTalk-specific "magazine" called BizTalk Hotrod: http://biztalkhotrod.com/default.aspx
The first issue was published just a few days ago.
Enjoy!
The second Twin Cities Code Camp will occur this Saturday, April 28th. Here's the website, which includes a schedule and list of sessions: http://www.twincitiescodecamp.com/TCCC/Default.aspx
I'll be presenting on utilizing BizTalk's BAM features from non-BizTalk applications.
Wednesday, December 06, 2006
#
This post disappeared from a previous blog of mine so I'm reposting it.
---
'Thank you' to everyone who attended the Debugging Tips and Tricks webcast that I presented today for the BizTalkRocks community. You can find the presentation at http://www.biztalknuggets.com/presentations/BizTalk Debugging Tips and Tricks.zip
I recorded the webcast. I will repost this article and include a link to the recorded webcast when it is posted.
If you have any questions on the presentation or the webcast please contact me through the Contact link on this blog.
Update (12/9/05): I think I skipped a slide yesterday. If you download the presentation, search for 'BizUnit' to find another 'Other Tools...' slide. Sorry about that.
Update (3/26/07): Updated the link to the presentation.