2009-10-04 4 views

Antwort

8

Neben ExplorerOM können Sie, wie Sie herausgefunden haben, auch Empfangseinstellungen (und Steuerung von Sendeports) mit WMI aktivieren/deaktivieren.

Ich habe ein Beispiel PowerShell-Skript, das zeigt, wie Sie diese Dinge tun here, wenn Sie interessiert sind.

+0

Großartig, das ist definitiv gültig. Je mehr Optionen, desto besser. Danke Tomasr. –

2

Ich fand eine Lösung. Es scheint, dass die Microsoft.BizTalk.ExplorerOM.dll das ist, was ich wollte. Hier ist ein Auszug aus der BizTalk-Dokumentation, die alle anderen loszulegen sollte:

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

Ein Nachteil, anscheinend diese DLL nicht 64-Bit unterstützt. Da ich nur ein einfaches Dienstprogramm schreibe, ist es keine große Sache für mich (nur kompilieren als 32-Bit), aber es ist etwas zu beachten.

+0

kann ich für Zugriff verwenden remote Biztalk Server ?? – Kiquenet

+0

Hey Alhambraeidos, wenn ich dich richtig verstehe, kannst du es. Ich habe dies verwendet, um eine kleine Windows-App zu erstellen, mit der ich einen Empfangsort auswählen und ausschalten kann. –

0

Als Antwort auf Alhambraeidos Kommentar. Hier sind einige Auszüge von Code, den ich in einer Windows-Anwendung verwendet, um einen Remote-Receive Location zu deaktivieren:

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

Sie werden feststellen, dass es einige, die ich ausgelassen, als würde ich ein Wörterbuch der Empfangsspeicherort namens „Orte zu schaffen ", aber Sie sollten in der Lage sein, die Idee zu bekommen. Das Muster trifft ziemlich genau auf jedes BizTalk-Objekt zu, mit dem Sie interagieren möchten.

1

Schön zu sehen, dass Sie eine Lösung gefunden haben.

Wollte eine ähnliche Alternative erwähnen, die auch Powershell, ExplorerOM und die BizTalk-API verwendet, um BizTalk-Artefakte zu verschiedenen Status festzulegen.

Empfangsbereiche sind einer davon.

Das Skript akzeptiert XML-Konfigurationsdateien, in denen Sie die Artefakte auflisten und auf welchen Status Sie sie setzen möchten.

Das Skript zu Microsoft Script Center veröffentlicht wurde: http://gallery.technet.microsoft.com/scriptcenter/Set-Artifact-Status-270f43a0

Verwandte Themen