Где MSDTC должен быть установлен в случае распределенной транзакции - PullRequest
2 голосов
/ 11 января 2010

Мне нужно поддерживать распределенные транзакции в моем приложении

Предположим, что Service1 установлен на Server1

[ServiceContract]
IService1
{
    [OperationContract]
    Operation1();
}

Сервис2 установлен на сервере2

[ServiceContract]
IService2
{
    [OperationContract]
    Operation2();
}

и клиент использует две службы

using (TransactionScope ts = new TransactionScope())
{
    Service1Proxy.Operation1();
    Service2Proxy.Operation2();
}

Где я должен точно установить MSDTC, нужно ли его устанавливать на Сервер1, Сервер2 и клиент

Требуется ли дополнительная настройка в этом случае?

Ответы [ 2 ]

1 голос
/ 11 января 2010

Вы должны включить MSDTC на своих клиентах и ​​сервере 1, сервере 2.

Вы должны разрешить исходящие в конфигурации безопасности MSDTC на вашем клиенте.
Вы должны разрешить входящий и исходящий на своих серверах.
если ваша БД находится на отдельной машине, она должна разрешить входящий.

Одна проблема, с которой я столкнулся при использовании MSDTC, - не забудьте РАЗРЕШИТЬ MSDTC в списке исключений вашего FIREWALL.

Глядя на свой фрагмент кода, вам также необходимо добавить атрибут Transactionflow в свой интерфейс операций.

Вот хорошая ссылка для WCF с транзакциями: Основание: распространение транзакций

0 голосов
/ 11 января 2010

Я буду осторожен с этой настройкой. Я использовал «TransactionScope» для программного выполнения команд SQL, которые я хочу выполнить для целей тестирования, а затем выполнить откат, но я не пытался распространять «TransactionScope» с помощью вызовов WCF.

Беглый поиск Google нашел эту документацию в MSDN: http://msdn.microsoft.com/en-us/magazine/cc163432.aspx. В этой документации говорится, что вам нужны специальные атрибуты в интерфейсе службы, чтобы сделать TransactionScope пересекающим границы службы.

Что касается "установки" MSDTC, вы не устанавливаете его. Он уже должен быть частью вашей установки Windows. Однако MSDTC не работает с удаленными клиентами в сети по умолчанию; Этот параметр используется в целях безопасности. Вот ссылка, показывающая, как включить MSDTC для работы с удаленными клиентами в Windows Server 2003: http://support.microsoft.com/kb/817064. Для других версий Windows попробуйте поиск в Google для «Доступ к сети MSDTC». Я считаю, что вам нужно будет настроить эту конфигурацию на каждом сервере, на котором размещается служба, которую вы хотите включить в удаленную транзакцию.

Службы WCF могут быть очень сложными для настройки со всеми возможными настройками. Надеюсь, это поможет вам начать.

...