объект транзакции в пользовательском компоненте SSIS метод Execute - PullRequest
2 голосов
/ 26 января 2011

Я погуглил, выпил, выгляжу высоко и низко.

Я ищу пример использования переменной транзакции типа object, которая передается в метод Execute пользовательской задачи.

Я заметил, что когда у меня есть объект транзакции, он имеет тип System .__ ComObject.

Что мне нужно сделать, это передать транзакцию объекту веб-службе. Веб-сервис каким-то образом регистрируется в этой транзакции при открытии соединения, запускаем sql. Кикер в том случае, если пакет терпит неудачу дальше, есть SQL в откате веб-службы. Теперь DTC включен и прямо сейчас, если пользовательская задача не выполняется, пакет выполняет откат, но если одна пользовательская задача выполнена успешно, а другая не выполнена, работа с пользовательской задачей все еще фиксируется.

Теперь, если это нельзя использовать вне метода Execute, я полагаю, я могу перенести код веб-сервиса в метод Execute

Чтобы получить некоторую историю, мне пришлось создать свою пользовательскую задачу веб-сервиса, потому что встроенная не поддерживает аутентификацию.

CredentialCache с IIS против персонального сервера разработки

1 Ответ

1 голос
/ 10 июня 2013

Встроенные менеджеры соединений SSIS поддерживают этот объект транзакции в своих вызовах AquireConnections (подробнее см. http://msdn.microsoft.com/en-us/library/microsoft.sqlserver.dts.pipeline.pipelinecomponent.acquireconnections.aspx).

Однако это почти наверняка просто указатель на какой-то объект неуправляемой транзакции, и SSIS, по-видимому, не предлагает для него управляемых оболочек (т.е. через DtsConvert).

Но я бы сделал еще один шаг назад и спросил бы себя, что, по вашему мнению, вы собираетесь делать, когда получите это. Регистрация веб-сервисов в транзакциях нетривиальна. Теоретически, веб-сервисы, которые поддерживают ws-транзакции, могут быть зарегистрированы (и WCF предоставляет поддержку для этого: http://msdn.microsoft.com/en-us/library/ms729784.aspx,, но веб-сервис, который вы вызываете?), Но на практике я думаю, что всегда попытайтесь избежать этого и вместо этого зарегистрируйте какой-нибудь другой локальный транзакционный ресурс, который может надежно передать ваше сообщение. Как таблица «исходящих» в БД. Или MSMQ.

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

...