Tuesday, December 11, 2012

BizTalk Gotchas that got me

Hereby some BizTalk gotchas, that got me, it’s a small compilation as I’m trying to group related subjects together, in future posts I’ll focus on MSMQ, ESB Toolkit and other stuff.

Issue: Outputfile name is %sourcefilename%

Is it, that…? You have promoted the FILE.ReceivedFileName and configured the macro %SourceFileName%, however, this is CASE SENSITIVE!

Issue: No processing takes place after a BRE call

Is it, that…? You might be using a .Net helperclass, you’ve added the ‘StaticSupport’ following (http://msdn.microsoft.com/en-us/library/dd298814(v=bts.10).aspx). This won’t work…the StaticSupport should be created under the WOW64Node

Issue: Pipeline configuration change does not have any effect

Is it, that…? You are using a dynamic send port…if so, stop/start the application-port

Issue: Inside my orchestration, a variable assignments (from context properties) leads to an exception (missing property exception)

Is it, that…? You are not assigning the variable from the message property in the very beginning of the orchestration, you are doing this when you need the variable as you would do in normal code….if possible, make sure that you minimize the number of shapes between receive and message context properties retrievals.

Issue: You are using the Date functoid to generate a date, you want to use a different format (From the functoid: The output format is CCYY-MM-DDThh:mm:ss.)

Is it, that…? You are using a ConvertDate functoid from a library that requires an input format, the description from the Date functoid does not work..

This is because the description is not correct and should be as defined in Input[1]

clip_image002

In my case I used a functoid library which has a parseExact call;

clip_image002[4]

Issue: I’m migrating a solution that contains a service reference and want to update this reference with a new URL / or use a classic ASP.Net webservice

Is it, that…? You forgot that little trick, which allows you to create/update the reference for classic 2.0 references Glimlach

clip_image002[6]

Click Advanced

clip_image004

Click ‘Add Reference’

clip_image006

Enter the address

clip_image007

Issue: Debugging XSLT raises an error

Is it, that…? You are calling a custom functoid / .Net class in the map…you won’t be able to debug

Issue: Calling an functoid / .Net class in an XSLT map does not work

Is it, that…? Only when you have an external XSLT it is possible to call a functoid / .Net class from the XSLT

Issue: There is no tracking data

Is it, that…? There are multiple tracking hosts

 

I’ll follow up with gotchas related to the ESB Toolkit.

 

Cheers,

Sander

Monday, November 26, 2012

BTDF–(Best) Practices

 

Hereby a list of practices I now tend to follow after some experience with it, I have additional features that I will share in the future, but at the beginning of the project, please think about all (and more) settings such as;

Choice: Disable starting of ports etc

<StartApplicationOnDeploy>False</StartApplicationOnDeploy>

<StartReferencedApplicationsOnDeploy>False</StartReferencedApplicationsOnDeploy>

<EnableAllReceiveLocationsOnDeploy>False</EnableAllReceiveLocationsOnDeploy>

Rationale: Starting applications is useful on dev/test not on accp/prod)

Note: These settings are part of the ‘standard’ settings, which to my knowledge cannot be overwritten, therefore you should choose the safest option.

 

Choice: Always use masterbindings

Rationale: Standardisation, in all application you will use, there will be some ports that use masterbindings. If this is used from the start all projects will have the same structure. In most of the case you will end up using them.

 

Choice: Do not use XmlEscape

Rationale: Xml Escape will modify the binding file (by unescaping the file using a adapterXpaths.txt file in the BTDF folder), the configuration .txt file does not include all possible xml escaped values such as WCF adapter settings, inflicting manual changes…which means customizations…which i do not favor.

Additionally this is a hassle when using Send ports filters and making modifications, as you have to manually change the exported bindings from XmlEscaped to unescaped…..not really ideal.

 

Choice: SkipIIS/Host instance restart (include in manual)

Rationale: If (this needs to be though over) you have multiple applications, it’s likely that it’s not usefull to restart IIS/Host instances as this would be done for each application.

 

Choice: Use SSO - Settingfiles

Rationale: Standardisation - All settings that are required in your application should be stored in SSO, the BTDF can retrieve them in various components

 

Choice: Use project name <Deployment> instead of <projectname>.deployment

