Есть ли способ автоматизировать включение или выключение местоположения приема BizTalk с помощью кода?
-
19-09-2019 - |
Вопрос
Есть ли способ автоматизировать включение или выключение места получения в BizTalk?Кажется, для такого рода вещей должен быть какой-то API или что-то в этом роде.Я бы предпочел работать на C#, но WMI или какой-нибудь скрипт тоже подойдут.
Решение
Помимо ExplorerOM, как вы узнали, вы также можете включать/отключать местоположения получения (и управлять портами отправки) с помощью WMI.
У меня есть образец сценария PowerShell, который показывает, как это делать. здесь, если вы заинтересованы.
Другие советы
Я нашел решение.Похоже, что мне нужен Microsoft.BizTalk.ExplorerOM.dll.Вот выдержка из документации BizTalk, которая может помочь любому начать работу:
using System;
using Microsoft.BizTalk.ExplorerOM;
public static void EnumerateOrchestrationArtifacts()
{
// Connect to the local BizTalk Management database
BtsCatalogExplorer catalog = new BtsCatalogExplorer();
catalog.ConnectionString = "Server=.;Initial Catalog=BizTalkMgmtDb;Integrated Security=SSPI;";
// Enumerate all orchestrations and their ports/roles
Console.WriteLine("ORCHESTRATIONS: ");
foreach(BtsAssembly assembly in catalog.Assemblies)
{
foreach(BtsOrchestration orch in assembly.Orchestrations)
{
Console.WriteLine(" Name:{0}\r\n Host:{1}\r\n Status:{2}",
orch.FullName, orch.Host.Name, orch.Status);
// Enumerate ports and operations
foreach(OrchestrationPort port in orch.Ports)
{
Console.WriteLine("\t{0} ({1})",
port.Name, port.PortType.FullName);
foreach(PortTypeOperation operation in port.PortType.Operations)
{
Console.WriteLine("\t\t" + operation.Name);
}
}
// Enumerate used roles
foreach(Role role in orch.UsedRoles)
{
Console.WriteLine("\t{0} ({1})",
role.Name, role.ServiceLinkType);
foreach(EnlistedParty enlistedparty in role.EnlistedParties)
{
Console.WriteLine("\t\t" + enlistedparty.Party.Name);
}
}
// Enumerate implemented roles
foreach(Role role in orch.ImplementedRoles)
{
Console.WriteLine("\t{0} ({1})",
role.Name, role.ServiceLinkType);
}
}
}
}
Один нюанс, видимо эта dll не поддерживает 64 бит.Поскольку я пишу только простую утилиту, для меня это не имеет большого значения (просто компилируется как 32-битная версия), но об этом следует знать.
Рад видеть, что вы, кажется, нашли решение.
Хотел упомянуть аналогичную альтернативу, которая также использует Powershell, ExplorerOM и BizTalk API для установки различных статусов артефактов BizTalk.
Получение локаций является одним из них.
Сценарий принимает файлы конфигурации XML, в которых вы перечисляете артефакты и какой статус вы хотите им присвоить.
Сценарий опубликован в Центре сценариев Microsoft:http://gallery.technet.microsoft.com/scriptcenter/Set-Artifact-Status-270f43a0
В ответ на комментарий Альгамбреидоса.Вот несколько выдержек кода, который я использовал в приложении Windows для удаленного отключения места получения:
/// <summary>
/// Gets or sets the biz talk catalog.
/// </summary>
/// <value>The biz talk catalog.</value>
private BtsCatalogExplorer BizTalkCatalog { get; set; }
/// <summary>
/// Initializes the biz talk artifacts.
/// </summary>
private void InitializeBizTalkCatalogExplorer()
{
// Connect to the local BizTalk Management database
BizTalkCatalog = new BtsCatalogExplorer();
BizTalkCatalog.ConnectionString = "server=BiztalkDbServer;database=BizTalkMgmtDb;integrated security=true";
}
/// <summary>
/// Gets the location from biz talk.
/// </summary>
/// <param name="locationName">Name of the location.</param>
/// <returns></returns>
private ReceiveLocation GetLocationFromBizTalk(string locationName)
{
ReceivePortCollection receivePorts = BizTalkCatalog.ReceivePorts;
foreach (ReceivePort port in receivePorts)
{
foreach (ReceiveLocation location in port.ReceiveLocations)
{
if (location.Name == locationName)
{
return location;
}
}
}
throw new ApplicationException("The following receive location could not be found in the BizTalk Database: " + locationName);
}
/// <summary>
/// Turns the off receive location.
/// </summary>
/// <param name="vendorName">Name of the vendor.</param>
public void TurnOffReceiveLocation(string vendorName)
{
ReceiveLocation location = Locations[vendorName].ReceiveLocation;
location.Enable = false;
BizTalkCatalog.SaveChanges();
}
Вы заметите, что кое-что я упустил, например, я создавал словарь мест приема под названием «Местоположения», но вы должны понять эту идею.Этот шаблон в значительной степени справедлив для любого объекта BizTalk, с которым вы хотите взаимодействовать.