BizTalkで受信場所のオンとオフを自動化する方法はありますか?この種のものには、ある種のAPIなどがあるはずです。私はC#で作業したいのですが、WMIまたはある種のスクリプトでも機能します。
4 に答える
ExplorerOM 以外にも、WMI を使用して受信場所を有効/無効にする (および送信ポートを制御する) こともできます。
興味があれば、ここでこれらのことを行う方法を示すサンプル PowerShell スクリプトがあります。
解決策を見つけました。Microsoft.BizTalk.ExplorerOM.dll が必要だったようです。BizTalk のドキュメントからの抜粋を次に示します。
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);
}
}
}
}
1 つの注意点として、この dll は 64 ビットをサポートしていないようです。私は単純なユーティリティを書いているだけなので、大したことではありません (32 ビットとしてコンパイルするだけです) が、注意が必要です。
あなたが解決策を見つけたように見えることをうれしく思います。
Powershell、ExplorerOM、および BizTalk API を使用して BizTalk アーティファクトをさまざまなステータスに設定する同様の代替手段について言及したいと思います。
それらの 1 つである場所を受け取ります。
スクリプトは XML 構成ファイルを受け入れます。このファイルには、アーティファクトとそれらを設定するステータスを一覧表示します。
スクリプトは Microsoft Script Center に公開されています: http://gallery.technet.microsoft.com/scriptcenter/Set-Artifact-Status-270f43a0
Alhambraeidos のコメントに応えて。以下は、リモートで受信場所を無効にするために Windows アプリで使用したコードの抜粋です。
/// <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();
}
「場所」と呼ばれる受信場所のディクショナリを作成していたように、省略したものがあることに気付くでしょうが、アイデアを得ることができるはずです。このパターンは、操作するすべての BizTalk オブジェクトにほぼ当てはまります。