سؤال

وادعو حزمة SSIS باستخدام LoadPackage (...).

هل من الممكن لجعل هذه الدعوة دعوة غير متزامن؟

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

المحلول

نعم، استخدم مندوب غير متزامن، كما demostrated هنا:

http://msdn.microsoft.com/en-us/library /h80ttd5f.aspx

نصائح أخرى

إذا كنت ترغب فقط ليتم تشغيله في الخلفية ثم نعم، يمكنك إما التخزين المؤقت حتى موضوع أو استدعاء بعض T-SQL لإنشاء مهمة حيوي (وإزالته مرة أخرى بعد ذلك). إذا كنت ترغب في تشغيله بشكل غير متزامن وتريد رد عندما يكون القيام به، ثم اعتقد انك من الحظ للأسف.

وتسأل ما اذا كان 1) قانوني للاتصال LoadPackage على مؤشر ترابط خلفية أو 2) هل من الممكن. ل# 1 لا أستطيع إعطاء إجابة محددة لأنني لا تستخدم إطار جهاز مباحث أمن الدولة.

ولكن رقم 2 (طالما # 1 غير صحيح) غير قابلة للتنفيذ بالتأكيد. IMHO، كنت أفضل حالا باستخدام الإطار القائم الذي لديه المعهد يهدف إلى الدعوة المتزامن API وانتظار النتائج. على سبيل المثال مع Parellel الامتدادات 8 يونيو CTP، فإن البرمجية التالية القيام به.

using System.Threading.Tasks;
...
var future = Future.Create(()=>LoadPackage); // Starts loading the package
// Do other stuff
var package = future.Value;  // Wait for package load to complete and get the value

وادعو حزمة مباحث أمن الدولة من وجهة نظري UI (WPF) عن طريق استدعاء خدمة WCF المتزامن. رمز الخدمة هو:

public string ImportMarriageXML(bool isWakeUp, bool clearExistingMarriage)
{
    try
    {
        var dts = new Microsoft.SqlServer.Dts.Runtime.Application();

        using (var package = dts.LoadFromSqlServer(
            ServiceSettings.Settings.SSIS.ImportMarriages,
            ServiceSettings.Settings.SSIS.ServerIP,
            ServiceSettings.Settings.SSIS.UserID,
            ServiceSettings.Settings.SSIS.Password,
            null))
        {
            package.InteractiveMode = false;
            package.Connections["DB.STAGING"].ConnectionString = String.Format("{0};Provider={1};", DBSettings.ConnectionString(Core.Database.Staging), ServiceSettings.Settings.SSIS.Provider);

            var variables = package.Variables;
            variables["IsWakeUp"].Value = isWakeUp;
            variables["ClearExistingMarriage"].Value = clearExistingMarriage;
            variables["XmlDirectory"].Value = ServiceSettings.Settings.SSIS.Properties.XmlDirectory;

            if (package.Execute() == DTSExecResult.Failure)
            {
                // HACK: Need to refactor this at some point. Will do for now.
                var errors = new System.Text.StringBuilder();
                foreach (var error in package.Errors)
                    errors.AppendFormat("SubComponent: {0}; Description: {1}{2}", error.SubComponent, error.Description, Environment.NewLine);
                throw new ApplicationException(errors.ToString());
            }

            return package.Connections["Text Logging"].ConnectionString;
        }
    }
}

و(جزء من) رمز العميل هو كما يلي:

private void InvokeLoadMarriages()
{
    integrationServicesServiceClient.BeginImportMarriageXML(false, OnEndImportMarriageXML, null);
}

private void OnEndImportMarriageXML(IAsyncResult asyncResult)
{
    view.InvokeDisplayResults(integrationServicesServiceClient.EndImportMarriageXML(asyncResult));
}

وأين BeginImportMarriageXML وEndImportMarriageXML هي عمليات المتزامن ولدت في فئة الوكيل.

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