本文是对博文《BizTalk: 使用 WMI 创建WCF-NetMsmq 接收端口和发送端口》的改进,以实现通过远程方式创建 BizTalk 接收端口和发送端口。 主意,当使用这种模式时,代码中的远程机器名不能和本地机器的名称重复。 using System; using System.Management; namespace TestWMI { class Program { static void Main(string[] args) { CreateRP("My RP"); CreateRL("My RL", "net.msmq://localhost/test1", "My RP"); CreateSP("My SP", "net.msmq://localhost/test2"); } // Connect to the BizTalk WMI ManagementClass on the remote machine static ManagementClass GetManagementClass(string machineName, string userName, string password, string BizTalkClass) { ConnectionOptions connOps = new ConnectionOptions(); connOps.Username = userName; connOps.Password = password; ManagementScope scope = new ManagementScope(@"//" + machineName + @"/root/MicrosoftBizTalkServer", connOps); ManagementPath path = new ManagementPath(BizTalkClass); ManagementClass mgmtClass = new ManagementClass(scope, path, null); return mgmtClass; } // Create Receive Port static void CreateRP(string receivePortName) { try { ManagementClass mgmtClass = GetManagementClass("MyMachine", @"MyAccount", "myPassword", "MSBTS_ReceivePort"); ManagementObject objRP = mgmtClass.CreateInstance(); objRP["Name"] = receivePortName; objRP["IsTwoWay"] = "FALSE"; PutOptions options = new PutOptions(); options.Type = PutType.CreateOnly; objRP.Put(options); Console.WriteLine("Receive Port /"" + receivePortName + "/" is created."); } catch (Exception ex) { Console.WriteLine("Exception: " + ex.Message); Console.ReadLine(); } } // Create Receive Location static void CreateRL(string receiveLocationName, string address, string receivePortName) { try { ManagementClass mgmtClass = GetManagementClass("MyMachine", @"MyAccount", "myPassword", "MSBTS_ReceiveLocation"); ManagementObject objRL = mgmtClass.CreateInstance(); objRL["Name"] = receiveLocationName; objRL["ReceivePortName"] = receivePortName; objRL["AdapterName"] = "WCF-NetMsmq"; objRL["HostName"] = "BizTalkServerApplication"; objRL["PipelineName"] = "Microsoft.BizTalk.DefaultPipelines.PassThruReceive, Microsoft.BizTalk.DefaultPipelines, Version=3.0.1.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"; objRL["InboundTransportURL"] = address; PutOptions options = new PutOptions(); options.Type = PutType.CreateOnly; objRL.Put(options); Console.WriteLine("Receive Location /"" + receiveLocationName + "/" is created."); } catch (Exception ex) { Console.WriteLine("Exception: " + ex.Message); Console.ReadLine(); } } // Create Send Port static void CreateSP(string sendPortName, string address) { try { ManagementClass mgmtClass = GetManagementClass("MyMachine", @"MyAccount", "myPassword", "MSBTS_SendPort"); ManagementObject objSP = mgmtClass.CreateInstance(); objSP["Name"] = sendPortName; objSP["IsDynamic"] = "FALSE"; objSP["IsTwoWay"] = "FALSE"; objSP["PTTransportType"] = "WCF-NetMsmq"; objSP["SendPipeline"] = "Microsoft.BizTalk.DefaultPipelines.PassThruTransmit, Microsoft.BizTalk.DefaultPipelines, Version=3.0.1.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"; objSP["PTAddress"] = address; PutOptions options = new PutOptions(); options.Type = PutType.CreateOnly; objSP.Put(options); Console.WriteLine("Send Port /"" + sendPortName + "/" is created."); } catch (Exception ex) { Console.WriteLine("Exception: " + ex.Message); Console.ReadLine(); } } } }