Quantcast
Channel: BizTalk Tips & Things
Viewing all 25 articles
Browse latest View live

Invalid object name 'BizTalkDTADb.dbo.Tracking_Parts1'

$
0
0

I have been in a customer recently that had this rare alert in the SQL Server Log while running the TrackedMessages_Copy_BizTalkMsgBoxDb job (never seen before)

“Executed as user: USERNAME. Invalid object name 'BizTalkDTADb.dbo.Tracking_Parts1'. [SQLSTATE 42S02] (Error 208).  The step failed.”

At first glance i thought it was a security issue concerning the SQL Server Agent account rights within the database but it was not the case, since the SQL Server agent was well configured and has access to all databases in the instance.

I have spent some time investigating the issue, even i have ensured the real existence of the BizTalkDTADb.dbo.Tracking_Parts1 table.   :-)  everything seemed to be right but the job was not working at all. Having an interview with the BizTalk Administrator i found out they moved the Tracking Database to a different instance the day the alert started to throw. Right! Good Point!  They followed the "How to Move the BizTalk Server Databases" online documentation. Checking the whole points we realized they forgot to update the TrackedMessages_Copy_BizTalkMsgBoxDb job to point to the new server.

How to fix it

Simply edit the  Purge Step in the TrackedMessages_Copy_BizTalkMsgBoxDb job to point the new server name

exec bts_CopyTrackedMessagesToDTA ‘NewServerName’, 'BizTalkDTADb'

and Good Luck!  :-)


BizTalk SOAP Web Publishing Wizard does not properly sets the min and max occurs properties

$
0
0

“If you publish a schema that contains minOccurs or maxOccurs attributes with specific values, these values may be different in schema exposed by the published Web service. As a general rule of thumb, all minOccurs attributes are converted to 0 (minOccurs=0) and maxOccurs attributes are converted to either 1 or unbounded (maxOccurs=1 or maxOccurs=unbounded)”

See the section “Publishing schemas that specify values for minOccurs or maxOccurs attributes” in the online BizTalk documentation  Considerations When Publishing Web Services to read the official statement.

OK, Right… but it is not exactly occurring like that:

in the Source schema, if the element type is int and minOccurs is =1 , the web services publishing wizard works fine:  the same value can be found in the final Wsdl

However,

in the Source schema, if the element type is string and minOccurs is =1 , the web services publishing wizzard does not works and changes minOccurs  to 0 (no matter what the original value is)

How To Fix it

Move to WCF!!!!!   and this will not happen!    ;-)

but if you can not move to WCF, then:

Edit the  DataType.cs file, locate the field having the problem and change the attribute definition by adding the IsNullable = true modifier.

[System.Xml.Serialization.XmlElementAttribute(IsNullable = true,Form = System.Xml.Schema.XmlSchemaForm.Unqualified)]

This procedure will ensure properties are generated fine each time the wsdl is generated.

Where is the DataType.cs file located?

The wizard serializes the XSD files in the DataType.cs file and place it under the virtual directory assigned to the web service already created.

Warning

Take care when executing the SOAP Web Services Publishing Wizard again since it will replace all the custom changes made.

Configuring BAM portal on BizTalk 2009 “This access control list is not in canonical form and therefore cannot be modified”

$
0
0

Trying to configure BAM Portal on BizTalk 2009 i have got this error  “This access control list is not in canonical form and therefore cannot be modified” 

????

WTH is this?   :-o

Reading the error log, and searching for the word“error”    :-) found the following:

[9:44:05 PM Error ConfigHelper] h:\bt\890\private\source\common\prod\btscommon\configwizard\confighelper\service.cpp(729): FAILED hr = 80070421

[9:44:05 PM Warning ConfigHelper] The account name is invalid or does not exist, or the password is invalid for the account name specified.
[9:44:06 PM Warning ConfigHelper]     Failed to validate service credentials for account: %1

 

[9:46:16 PM Error BAMPortal] Error configuring
Error configuring BAM Query Web Service user domain\username(Microsoft.BizTalk.Bam.CfgExtHelper.PortalHelper)
This access control list is not in canonical form and therefore cannot be modified. (mscorlib)

 

How To Fix it

Since the initial prompted error is relatively confusing, the way to solve it is really straightforward, just grant access to  BizTalk service account  to the BAM folder under “Prog Files\BizTalk Server 2009”

