Czy istnieje sposób automatyzacji włączania i wyłączania opcji Odbieranie lokalizacji w programie BizTalk? Wygląda na to, że powinien istnieć jakiś rodzaj API lub coś takiego dla tego rodzaju rzeczy. Wolałbym pracować w języku C#, ale działałby również WMI lub jakiś skrypt.Czy istnieje sposób automatyzacji włączania lub wyłączania lokalizacji odbierania BizTalk za pomocą kodu?
Odpowiedz
Oprócz ExplorerOM, jak już się dowiedziałeś, możesz także włączać/wyłączać odbierane lokalizacje (i sterować portami wysyłania) za pomocą WMI.
Mam przykładowy skrypt PowerShell, który pokazuje, jak robić te rzeczy here, jeśli jesteś zainteresowany.
Znalazłem rozwiązanie. Wygląda na to, że Microsoft.BizTalk.ExplorerOM.dll jest tym, co chciałem. Oto fragment z dokumentacji BizTalk że powinien dostać ktoś inny zaczął:
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);
}
}
}
}
Jedno zastrzeżenie, widocznie ten dll nie obsługuje 64 bit. Ponieważ piszę tylko proste narzędzie, nie jest to dla mnie wielka sprawa (tylko kompilowanie jako 32-bitowe), ale jest to coś, o czym należy pamiętać.
mogę używać do zdalnego dostępu do BizTalk Server ?? – Kiquenet
Hej Alhambraeidos, jeśli dobrze cię rozumiem, tak, możesz. Użyłem tego do stworzenia małej aplikacji Windows, która pozwoli mi wybrać lokalizację odbioru i ją wyłączyć. –
W odpowiedzi na komentarz Alhambraeidos. Tutaj jest kilka fragmentów kodu I wykorzystywane w aplikacji Windows, aby wyłączyć odbioru Lokalizacja zdalnie:
/// <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();
}
Zauważysz, że istnieje jakiś Wyszedłem na zewnątrz, tak jak było stworzenie słownika otrzymują miejscach nazwie „Lokalizacje ", ale powinieneś być w stanie uzyskać pomysł. Wzór prawie odnosi się do dowolnego obiektu BizTalk, z którym chcesz się komunikować.
Cieszę się, że znalazłeś rozwiązanie.
Chciałbym wymienić podobną alternatywę, która również używa Powershell, ExplorerOM i BizTalk API do ustawiania artefaktów BizTalk w różnych stanach.
Otrzymuj lokalizacje będące jednym z nich.
Skrypt przyjmuje pliki konfiguracyjne XML, w których wymienione są artefakty i status, w którym mają być ustawione.
Skrypt został opublikowany Microsoft Script Center: http://gallery.technet.microsoft.com/scriptcenter/Set-Artifact-Status-270f43a0
Świetnie, jest to zdecydowanie poprawne. Im więcej opcji, tym lepiej. Dzięki tomasr. –