¿Hay una manera de automatizar convertir una ubicación de recepción de BizTalk o desactivar a través de código?

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

  •  19-09-2019
  •  | 
  •  

Pregunta

¿Hay una manera de automatizar el encendido o apagado de una ubicación de recepción en BizTalk? Parece que debe haber algún tipo de API o alguna para este tipo de cosas. Yo preferiría trabajar en C #, pero WMI o algún tipo de script trabajaría también.

¿Fue útil?

Solución

Además ExplorerOM, como usted ha descubierto, también puede activar / desactivar las ubicaciones de recepción (y el control de los puertos de envío) mediante WMI.

Tengo un script de PowerShell de ejemplo que muestra cómo hacer esas cosas aquí , si está interesado.

Otros consejos

he encontrado una solución. Parece ser que el Microsoft.BizTalk.ExplorerOM.dll es lo que quería. He aquí un extracto de la documentación de BizTalk que debe recibir cualquier otra persona comenzó:

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

Una advertencia, al parecer, esta DLL no es compatible con 64 bits. Ya que sólo escribo una sencilla utilidad que no es un gran problema para mí (justo como la compilación de 32 bits), pero es algo a tener en cuenta.

Me alegra ver que parecen haber encontrado una solución.

quería mencionar una alternativa similar que también se usa Powershell, ExplorerOM, y la API de BizTalk para establecer artefactos de BizTalk a diversos estados.

Ubicaciones de recepción es uno de ellos.

El script acepta archivos de configuración XML, en las que una lista de los artefactos y qué estatus que le gustaría ponerlos a.

El guión ha sido publicada a Microsoft Script Center: http://gallery.technet.microsoft.com/scriptcenter/Set-Artifact -Estado-270f43a0

En respuesta al comentario Alhambraeidos. He aquí algunos extractos es de código que utilicé en una aplicación de Windows para desactivar una ubicación de recepción remota:

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

Se dará cuenta de que hay una cierta Salí fuera, como yo estaba creando un diccionario de ubicaciones de recepción llamadas "ubicaciones", pero usted debería ser capaz de obtener la idea. El patrón se mantiene más o menos cierto para cualquier objeto de BizTalk que desea interactuar.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top