2009-10-04 26 views

Odpowiedz

8

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.

+0

Świetnie, jest to zdecydowanie poprawne. Im więcej opcji, tym lepiej. Dzięki tomasr. –

2

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ć.

+0

mogę używać do zdalnego dostępu do BizTalk Server ?? – Kiquenet

+0

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ć. –

0

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ć.

1

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