2009-10-04 8 views

Respuesta

8

Además de ExplorerOM, como has descubierto, también puedes activar/desactivar las ubicaciones de recepción (y controlar los puertos de envío) usando WMI.

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

+0

Genial, esto es definitivamente válido. Cuantas más opciones, mejor. Gracias tomasr. –

2

Encontré una solución. Parece 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 creados:

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. Como solo estoy escribiendo una utilidad sencilla, no es un gran problema para mí (solo compilar como de 32 bits), pero es algo de lo que hay que estar consciente.

+0

puedo utilizar para acceder de forma remota a BizTalk Server ?? – Kiquenet

+0

Hola Alhambraeidos, si te entiendo correctamente, sí puedes. Lo usé para crear una pequeña aplicación de Windows que me permite seleccionar una ubicación de recepción y desactivarla. –

0

En respuesta al comentario Alhambraeidos. He aquí es algunos fragmentos 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 recibir llamadas "Ubicaciones ", pero deberías ser capaz de entender la idea. El patrón es más o menos cierto para cualquier objeto de BizTalk con el que desee interactuar.

1

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

Quería mencionar una alternativa similar que también utiliza Powershell, ExplorerOM y la API de BizTalk para establecer los artefactos de BizTalk en varios estados.

Reciba las ubicaciones siendo una de ellas.

La secuencia de comandos acepta archivos de configuración XML, donde enumera los artefactos y el estado en el que desea establecerlos.

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

Cuestiones relacionadas