Rationale: Standardisation, this makes it very easy to script deployments when multiple applications are used

 

Choice: Only configure values that are overwritten

Rationale: This prevents very long configuration files. In most project the defaults are suitable, and once a settings is required (due to a project type) adding the setting is fairly easy.

 

Choice: Create folder in Project ‘Deployment\Tools’ and add all tools

Rationale: Once the BTDF project has been created, you need to add all files such as (bindings, settingsfile generator, tools etc), this allows you to add this to TFS which enables co-developers to quickly build the project

 

Choice: Change the toolsversion (only after error: SDC 2006 error)

Rationale: If you receive an error on SDC Task (when using FILE tasks)

Original configuration

<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003" DefaultTargets="Installer" ToolsVersion="4.0">

New configuration

รจ     <Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003" DefaultTargets="Deploy">

 

Choice: Do i need the BTDF?

Rationale: Yes Glimlach, i think in most scenarios you do, you must wonder if the learning curve for a newbie is worth the advantage. For example, a POC which lasts for a couple of days, the learning curve might not be useful.

 

Feature requests

· Undeploy ESB itineraries

· Ability (or documentation how) to overwrite default settings (using parameters) such as;

‘StartApplicationOnDeploy’

- Do not GAC pipelinecomponents

 

 

 

Cheers,

Sander

Sunday, July 01, 2012

BizTalk BRE / calling a static method inside a helperclass

So when you call a static method from a custom helperclass inside the BRE you must set the correct registry key.

HKLM\SOFTWARE\Microsoft\BusinessRules\3.0\StaticSupport (DWORD)

MSDN

Please be aware that this key can be found in the WOW6432Node and not directly under Microsoft\BusinessRules\3.0!!!

image

 

HTH,

 

Sander

Sunday, June 24, 2012

BTDF–Use a different binding for Test as Dev

 

The BizTalk Deployment Framework utilizes MSBuild and is therefore highly flexible. In case you wan’t to use FILE ports in DEV and an entirely different protocol in TEST you have 2 options:

1) Use Macros and leverage the XmlPreprocess and Masterbindings functionality

2) Override the Portbindings/PortbindingsMaster MSBuild property.

I will show you how to realize option #2

Configure the binding file in the BTDF Settings file

image

Configure the BTDF Project

       </PropertyGroup>

       <PropertyGroup Condition="'$(Configuration)' == 'Debug'">

              <PortBindings>$(Portbindings)</PortBindings>

              <OutputPath>bin\debug\</OutputPath>

              <DeployPDBsToGac>false</DeployPDBsToGac>

       </PropertyGroup>

 

 

 

HTH,

Sander

Friday, June 22, 2012

BizTalk still being updated…CU5 released

Ok, so no major updates but still some fixes that seem very critical, now bundled in a cumulative update (CU5)

Among other fixes;

2703644 FIX: Orphaned rows are created when you run the "DTA Archive and Purge SQL Server Agent" job in BizTalk Server 2010 BizTalk Server Business Activity Monitoring (BAM) Runtime

2676141 FIX: An instances table is changed to use the primary filegroup in the BAMArchive database when you run the BAM SSIS package in BizTalk Server 2010

During installation

image

Restart of services

image

Note: Make sure that the virus scanner (e.g. TrendMicro) can be stopped or is stopped as this will prevent the WMI service from stopping and prevent you from installing the update (changes can not be rolled back).

Even a free summary screen with log is included Glimlach

image

 

If you’re really interested in the all the windows that pop-up, I suggest to open the log file as well.

 

Best regards,

 

Sander

Thursday, June 21, 2012

ESB Toolkit – Unit testing BRI lookups