You can check what is the correct account by looking at the entry:

[9:46:16 PM Error BAMPortal] Error configuring

within the error log file

Exception occurred when persisting state to the database

$
0
0

Since this exception can be catch in several scenarios the most commonly is when using dynamic ports.

To send something to a dynamic port the first thing before performing the send operation is to assign the Microsoft.XLANGs.BaseTypes.Address to the needed port.

DynamicPortName(Microsoft.XLANGs.BaseTypes.Address)=location;

and then assign the needed properties for connection (in this case, using the SOAP Adapter

MessageOut(SOAP.ClientConnectionTimeout )=  miliseconds;
MessageOut(SOAP.UseProxy) = true;
MessageOut(SOAP.ProxyAddress ) = "proxyname";
MessageOut(SOAP.ProxyUsername)  = “proxyusername";
MessageOut(SOAP.ProxyPassword ) = "proxypassword";
MessageOut(SOAP.ProxyPort ) = proxyport;

In this scenario, the location where the orchestration will send the consumer message, is retrieved using Business Rules (BR)  After performing some testing, everything went fine, but in some cases BizTalk raised a Microsoft.XLANGs.BaseTypes.PersistenceException exception. Digging in to the problem  i discovered that in this case the persistence exception was raised  when the executed BR returned Null as location value.

Why?

Well, i think this could be explained by the fact BizTalk always persists the state to the database in several cases, one of them when performing a send operation.  As in this case the location is unknown, BizTalk will rise a persistence exception since the exception is raised while trying to doing it  (before sending the message out)  which makes real sense: why to persist nothing if i even could not send it?

Purging TrackingDTA DB using terminator tool

$
0
0

To purge all the tracking DTADB using terminator tool follow these steps:

0. Disable global tracking

In Biztalk 2009 and earlier verions:

1  Open SQL Server Enterprise manager

2. Open 'BizTalkMgmtDb' database

3. Open 'adm_Group' table.

4. Update GlobalTrackingOption column to '0'

 

In BizTalk 201x you just need to do this accesing the settings of the BizTalk group



  1. Restart BizTalk Host Instances (this is just to apply the change of global tracking option)
  2. Wait 1-2 minutes with host instances working (this will ensure no new tracking data is generated)
  3. Stop all BizTalk hostinstances
  4. Stop SQL Server Agent
  5. Stop IIS in all BizTalk servers
  6. Stop any custom windows Service interacting with BizTalk applications.
  7. MANDATORY: Perform a FULL back UP of the BizTalk databases (in case something goes wrong you can restore the system)
  8. Run Terminator Tool. Select Delete option in the bottom buttons:


 

9.  Choose the action: Delete everything in the DTA.

10. Go to parameters tab and click the Execute button. This will purge DTADB. Once finished you should see the following message in the results tab:

Execution Output below:

Terminator Script Object has completed.



11. Activate  Global Tracking, reverting the action made in step 1

12. Take all the actions involved to start the BizTalk platform and test it. Ensure new DTA tracking data is generated.

Visual Studio 2013 “The application cannot start” message, when running as administrator and after update 3 installed.

$
0
0

 

I got a weird error when I updated my Visual Studio 2013 with the Update 3. When i try to run Visual Studio with the option “Run as administrator· i get the error message “The application cannot start

I don’t know the explanation for it but I sorted this out by:

  • Copy all the *.olb files located in  C:\Program Files (X86)\Common Files\Microsoft Shared\MSEnv
  • Paste them in the Ide visual estudio folder, in my case here: C:\Program Files (x86)\Microsoft Visual Studio 12.0\Common7\IDE

Lunch Visual Studio with Run as administrator and then it should work. If anyone knows why, please comment the post!

 

Thank you!

BizTalk: Monitoring tracking configuration

$
0
0

 

Introduction

This stored procedure will detect if tracking configuration is enabled in any BizTalk Artifacts like:

  • Orchestrations
  • Pipelines
  • Schemas
  • Send ports
  • Receive ports
  • Bussines rules

if tracking is enabled, it will raise a SQL Server Error. The idea of this sp, is to create a SQL Server agent job that calls this sp to create an event log alert with the error description.  Is very common that developers overwrite the tracking configuration in production for one of the following reasons:

  1. They are deploying a new version of the application (and the binding file is overwritten with the development settings)
  2. They are troubleshooting an issue, they enable tracking and they forgot to disable it.

Depending on the size of tracking this might impact perfomance negatively. In these cases, having a procedure to detect if tracking is enabled in some artifacts will help BizTalk administrators to practively change tracking settings.

Creating the SQL Server Agent Job

 

After you create the stored procedure, you just need to créate a SQL Server Agent Job with an T-SQL Step:

 

image

Enable the option “Write to the Windows Event log” under the Notifications section:

image

Save the Job and Run it. If your environment has any kind of tracking enabled, the job will fail like this:

image

Creating also the associated event:

image

Now, go to the job history and you will get the BizTalk artifacts that have tracking enabled:

image

Download the Code

You can download the code here, in TechNet code gallery

https://gallery.technet.microsoft.com/BizTalk-SQL-Server-stored-c8316895

This Code only includes the stored procedure, not the SQL Server Agent Job.

 

Code

USE [BizTalkMgmtDb]

GO

 

SET ANSI_NULLS ON

GO

SET QUOTED_IDENTIFIER ON

GO

– =============================================

– Author:       Agustín Mántaras

– Create date: 20/04/2015

– Description:   Stored procedure for monitoring BizTalk Server tracking

– =============================================

ALTER PROCEDURE [dbo].[MonitoringTracking]

 

AS

BEGIN

 

 

DECLARE @NumberOfItemsWithTracking as int

DECLARE @errorString as nvarchar(255)

DECLARE @item as nvarchar(255)

 

SET @errorString = ‘There are items with message body tracking enabled’

 

IF OBJECT_ID(‘tempdb..#TrackingItems’) IS NOT NULL

  DROP TABLE #TrackingItems

 

 

Create Table #TrackingItems (

Item Nvarchar(255) )

 

 

INSERT INTO #TrackingItems

SELECT [nvcName]

   

  FROM [BizTalkMgmtDb].[dbo].[bts_receiveport]

  Where nTracking > 0

 

 

INSERT INTO #TrackingItems

SELECT [nvcName]

   

  FROM [BizTalkMgmtDb].[dbo].[bts_sendport]

  Where nTracking > 0

 

 

INSERT INTO #TrackingItems

SELECT  strServiceName

      FROM [BizTalkMgmtDb].[dbo].[StaticTrackingInfo]

  where [ismsgBodyTrackingEnabled] <> 0 AND dtUndeploymentTime is null

 

 

 

 

SELECT @NumberOfItemsWithTracking = count (*)

      FROM #TrackingItems

 

 

 

  if (@NumberOfItemsWithTracking > 0)

  Begin

 

      declare Tracking_Cursor insensitive cursor for

      SELECT  Item

      FROM #TrackingItems

 

 

 

      open Tracking_Cursor

      fetch next from Tracking_Cursor into @item

      while @@fetch_status = 0

      begin

            SET @errorString = @errorString +  ‘ ## ‘ + @item

            fetch next from Tracking_Cursor into @item

      end

      RAISERROR(@errorString, 11, 1) WITH LOG

      DEALLOCATE Tracking_Cursor

  end

 

drop table #TrackingItems

 

 

 

END

BizTalk 2010 CU 7 installation might cause pipeline errors when using BAM, Warning!

$
0
0

 

As of 23/4/2015 there is an issue after you install BizTalk 2010 CU 7 and it is related to Pipeline errors when you use BAM tracking in BizTalk Server 2010 CU7

When you use the Business Activity Monitoring (BAM) tracking profile in Microsoft BizTalk Server 2010 Cumulative Update 7 (CU7), the following event entries for pipeline errors are logged in the Application log:

Log Name: Application
Source: BizTalk Server
Date: <Date> <Time>
Event ID: 5753
Task Category: BizTalk Server
Level: Error
Computer: <Computer Name>
Description:
A message received by adapter "FILE" on receive location "<Receive Location Name>" with
URI "<File Path>" is suspended.
 Error details: There was a failure executing the receive pipeline: "<Pipeline Name>" Source: "Pipeline "
Receive Port: "<Receive Port Name>" URI: "<File Path>" Reason: An error occurred when parsing
the incoming document: "Unexpected XML declaration. The XML declaration must be the first node in the
document, and no white space characters are allowed to appear before it. Line 61, position 16.".
 MessageId: {<GUID>}
InstanceID: {<GUID>}

Log Name: Application
Source: BizTalk Server
Date: <Date> <Time>
Event ID: 5719
Task Category: BizTalk Server
Level: Error
Computer: <Computer Name>
Description:There was a failure executing the receive pipeline: "<Pipeline Name>" Source: "Pipeline "
Receive Port: "<Receive Port Name>" URI: "<File Path>" Reason: An error occurred when parsing
the incoming document: "Unexpected XML declaration. The XML declaration must be the first node in the
document, and no white space characters are allowed to appear before it. Line 61, position 16."

BizTalk 2010 CU 7: http://support.microsoft.com/kb/3021712

Therfore after installing the CU 7, please install the following FIX also:

“Pipeline errors” http://support.microsoft.com/kb/3047071


MBV is being deprecated

$
0
0

 

As of 13/7/2015, the MessageBoxViewer aka MBV is being deprecated and no more new updates will be available for download.

As stated in JP’s blog the MBV has not been updated since January 2015.

As you might already aware of, MBV is now transformed in to a more comprehensive and feature rich tool known as BizTalk Health Monitor aka BHM. The latest versión is 3.1.

Enjoy!

Clustered Virtual disks (vmdk) are not supported in Multi host VM ware configuration

$
0
0

 

A clústercluster of virtual machines across physical hosts (also known as a cluster across boxes) protects against software failures and hardware failures on the physical machine by placing the cluster nodes on separate ESXi hosts. This configuration requires shared storage on an Fibre Channel SAN for the quorum disk.

image

 

However , as is reflected in the following screenshot extracted directly from the VM ware support site, running VM ware machines with clustered disks is not supported in MultiHost deployment if Clustered cirtual disks (vmdk) are used.

image

 

Information extracted directly from VMware support site: http://pubs.vmware.com/vsphere-51/index.jsp?topic=%2Fcom.vmware.vsphere.mscs.doc%2FGUID-E794B860-E9AB-43B9-A6D0-F7DE222695A1.html

For obvious reasons then, if you cannot go for RDM disks you should guarantee that your MCS cluster runs only in one physical host.

 

image

BizTalk 2010 cu8 available

BizTalk 2013 cu 3 Available

SQL Server Azure virtual machines do not support Failover Cluster Instances

$
0
0

 

As of 29/10/2015 BizTalk Server is not supported with Failover Cluster instances in Windows Azure as it is reflected here:

https://support.microsoft.com/en-us/kb/2721672

If your solution requires high availability using SQL Server FCI, the BizTalk Server Azure virtual machines should not be used. If your solution does not require high availability by using SQL Server FCI, the BizTalk Server Azure virtual machines may satisfy your solution needs.

Triste

Event ID: 10536 ENTSSO Bad Data issue

$
0
0

 

This is a known issue in Enterprise single sign on service that may occur under any of the following circumstances:

  • When you’re setting up an Enterprise SSO cluster
  • During enterprise SSO disaster recovery
  • When you’re promoting an Enterprise SSO server to the Master Secret Server (MSS)
  • During migration from an earlier version of Enterprise SSO
  • During an in-place upgrade from an earlier version of Enterprise SSO
  • When you’re performing multiple Enterprise SSO V5 restore and backup sequences

if you are under this issue, you will get the following event log entry:

Event ID: 10536
Source: ENTSSO
Level: Warning
SSO AUDIT Function: GetConfigInfo ({11111111-6055-4cda-89CD-389E8A2B1640}) Tracking ID: b084f15b-43fd-474e-a075-398943753c91 Client Computer: computer name (executable name:PID) Client User: username Application Name: application name Error Code: 0x80090005, Bad Data.

 

The following hot fix is available and it will sort the problem out:

https://support.microsoft.com/en-us/kb/3000847

However after you install this one you could have also a memory leak problem as it is described here:

https://support.microsoft.com/en-us/kb/3062831

As far as I understand if you install only the second one, this one:

https://support.microsoft.com/en-us/kb/3062831

Will sort out both problems.

BizTalk 2016 coming in Q4 2016!

$
0
0

 

As of 11/1/2016, Microsoft has published the Integration roadmap. You can download the PDF file from here:

https://www.microsoft.com/en-us/download/confirmation.aspx?id=50408

As it is stated in this document, BizTalk server Beta will come at some point in Q3. Later in Q4, RTM version will be available WW.

As key planned features we could expect:

  • Platform alignment – SQL 2016, Windows Server 2016, Office 2016 and latest release of Visual Studio. 
  • BizTalk support for SQL 2016 AlwaysOn Availability Groups both on-premises and in Azure IaaS to provide high availability (HA). Finally! )
  • HA production workloads supported in Azure IaaS. 
  • Tighter integration between BizTalk Server and API connectors to enable BizTalk Server to consume our cloud connectors such as SalesForce.Com and O365 more easily. 
  • Numerous enhancements including o Improved SFTP adapter,  o Improved WCF NetTcpRelay adapter with SAS support o WCF-SAP adapter based on NCo (.NET library) o SHA2 support

 

