Задача сценария служб SSIS с помощью Microsoft.Exchange.WebServices - PullRequest
3 голосов
/ 13 марта 2019

Это возможный дубликат вопроса этой записи, однако моя ошибка другая и гораздо менее читаемая.

Сейчас у меня есть пакет служб SSIS, который содержит только задачу сценария.Внутри этой задачи сценария у меня есть ссылка на Microsoft.Exchange.WebServices.dll, и она включена в пространство имен.

Всякий раз, когда я не использую какие-либо методы и классы, определенные в WebServices, скрипт работает отлично.Однако всякий раз, когда я их использую, весь скрипт завершается сбоем и даже не достигает точки останова в первой строке ... Он также выдает следующую ошибку:

в системе.RuntimeMethodHandle.InvokeMethod (Объектная цель, аргументы Object [], сигнатура сигнатуры, логический конструктор) в System.Reflection.RuntimeMethodInfo.UnsafeInvokeInternal (параметры объекта obj, Object [], аргументы Object []) в System.Reflection.RuntimeMethokeInIn.Объект obj, BindingFlags invokeAttr, связыватель Binder, параметры Object [], CultureInfo culture) в System.RuntimeType.InvokeMember (имя строки, BindingFlags bindingFlags, связыватель Binder, объектная цель, Object [] provideArgs, модификаторы ParameterModifier [], культура CultureInfo, String[] namedParams) в Microsoft.SqlServer.Dts.Tasks.ScriptTask.VSTATaskScriptingEngine.ExecuteScript ()

Есть идеи?Когда я запускаю тот же код вне этой задачи сценария служб SSIS (в своем собственном проекте), он работает нормально.

ОБНОВЛЕНИЕ

Я обновляю этот пост, чтобы включить в него больше потенциально полезной информации.Код в моей задаче сценария выглядит следующим образом:

public void Main()
{
    string _SharedBox = "user@domain.com";
    ExchangeService service = new ExchangeService();
    service.AutodiscoverUrl(_SharedBox);
    service.UseDefaultCredentials = true;
    //... goes on, but the rest is commented out for now.
}

Я думаю, что Microsoft.Exchange.WebServices может быть неправильно включен, и это проблема, однако я не уверен, что с ним не так.У меня есть DLL, сидящая внутри решения VS, но за пределами проекта SSIS.Затем я добавил его в качестве ссылки в задачу «Сценарий» - в этой части я не уверен.Сначала я попытался включить WebServices через пакет NuGet, однако я понял, что нельзя использовать NuGet в задаче сценария.Вот как выглядит мое решение в задаче «Сценарий»:

enter image description here

Спасибо за любую помощь заранее!

1 Ответ

1 голос
/ 13 марта 2019

Обновление 1

Две вещи, которые нужно попробовать:

  • Запустить пакет в 32-битном режиме (поскольку это может быть только 32-битная версия)сборки регистрируются в GAC.)
  • Установите для свойства Microsoft.Exchange.WebServices.dll Copy Local значение True

Чтение основного исключения

Основываясь на ваших комментариях, выдается исключение:

Исключение было вызвано целевым вызовом

Это общее сообщение об ошибке, которое отображается, когда исключение выдаетсякод скрипта.Чтобы прочитать основное сообщение об ошибке, вы можете добавить в код предложение try catch и использовать метод Dts.FireError (), чтобы вызвать реальное исключение.

public void Main()
{
    try{

        string _SharedBox = "user@domain.com";
        ExchangeService service = new ExchangeService();
        service.AutodiscoverUrl(_SharedBox);
        service.UseDefaultCredentials = true;
        //... goes on, but the rest is commented out for now.
        Dts.TaskResult = (int)ScriptResult.Success;

    }catch(Exception ex){

        Dts.FireError(0,"An error occured", ex.Message,String.Empty, 0);
        Dts.TaskResult = (int)ScriptResult.Failure;

    }


}

Попытка выяснить проблему

После поиска некоторое время, я думаю, что исключение выдается в следующей строке:

service.AutodiscoverUrl(_SharedBox);

Попробуйте поставить service.UseDefaultCredentials = true; перед service.AutodiscoverUrl(_SharedBox);, так как учетные данные должны быть определены перед использованием AutoDiscoverUrl() method.

Кроме того, вы можете проверить следующие ссылки, которые он может дать вам больше информации о чтении электронной почты с помощью ExchangeService:

...