One of the major advantages of the ESB Toolkit is that you can leverage the highly flexible Business Rule Engine (BRE) and use the BRE to dynamically configure various ESB related functionality:
- Itinerary to be started
- Transformation Type (thus, the name of the map)
- Endpoint (Set End Point Outbound Transport Location, e.g. Transport Type, Location, Action etc.)
This wonderful stuff can be done by doing BRI Lookups in the pipeline (executed in the ESB Pipelines using the ESB Dispatcher pipeline component) or even from within an itinerary (this applies for Transformation Type and Endpoint information off course)
Problem
One of the difficulties of this is that testing this is fairly cumbersome since tooling wasn’t readily available to do some automated testing….now there is!
Tool for testing BRI calls
My colleague IT Hero - Tomasso Groenendijk has created a very useful tool to do manual testing on BRI lookups. This enables you to quickly test rules and determine if the ESB information is correctly set. This is possible using a practical interface and comes even with documentation containing screenshots (yes that’s right….a tool, with code….and DOCUMENTATION!)
Automated unit testing BRI calls
As I was working on a quite large Rule set, I used the tool and thought it would be useful to create my unit tests with the tool by creating some helper classes…this made it extremely easy to do automated testing.
As the code is fairly simple I will point out the functionality of the tool and show screenshots of the unit testing features you could use it for:
image
Unit Test
ValidateItineraryName(GetPathToDataFile("TestMessage.xml"),
"GlobalBankEast",
"GlobalBankEastItinerary"
);

private static void ValidateItineraryName(string pathToInputFile, string customer, string expectedItineraryName)
{
FileParameterReplacerStep fprs = new FileParameterReplacerStep();
fprs.AddPair("CUSTOMER", customer);
fprs.FileName = pathToInputFile;
fprs.Execute(null);

ESBRuleTester esbTest = new ESBRuleTester();
RuleContainer rc = new RuleContainer();
rc.FactType = RuleContainer.FactsEnum.Itinerary;
rc.PolicyName = "Policy.ESBResubmit.ItinerarySelect";

ItineraryContainer ic = esbTest.RetrieveItineraryContainer(pathToInputFile, rc);

Assert.AreEqual(ic.Name, expectedItineraryName, true, "The Itineraryname is not as expected");
}


Well, I’m sorry for not posting the code, although I hope this gives some ideas how to use the Tool and how to implement unit testing. In my case it was fairly easy to test about 25 itineraries automatically and isolated which had to be done otherwise by creating a lot of BizUnit steps that supplied messages on ports that were configured using test-bindings to simulate calls, and derive by verifying the output files that the correct itinerary was started.