Along with BizTalk Server, we could expect also major updates and releases in the following integration areas:

image

 

References: https://www.microsoft.com/en-us/download/confirmation.aspx?id=50408


BizTalk 2013R2 CU2 available for download

$
0
0

 

BizTalk 2013 R2 CU2 is now available for installation. You can find it here:

https://support.microsoft.com/en-us/kb/3119352

UPDATE 21/1/2016 The following described warning has been fixed and now the CU updates the BizTalk  binaries with out any known issues:

Warning: There was an undocumented issue with this CU. After installing it you might get the following exception:

System.TypeLoadException: Method ‘get_UseXSLTransform’ in type Name of your type from assembly ‘name of your assemblydoes not have an implementation.

   at System.RuntimeTypeHandle.GetTypeByName(String name, Boolean throwOnError, Boolean ignoreCase, Boolean reflectionOnly, StackCrawlMarkHandle stackMark, IntPtr pPrivHostBinder, Boolean loadTypeFromPartialName, ObjectHandleOnStack type)

   at System.RuntimeTypeHandle.GetTypeByName(String name, Boolean throwOnError, Boolean ignoreCase, Boolean reflectionOnly, StackCrawlMark& stackMark, IntPtr pPrivHostBinder, Boolean loadTypeFromPartialName)

   at System.RuntimeType.GetType(String typeName, Boolean throwOnError, Boolean ignoreCase, Boolean reflectionOnly, StackCrawlMark& stackMark)

   at System.Type.GetType(String typeName)

