هل هناك طريقة لأتمتة تحويل موقع BizTalk أو إيقاف تشغيله عبر الرمز؟

StackOverflow https://stackoverflow.com/questions/1515305

  •  19-09-2019
  •  | 
  •  

سؤال

هل هناك طريقة لأتمتة الدخول أو الخروج من موقع تلقي في BizTalk؟ يبدو أنه يجب أن يكون هناك نوع من API أو بعض هذا النوع من الأشياء. أفضل أن أعمل في C #، لكن WMI أو نوع من البرنامج النصي سيعمل أيضا.

هل كانت مفيدة؟

المحلول

إلى جانب 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);
            }
        }
    }
}

تحذير واحد، على ما يبدو هذا DLL لا يدعم 64 بت. نظرا لأنني فقط أكتب فائدة بسيطة فهي ليست مشكلة كبيرة بالنسبة لي (مجرد تجميع 32 بت)، لكنه شيء يجب أن يدركه.

سعيد أن نرى أنك يبدو أنه قد وجدت حلا.

مطلوب أن يذكر بديل مماثل يستخدم أيضا PowerShell و Explorerom و API BizTalk لتعيين Artifacts BizTalk إلى حالات مختلفة.

تلقي المواقع كونها واحدة منهم.

يقبل البرنامج النصي ملفات تكوين XML، حيث تقوم بإدراج القطع الأثرية وما الوضع الذي ترغب في تعيينه إليه.

تم نشر البرنامج النصي إلى Microsoft Script Center:http://gallery.technet.microsoft.com/scriptcenter/set-artifact-status-270f43a0.

ردا على تعليق الحكمبراييدوس. إليك بعض مقتطرات التعليمات البرمجية التي استخدمتها في تطبيق 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 الذي تريد التفاعل معه.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top