Есть ли способ автоматизировать включение или выключение BizTalk Receive Location с помощью кода? - PullRequest
6 голосов
/ 04 октября 2009

Есть ли способ автоматизировать включение или выключение местоположения получения в BizTalk? Похоже, что для такого рода вещей должен быть какой-то API или что-то подобное. Я бы предпочел работать в C #, но WMI или какой-то другой скрипт тоже подойдут.

Ответы [ 4 ]

9 голосов
/ 05 октября 2009

Помимо ExplorerOM, как вы выяснили, вы также можете включать / отключать местоположения приема (и управлять портами отправки) с помощью WMI.

У меня есть пример скрипта PowerShell, который показывает, как это сделать здесь , если вам интересно.

2 голосов
/ 04 октября 2009

Я нашел решение. Похоже, что 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-битной компиляции), но об этом нужно знать.

1 голос
/ 26 сентября 2013

Рад видеть, что вы, кажется, нашли решение.

Хотелось бы упомянуть аналогичную альтернативу, которая также использует Powershell, ExplorerOM и API BizTalk для установки артефактов BizTalk на различные состояния.

Получение Места, являющиеся одним из них.

Сценарий принимает файлы конфигурации XML, в которых вы перечисляете артефакты и какой статус вы хотели бы им установить.

Сценарий был опубликован в Центре сценариев Microsoft: http://gallery.technet.microsoft.com/scriptcenter/Set-Artifact-Status-270f43a0

0 голосов
/ 28 января 2011

В ответ на комментарий Альгамбраидоса. Вот некоторые выдержки из кода, который я использовал в приложении 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, с которым вы хотите взаимодействовать.

...