If you get this the only way to fix it is by redeploying the assembly again (no need to redeploy the BizTalk application AFAK) Microsoft is working on it to fix it as soon as possible.

Happy and safe update :-)

Cumulative update package 3 for BizTalk Server 2013 R2

BizTalk Server 2016 The Message Engine

BizTalk: PowerShell script to provide high availability for single host instances (FTP,POP3…)

$
0
0

One of the most common BizTalk architectures I have seen across customers is as follows:

serversWith this configuration, BizTalk server is deployed using a high availability configuration that will work for most of cases in which the environment is receiving information using, for instance, the WCF http binding adapter only. The NLB (hardware or software) is spreading the requests among all the BizTalk servers in the group.

For the database layer, most of customers provide high availability setting up an MCS cluster (virtual or physical) and typically they also provide HA for the SQL Server Agent service (or at least they must) , action that opens an interesting option to solve the most common problem when using the FTP BizTalk receiving adapter:

Having more than one receiving BizTalk host instance for the FTP adapter can cause duplicated messages.

The FTP protocol does not blocks the file, therefore, having more that one host instance configured to process receive locations could cause a duplicated message.  For instance, if we have a look at our architecture it can happen that host instance on server 1 will go to pick up files to the FTP server. Because host instances are fully agnostic of what the other host instances in the group are doing, the one running in server 2 might go also to the FTP server at the same time than Server 1. If the file is bigger enough BizTalk will pick up the same message twice. To avoid this issue we normally have two options:

  1. Create an MCS cluster at the BizTalk layer and cluster the receiving FTP host instance (preferred option)
  2. Disable all the host instances from starting and enabling it in one server only. With this action, just one host instance will be executing and now BizTalk will not get duplicated messages (not recommended as we are having manual HA for FTP host instances)

