C'è un modo per automatizzare trasformando un BizTalk indirizzo di ricezione o disattivare tramite il codice?

StackOverflow https://stackoverflow.com/questions/1515305

  •  19-09-2019
  •  | 
  •  

Domanda

C'è un modo per automatizzare l'accensione o lo spegnimento di un indirizzo di ricezione in BizTalk? Sembra che ci dovrebbe essere una sorta di API o qualcosa del genere per questo genere di cose. Io preferirei lavorare in C #, ma WMI o qualche tipo di script dovrebbe funzionare.

È stato utile?

Soluzione

Oltre ExplorerOM, come hai scoperto, è anche possibile attivare / disattivare la ricevono posizioni (e controllo Invia porte) usando WMI.

Ho uno script PowerShell di esempio che mostra come fare quelle cose qui , se siete interessati.

Altri suggerimenti

ho trovato una soluzione. Sembra che il Microsoft.BizTalk.ExplorerOM.dll è quello che volevo. Ecco un estratto dalla documentazione di BizTalk che dovrebbe iniziare chiunque altro:

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);
            }
        }
    }
}

Un avvertimento, a quanto pare questa DLL non supporta 64 bit. Dal momento che sto scrivendo solo una semplice utility non è un grosso problema per me (solo la compilazione a 32 bit), ma è qualcosa di essere a conoscenza.

Sono contento di vedere che ti sembra di aver trovato una soluzione.

voluto citare un'alternativa simile che utilizza anche Powershell, ExplorerOM, e l'API BizTalk per impostare artefatti BizTalk a diversi stati.

indirizzi di ricezione essere uno di loro.

Lo script accetta file di configurazione XML, dove elencare i manufatti e quale status che si desidera impostare loro di.

Lo script è stato pubblicato a Microsoft Script Center http://gallery.technet.microsoft.com/scriptcenter/Set-Artifact -Status-270f43a0

In risposta al Alhambraeidos commento. Ecco alcuni estratti è di codice che ho usato in un'applicazione di Windows per disabilitare un indirizzo di ricezione a distanza:

    /// <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();
    }

Si noterà che v'è una certa ho lasciato fuori, come stavo creando un dizionario di indirizzi di ricezione chiamate "Luoghi", ma si dovrebbe essere in grado di ottenere l'idea. Il modello tiene praticamente vero per qualsiasi oggetto BizTalk che si desidera interagire con.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top