Note:
Method: GetPathToDataFile(“”) this is implemented in a base TestClass and retrieves the path of the Unit test datafiles by determine the Assembly directory of the ‘TestResultsfolder’. I do this to make it easy to work with files
Class: ESBRuletester contains the functionality provided by the Tool, this created to enable testing from code instead of using a GUI
Class: RuleContainer, this is a simple class that contains usefull parameters
Class: ItineraryContainer (this is a simple data class that contains the results of the ItineraryFact, same structure is developed for testing EndPoint / Transform, this makes it easier to implement BizUnit validation steps.

Well, hopefully this helps in developing automated testing when developing functionality for the business rules engine and the ESB Toolkit.

Cheers,
Sander

Monday, June 18, 2012

Centralized SSO Application Configuration Data Store

Reading application configuration data from a Single Sign-On database is a well-known concept within the BizTalk community. There are other means of retrieving application configuration data for BizTalk, yet retrieving them from SSO is the most powerful one. Microsoft has built an SSO Application Configuration Snap-In that provides a good user experience maintaining custom configuration data. With the Snap-In you will also get code for a .NET Helper Class to support retrieval of application configuration data in BizTalk. This approach has some major benefits. Your application configuration data is cached, has a built in refresh mechanism (ESSO Service) and is secure.
What if you have a requirement that to remotely (from a non-BizTalk machine) retrieve application configuration data, because you like to benefit from SSO Config Store?
Consider the following diagram
clip_image002[4]
In this scenario a mapping is implemented using a Functoid based on a shared helper class that reads the connectionstring information from SSO. Why all this trouble, well….BizTalk is not the only product that can do transformations, -and it’s worthy to write another post on when to use what product- but let’s say that this helper class is designed with in mind that the functionality will re-used by other interfaces which are developed using Sql Server Integration Services (SSIS) interfacing.
The implementation forces us to enable the machine that runs SSIS to access the SSO Database, that is, using the SSO API.
Business scenario
We use the BizTalk Deployment Framework (BTDF) to create an SSO Application, the BTDF uses the BizTalk Configuration to determine the location of the SSO. This works fairly easy since the Enterprise Single Sign On service is available on the BizTalk machine and all the required components.
However an SSIS machine….has no BizTalk, no Enterprise Single Sign on Service, no SSO Client…
clip_image004[4]
Why is the SSIS arrow in red….well…getting this scenario to work is not what you call ‘a walk in the park’.
Steps to implement this scenario, what can go wrong
· Installing the SSOClient (I used the setup from BizTalk and only installed the administration components)
http://msdn.microsoft.com/en-US/library/aa704695(v=bts.10)
o Configure the SSO Server
clip_image005[4]
Note: SSO Affiliate Applications are visible
· SSOAdministration MMC Snap-in
o Verified that the server is available
· Program Files\Common Files\Enterprise Single Sign On
o Verified using ssomanage –listapps that REMOTE applications are visible/shown
· DTC Ping
Performed a ping on the client/server
· Create a test client with different SSO Interop dlls
(http://social.msdn.microsoft.com/Forums/en-US/biztalkgeneral/thread/faa09aac-c960-4582-8b04-413b215b99e9)
o Unhandled Exception:
System.Runtime.InteropServices.COMException: Could not contact the SSO server '<Server>'. Check that SSO is configured and that the SSO  service is running on that server.

(RPC: 0x800706D9: There are no more endpoints available from the endpoint mapper.)
at Microsoft.BizTalk.SSOClient.Interop.ISSOConfigStore.GetConfigInfo(String applicationName, String identifier, Int32 flags, IPropertyBag properties)
at SSOSettingsFileManager.SSOSettingsFileReader.Read(String affiliateApplication)
at SSOSettingsFileManager.SSOSettingsFileReader.ReadString(String affiliateApplication, String valueName
at SSOSettingsFileReader.ReadString(String affiliateApplication, String valueName) at CheckSSOSetting.Program.Main(String[] args)

How to solve this
To implement this scenario you would have to create a custom SSO client (or make some minor modifications).
· In our case the BTDF created the SSO Application using a specific GUID, ensure that when you read settings from an SSO Application, that the same GUID is used for reading settings

public static string InfoIdentifier = "{56D74464-67EA-464d-A9D4-3EBBA4090010}";
· Use the correct SSO Flag
//SSOFlag.SSO_FLAG_RUNTIME does not work from a remote machine
private const int SSOFLagsToUse = SSOFlag.SSO_FLAG_NONE; 

The SSO Client code
To be able to communicate with the SSO Server from a non-BizTalk machine the client code that works for SSO Application created with the BTDF is listed below;

public static string InfoIdentifier = "{56D74464-67EA-464d-A9D4-3EBBA4090010}";

//SSOFlag.SSO_FLAG_RUNTIME does not work from a remote machine
private const int SSOFLagsToUse = SSOFlag.SSO_FLAG_NONE; 
READ       
ISSOConfigStore configStore = (ISSOConfigStore)new SSOConfigStore();
SSOPropertyBag bag = new SSOPropertyBag();
//SSOFlag.SSO_FLAG_RUNTIME
configStore.GetConfigInfo(affiliateApplication, SSOHelper.InfoIdentifier, SSOFLagsToUse, bag); 
bag.Read(SSOHelper.PropName, out propertyValue, 0);
SAVE/UPDATE
public void SaveConfigInfo(SSOPropertyBag bag, string affiliateApplication)
{
ISSOConfigStore configStore = (ISSOConfigStore)new SSOConfigStore();
configStore.SetConfigInfo(affiliateApplication, SSOHelper.InfoIdentifier, bag);
}
DELETE
public void DeleteConfigInfo(string affiliateApplication)
{
ISSOConfigStore configStore = (ISSOConfigStore)new SSOConfigStore();
configStore.DeleteConfigInfo(affiliateApplication, SSOHelper.InfoIdentifier);
}

And voila…
clip_image002[6]

Thanks to my colleagues from Microsoft Nico Stokman and Dick Dijkstra for their never ending enthusiasm to solve a problem where you didn’t wish you would have to go the extra mile to resolve it and Steef-Jan for his input and suggestions on this blog subject.


Cheers,
Sander

Friday, June 08, 2012

WCF-Oracle–Install the 32- and 64-bit client (the following assemblies are installed SDK assemblies…)

 

There are probably already lot of posts on the installation of the Oracle client, so this is a small note;

Error:

If you start visual studio on a machine that hasn’t got the Oracle 32-bit client installed, prepare to face the following error;

‘The following assemblies are installed SDK assemblies but could not be shown in the customize toolkit dialog because they…..’

clip_image001

Solution

This is because VS.Net is 32 bit and you only installed the 64-bit Oracle client.

Install for your DEVELOPMENT environment both the 32-bit and 64-bit client.

 

HTH,

Sander

Friday, June 01, 2012

BizTalk Pub/sub vs Topics based routing–discussion


My colleagues and I had a brief discussion about the subject ‘Topics’ and what it brings…
Do you all agree/disagree with the following statement: topic-based pub-sub messaging doesn’t really exist in BizTalk
“In my opinion; I disagree, as BizTalk offers the following 'out-of-the-box' • Message Routing (f.e build in context properties like message type, trading partner, operation etc)
• Content Routing (f.e. promoted properties, message inspection in orchestrations/pipelines icw orchestration logic)” My colleague Rene Brauwers


Here my 2 cents….
I agree that it exists...however the current offerings in BizTalk are tightly coupled, making the usage far from perfect.
When doing content based routing on custom fields (promoted properties), you will be making the solution message-coupled; Your custom message property schema is deployed, and the message filter on these fields have a direct relationship with this property schema. Making any change to this schema will give you a head-ache and effectively means that your solution is tightly coupled (only loosely coupled when using BTS properties) When doing pipeline-development your solution will also become coupled as the pipelines are tied to your solution. Again, not a very manageable situation (when thinking in terms of reusability / manageability). Summary To my humble opinion pub-sub means that the subscriber can route messages based on a subscription without creating a dependency on the publisher. In BizTalk this is not the case, so i would say: we need Topics and Queues as AppFabric is going to provide!!!   Regards, Sander






Thursday, May 10, 2012

MSI–Uninstall started from a network share–big nono!

I had this script for a while that I used to install/uninstall a bunch of MSI files prior to do a BizTalk deployment. I though it was working fantastic;

for /d %%d in (.) do forfiles /P . /S /M *.msi /C "cmd /c msiexec /x @file /quiet"

Unitill…..

I did this from a network share…this is not supported, a genius decided to use Windows as the Default path in this case…thus looking in the Windows folder and starts to uninstall all MSI’s that are lying around!!!

Never…..never run this from a network share!!

MSIUninstall

HTH,

Sander

Pending blog items–Choose!

 

As I mentioned…I have a blog backlog…so much to do, so little time…so you can help me out. I have several pending blog items. Hereby the current list and I invite you to help me out in determining the priority, otherwise…it will be me who chooses what’s next Glimlach.

image

Sorry for the delay in posting….Bedroefde emoticon

 

Kind regards,

Sander

Wednesday, May 09, 2012

ESB Toolkit – BAM Error (TDDS failed to batch execution of streams)

 

You have this error? You are using the the ESB Toolkit? You are pulling your hairs out?

This post might be your solution Glimlach

Context

The ESB Toolkit allows for BAM Logging in a standard ESB Toolkit model. This can be enabled per Itinerary service in the Itinerary Designer:

image

In this scenario you need to deploy the ESB Toolkit BAM definitions that are located in the ESB Toolkit program files directory.

Our Cause

In our case we had implemented our own BAM Model and didn’t want to use the ESB Toolkit BAM model. So we had carefully disabled tracking everywhere….

After some pain we found at that by default the ESB Send All Exceptions ports REQUIRES that the BAM model is deployed.

Solution

Once you know the issue, its easy to solve..disable the Tracker!

Go to the SendAllException port

image

Disable the Tracker

image

 

And the errors are…..not there anymore.

 

Cheers,

Sander

Tuesday, May 01, 2012

BizTalk mapper 2010 – determine issues with custom functoids

 

In case the mapper fails (and only then, these steps will help you out a bit!) when you do Test map, and it seems to be caused by a Custom Functoid that can not be loaded, perform the following steps;

image

You have to call the ‘Debug’ map, this will generate the XSLT and will start the debugging

image

This will give you an error in case there are errors

image

Look in the output window, for the clear and distinct hint Bedroefde emoticon (e.g. : NS0 is the namespace causing the problem);

image

Now perform a ‘Validate’ map to get the Extension XSLT;

image

Open the .extxml.xml

image

Look for the specific namespace (NS0):

image

Open the custom functoid and make sure that the classname / SetExternalFunctoin are EXACTLY identical.

image

image

If this is the case, you can do the following (but you’re problably in the zone….the problem zone)

1) Perform a build on the Functoid library

2) Redeploy the Functoid library

3) Restart visual studio