So what do we do if we cannot implement BizTalk clustering ?

As Microsoft always recommends clustering the SQL Server Agent you could leverage on SQL Server jobs to execute a Powershell script that will check BizTalk Services status remotely.

Have a look at the following architecture:

servers2

The PowerShell script that will run under the SQL Server Agent and it will ensure that your FTP BizTalk hostinstance is running only in 1 server. If that scripts runs and finds out that there are more hostinstances running, it will shutdown those processes and will enable the hostinstnace only in 1 server.

 

Description of the script
This Powershell script gives a mechanism to provide High availability for windows services, when there is no cluster set up (or when it cannot be used). As a BizTalk engineer, I visited many customers that need to provide HA
to BizTalk FTP hostinstances and they did not set up an MS cluster across the BizTalk group.

Prerequisites

The SQL Server account that you use to execute this job must be part of the BizTalk Administrator group because and it needs to have permissions to start and stop services in all of your BizTalk Servers.

Paramenters.

ServiceName
This will be the name of the windows Service that you want to provide HA.Don’t forget to add the escape character for the BizTalk Services name, as they have the $ symbol, like in this “BTSSvc`$BizTalkServerApplication” .

ServerList
This is the place in which you have to provide the Server Names that will be part of the HA configuration.

ServerStatusList
This is the Server Status List. By status here we refer to the status of the service in all of the Servers that are part of the $ServerList array. The number of items here should be the same than in the $ServerList array.

DefaultServer
Change this parameter if you want a different default server. This will be the position in the $ServerList array (So zero, for the first server). The script will know which server should be used as the Default one in the HA configuration. So it will always try to start the service in this Server First.

LogFilePath
Yes! the script is logging information. The Script will be logging all the information to the file specified here.

Example of parameters:

$ServiceName = “BTSSvc`$BizTalkServerApplication”

