using System;
using System.Collections.Generic;
using System.Text;
//Add a reference to Microsoft.BizTalk.ExplorerOM.dll
usingMicrosoft.BizTalk.ExplorerOM;
using Microsoft.Win32;
namespace RevertBizTalkTracking
{
class Program
{
static void Main()
{
Console.WriteLine();
try
{
BtsCatalogExplorerbtscat = new BtsCatalogExplorer();
Console.WriteLine(DateTime.Now.ToLongTimeString() +
" Connecting to local BizTalk server");
string btsConnectionString = GetBTSConnectionString();
if (btsConnectionString != string.Empty)
{
btscat.ConnectionString = btsConnectionString;
Console.WriteLine(DateTime.Now.ToLongTimeString() +
" Looping through receive ports");
//Loop through all receive ports
foreach (ReceivePortrcvport inbtscat.ReceivePorts)
{
//skips the EDI port created in 200 6R2
if(rcvport.Tracking != 0 & rcvport.Name
!= "BatchControlMessageRecvPort")
{
Console.WriteLine(" " + DateTime.Now.ToLongTimeString()
+ " Port "+ rcvport.Name + " with tracking ("
+ rcvport.Tracking.ToString()
+ ") enabled. Changing port back to default.");
//Sets it back to the default value
rcvport.Tracking = 0;
}
}
//Loop through all send ports
Console.WriteLine(DateTime.Now.ToLongTimeString()
+ " Looping through send ports");
foreach (SendPortsndport inbtscat.SendPorts)
{
if(sndport.Tracking != 0)
{
Console.WriteLine(" " + DateTime.Now.ToLongTimeString()
+ " Port "+ sndport.Name + " with tracking ("
+ sndport.Tracking.ToString()
+ ") enabled. Changing port back to default.");
//Sets it back to the default value
sndport.Tracking = 0;
}
}
//Loop through all orchestrations
Console.WriteLine(DateTime.Now.ToLongTimeString()
+ " Looping through orchestrations");
foreach (BtsAssemblybtsasm inbtscat.Assemblies)
{
foreach (BtsOrchestrationorch inbtsasm.Orchestrations)
{
if(orch.Tracking != (OrchestrationTrackingTypes.ServiceStartEnd
| OrchestrationTrackingTypes.MessageSendReceive
| OrchestrationTrackingTypes.OrchestrationEvents))
{
Console.WriteLine(" " + DateTime.Now.ToLongTimeString()
+ " Orchestration "+ orch.FullName + " with tracking ("
+ orch.Tracking.ToString()
+ ") enabled. Changing orchestration back to default.");
//Sets it back to the default values
orch.Tracking = (OrchestrationTrackingTypes.ServiceStartEnd
| OrchestrationTrackingTypes.MessageSendReceive
| OrchestrationTrackingTypes.OrchestrationEvents);
}
}
}
//Apply changes
btscat.SaveChanges();
Console.WriteLine("Finished! Press any key to exit.");
Console.Read();
}
}
catch (Exception ex)
{
Console.WriteLine("Exception raised: " + ex.Message);
Console.WriteLine("Press any key to exit.");
Console.Read();
}
}
//Creates the connection string based on values in the registry
//From Carlos Medina's blog - http://blogs.devdeo.com/carlos.medina/PermaLink,guid,981d7ca5-a11a-452b-90d5-a535d04a64bf.aspx
public static string GetBTSConnectionString()
{
string connection = string.Empty;
string server = string.Empty;
string database = string.Empty;
using (RegistryKeykeyBts =
Registry.LocalMachine.OpenSubKey(@"SOFTWARE\Microsoft\BizTalk Server\3.0\Administration"))
{
server = keyBts.GetValue("MgmtDBServer") as string;
if (server == null)
server = string.Empty;
database = keyBts.GetValue("MgmtDBName") as string;
if (database == null)
database = string.Empty;
}
if (server == string.Empty || database == string.Empty)
{
Console.WriteLine("Error getting connection details from registry:");
Console.WriteLine(@"SOFTWARE\Microsoft\BizTalk Server\3.0\Administration\MgmtDBServer");
Console.WriteLine(@"SOFTWARE\Microsoft\BizTalk Server\3.0\Administration\MgmtDBName");
}
else
{
connection = "server=" + server + ";database=" + database +
";integrated security = true;";
}
return connection;
}
}
}