4) Open the map, Reset the toolbox

5) Verify that the map works

LAST RESORT!!

6) Remove the Custom functoid, and add the functoid

 

HTH,

 

Sander

Friday, April 20, 2012

BizTalk mapper 2010–debugging with VS.Net

 

I had the weirdest issue, a helperclass that was called by a functoid did not returned to correct result in the debugger (And in the mapping result). After a redeploy, rebuild, clean solution, removing and adding the dlls in the GAC I couldn’t figure out what the issue was..

Somehow variables were shuffled, an Integer became a string and viceversa….

weird

After finding out that the Incense warehouse was closed, I knew I had to do something unexpected…..I renamed the variables…magically it worked??

Well, another couple of hours of my life spent on utter ridiculous weirdness….so if you have this problem….do what you think shouldn’t be required, thinking different might do the trick.

Kind regards,

Sander

Wednesday, April 18, 2012

Oracle installer–do you know it’s 2012 already?!

 

The installer starts with the most ‘obvious’ check ever, we need at least 256 colors…can’t even remember a videogame in the Dos Era that did that….

Colors

Then the PATH variable is too long…

Path

I guess there is some room for minor improvements…

 

Please consider that I’m just posting this to free my mind and allowing it to relax.

Cheers….now it’s time to use the time machine to go back in time and finish the installation….with great joy.

