MSDTC не работает с базой данных на виртуальной машине Azure
Вопрос. Кому-нибудь удалось заставить транзакции MSDTC работать между локальной машиной и базой данных, которая находится на виртуальной машине Azure?
Я прочитал это: что говорит о том, что MSDTC не поддерживается в "SQL Azure" - но является ли SQL Azure опцией "Базы данных SQL", а не опцией "Виртуальные машины", в которой может быть база данных SQL? Неясно: http://social.msdn.microsoft.com/Forums/windowsazure/en-US/894b6087-35ab-4f4f-aa19-f81ee56dc6bf/msdtc-with-the-new-virtual-machines?forum=WAVirtualMachinesforWindows
Я нашел следующую статью: http://sanganakauthority.blogspot.co.uk/2014/02/definitive-steps-to-configure-msdtc-on.html - но это связано с виртуальными машинами Azure в той же виртуальной сети.
Есть достаточно статей, которые дают мне надежду, что ЭТО ВОЗМОЖНО, как они, по-видимому, подразумевают это. Например, http://thoughtsofmarcus.blogspot.co.uk/2013/03/msdtc-error-after-cloning-virtual.html, http://www.jamescrowley.co.uk/2012/06/23/msdtc-gotchas-with-virtual-machines/
Я пробовал следующее, просмотрев множество статей:
- Проверен MSDTC сервис запущен и установлен на автоматический.
- Проверены локальные настройки DTC в службах компонентов на обоих компьютерах: http://technet.microsoft.com/en-us/library/cc731495.aspx
- Ограниченный диапазон портов 5000-5050 для MSDTC в компонентных службах: http://support.microsoft.com/kb/300083.
- Установите / подтвердите записи реестра для вышеупомянутого, как описано в этой статье: http://support.microsoft.com/kb/306843
- Добавлены входящие и исходящие правила для порта 135 и диапазона 5000-5050 на брандмауэре на обеих машинах (и попытался полностью отключить брандмауэр)
- Деинсталлированный / переустановленный MSDTC на виртуальной машине Azure, проверка уникальности CID: http://msdn.microsoft.com/en-us/library/aa561924.aspx
- Добавил конечные точки к виртуальной машине Azure на портале управления 135 и 5000-5050, используя эту полезную статью: http://fabriccontroller.net/blog/posts/adding-multiple-endpoints-to-your-windows-azure-virtual-machines-by-using-a-csv-file/
- Добавлены имена хостов в файл hosts (хотя ping не работает на Azure в любом случае). http://blogs.msdn.com/b/distributedservices/archive/2008/11/12/troubleshooting-msdtc-issues-with-the-dtcping-tool.aspx
- Попытался добавить ICMP к брандмауэру, чтобы я мог пропинговать виртуальную машину Azure, но это не сработало, хотя и не ожидал, что это... ( http://feedback.windowsazure.com/forums/217313-networking-dns-traffic-manager-vpn-vnet/suggestions/3346609-icmp-support-for-azure-websites-roles-cloud-serv).
- Запустил dtctester.exe, на выходе была ошибка:
Error: SQLSTATE=24000,Native error=0,msg=[Microsoft][ODBC SQL Server Driver]Invalid cursor state
, - Попытка запустить dtcping.exe, получила сообщение
RPC pinging exception -->1753(There are no more endpoints available from the endpoint mapper.)
- порты и настройки брандмауэра должны быть в порядке. - Установить / проверить
TurnOffRpcSecurity
запись в реестре (в настоящее время цепляется за соломинку): http://support.microsoft.com/kb/839187
Есть идеи?
РЕШЕНИЕ
Первоначальным решением было настроить облачную службу с веб-сайтом, подключенным к базе данных на отдельной виртуальной машине, обе из которых находятся в одной виртуальной сети Azure. Вы должны добавить виртуальную сеть, прежде чем создавать виртуальные машины.
Затем я был раздражен тем, что сам облачный сервис перезагружался, я первоначально опубликовал его в Visual Studio, но хотел настроить его, и эти изменения были отменены. Затем я переключил его на виртуальную машину (всего 2 виртуальные машины).
Затем я нарушил свой кредитный лимит подписки, поэтому у меня было 2 виртуальных машины, одна с веб-сайтом, другая с базой данных, обе в отдельных подписках Azure в отдельных виртуальных сетях, но с виртуальным шлюзом между ними. Это немного запутанно, но работает отлично, это руководство отлично подходит для этого: http://blogs.technet.com/b/aviraj/archive/2014/05/16/microsoft-azure-configure-cross-subscription-vnet-to-vnet-connectivity-in-azure.aspx