$ServerList =@(“ServerA”,”ServerB”,”ServerC”,”ServerD”)

$ServerStatusList=@(0,0,0,0) #This is the Server Status List. By status here we refer to the status of the service in all of the Servers that are part of the $ServerList array. The number of items here should be the same than in the $ServerList array.

$DefaultServer = 1 #Change this parameter if you want a different default server. This will be the position in the $ServerList array (So zero, for the first server). The script will know which server should be used as the Default one in the HA configuration. So it will always try to start the service in this Server First.

$MoreThanOneServiceActive= 0 #If there are more than one service active, we change this to 1, as the objective of this script is to ensure only one instance of the service is running across all the Servers in
$ServerList.
$LogFilePath=”C:\Logs\PowerShellLog.log” #the Script will be logging all the information to the file specified here.

 

Conclusion

After you adapt the script parameters within the code, you can now create the SQL Server agent job that will call the script.  After the changes, your architecture would look something similar to the following diagram:

ftp-ha

Downloading the code:

You can download the code from MSDN code gallery here:

https://gallery.technet.microsoft.com/BizTalk-PowerShell-script-a20d3222

Enjoy!

BizTalk Server 2016 notes. Advanced development techniques

$
0
0

I wrote the BizTalk Server Notes series based on information I gathered from my blog itself  and, what I think is more important also, from the field experience. The series will gain in complexity so, read the introduction section before getting into it.

The latest one published is called Advanced techniques. It is not an introductory book as it assumes you have some BizTalk knowledge and strong .NET knowledge

My intention was to show you how you can create advance BizTalk Server Solutions. You will learn about the following topics:

1. Create your own BizTalk Server performance counters.

2. Developing side by side BizTalk Server solutions.

3. Applying versioning to BizTalk Server projects.

4. Securing data using the ENTSSO database.

5. Fix the SSO application snap in for BizTalk Server 2016.

6. Trace your BizTalk Server solutions using implementing Windows Tracing.

7. Query all BizTalk ETW traces using Debug view or the CAT Instrumentation Controller Tool.

8. Start and stop ETW traces.

9. Developing Custom Pipeline components.

10. Unit Testing BizTalk Server 2016 solutions using Visual Studio 2015.

11. Load Test for BizTalk Server using Visual Studio.

12. Examining the Load Test Output and export the report to Excel.

Having a solid foundation on these topics will allow you to create robust BizTalk Server solutions.

These series are focused in BizTalk development techniques, but the first one that is more generalist. However if you are a BizTalk Administrator and want to learn about BizTalk development, these are also your book series.

Happy reading!

You can download it from Amazon Here:  https://www.amazon.com/dp/B06XHMXMX4/ref=sr_1_5?ie=UTF8&qid=1489080663&sr=8-5&keywords=biztalk+2016

Viewing all 25 articles
Browse latest View live


Latest Images

<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>