Sander

Monday, April 09, 2012

BizTalk Quirks–Message Context Properties vs Scope

 

Inside orchestations it’s fairly easy to read ContextProperties (albeit Promoted/Distinguished). I had a strange issue where a was reading out a property multiple times in different scopes (in the main branch as well as the error handling to determine a value inside our msg):

Start of the orchestration

LOG(requestMessage

            (Customer.Domain.Common.Schemas.AdminID,

…..,

…..

);

When I did the exact same thing inside the orchestration in another section… I got a exception about a missing property. So unexpected and not helpful….the incoming message was not altered inside a rule, the properties were of the MessageContextBase (so not bound to the messageType) and I used the same code.

In the end I switched to a variable assignment;

variable asssignment = msg(Property);

 

So my new rule is, assign context properties as soon as possible to variables, scoping and context properties seem to conflict sometimes.

 

Captain Quirk.

Friday, April 06, 2012

BizTalk Quirks –BizTalk mapper

 

Several weird issues I’ve encountered have made my think about a special blog theme ‘BizTalk Quircks’. The first one is the BizTalk mapper in 2010. As blogged earlier, there are some behavior differences, but to my opinion as well a few bugs. As I’ve not spent a lot of time reproducing the issues but have met colleagues with the same issues, here some issues you might encounter;

A link to a functoid that is removed remains active in the functoid parameters

This means that it isn't possible to create a new link, the parameter has to be manually removed in the mapper.

Creating several links to a functoid (with e.g. 6 params) lets the mapper loose count

I had a functoid with 6 parameters, filled them all, but somehow the link of parameter 6 created a void parameter 7, this meant i got a validation. When i removed the parameter in the functoid it was all fine and dandy.

Creating a 'new' message (SalesOrder = SalesOrder) using a map doesn't filll all the values

I sometimes created new messages (when i had no input) by creating a map that mapped the same schema Input=Output, just to fill in the values. This doesn't work in 2010 anymore, i now always have to resort to creating a msg from scratch (Xml assignment).

Please add info, tips, steps etc!! Hopefully enough to post bugs, otherwise precautionary steps for other colleagues.

 

Signed,

Captain Quirk Bedroefde emoticon

Saturday, March 24, 2012

BizTalk update - CU4

 

Ok, lets start with a small post….a BizTalk 2010 update is released (CU4). The approach might be to install it when you have issues, although there seems to some minor changes on EDI handling, please note the following trivial changes;

2672494 (http://support.microsoft.com/kb/2672494/ )
FIX: The BizTalk Server MessageBox database grows very large because records are not cleared in the EqualsPredicate2ndPass table in BizTalk Server 2010

2662532 (http://support.microsoft.com/kb/2662532/ )
FIX: A "Backup BizTalk Server (BizTalkMgmtDb)" job on BizTalk Server 2010 fails when you try to back up a custom database.

Summary

Although the update might be not suited for you due to company policy of only installing Service Packs,you should at least check out if the MessageBox database is indeed very large and all jobs are running smoothly!

 

Cheers,

Sander

Friday, March 23, 2012

AppFabric For Windows Server - Caching (formerly known as velocity)


In our project we came to the conclusion that caching would be a nice feature and that a distributed implementation would be best suited. We looked at the various offerings (NCache, MemCached, Custom implementation, App Fabric).
As AppFabric is the most compelling, I will elaborate on this one in detail;
Architecture
image
Requirements / Concerns
  • Windows Enterprise Server

Important
Windows Server AppFabric cache hosts should be dedicated to the caching service, which means that those servers are not also used as application, web, or database servers. It is possible to use non-dedicated cache servers in a cluster, but this scenario is not supported. Despite this policy, if you decide to use non-dedicated cache hosts, make sure to properly estimate and test the configuration for each cache host to allow enough memory and network resources for both the caching service and all other services on the machines. Also understand that spikes in processor and network utilization by other services will negatively impact the performance and stability of the cache cluster. For more information, see Windows Server AppFabric Caching Capacity Planning Guide.

Important
It is important that the cache cluster runs in a homogeneous environment of servers. It is not supported for cache hosts to have different physical specifications in memory, processor speed, and other capabilities.

http://msdn.microsoft.com/en-us/windowsserver/ee695849   How to use it
//Each application has a similar GetCache method call DataCacheFactory myCacheFactory = new DataCacheFactory(); DataCache catalog = myCacheFactory.GetCache("catalog"); //One cache client saves an object to the catalog named "toy101" catalog.Put("toy101", new ToyObject("toy101", "Playschool")); //The same or different cache client retrieves the object ToyObject toy = (ToyObject)catalog.Get("toy101"); //The same or a different cache client removes the object catalog.Remove("toy101");








  Note: Required VS.Net References C:\Windows\System32\AppFabric\Microsoft.ApplicationServer.Caching.Core.dll C:\Windows\System32\AppFabric\Microsoft.ApplicationServer.Caching.Client.dll   Installation Download http://www.microsoft.com/download/en/details.aspx?id=15848
  • Windows Server 2008 x86 - WindowsServerAppFabricSetup_x86_6.0.exe
  • Windows Vista x86 - WindowsServerAppFabricSetup_x86_6.0.exe
  • Windows Server 2008 x64 - WindowsServerAppFabricSetup_x64_6.0.exe
  • Windows Vista x64 - WindowsServerAppFabricSetup_x64_6.0.exe
  • Windows 7 x86 - WindowsServerAppFabricSetup_x86_6.1.exe
  • Windows Server 2008 R2 x64 - WindowsServerAppFabricSetup_x64_6.1.exe
  • Windows 7 x64 - WindowsServerAppFabricSetup_x64_6.1.exe
Steps Enable caching image
Review the features that will be installed image image Make sure to check the log and verify that everything is installed image Now you ready to configure the rest….problably the following update will be required before you can continue: Service pack update:http://support.microsoft.com/kb/980423 Configuration image Assign or create the databases image Choose the correct provider image
Storage type Storage location Cluster management
XML file shared network folder lead hosts
SQL Server database SQL Server SQL Server (default) or lead hosts
Custom provider custom store custom store
Create or join a cluster image And you are in business!   Tools The AppFabric Caching Admin Tool help you manage the Microsoft Distributed Cache. http://mdcadmintool.codeplex.com/   Summary I’m not going to compare any caching frameworks, that’s a project related choice in my opinion, I can say however that AppFabric is pretty easy to use, however some of the requirements are really over the top and made us go for another approach, probably a custom caching mechanism…   HTH, Sander