Недавно я работал над проектом, в котором мы хотели использовать In-Role Windows Azure Caching. Мы столкнулись с рядом проблем во время работы. В этом сообщении я поделюсь этим опытом с вами.
Укороченная версия (Tl; DR)
Нужно иметь в виду две вещи:
- Если кэширование вообще не работает, проверьте, используете ли вы пакет кэширования Windows Azure 2.1.0.0. Если это так, убедитесь, что вы используете Windows Azure SDK Версии 2.1.
- Если кэширование работает с перебоями, пришло время обновить вашу копию Visual Studio до последней версии. На момент написания этого блога «Обновление 3» Visual Studio 2012 было самой последней версией.
Более длинная версия
Теперь для моей (в) известной более длинной версии сообщения в блоге.
Проблема 1: Кэширование просто не будет работать
Для нашего проекта мы начали внедрять Windows Azure Caching. Мы просмотрели руководства, доступные на веб-сайте Windows Azure, и на основе этого создали небольшой прототип. Код для инициализации кэша был действительно прост:
cache = new DataCache(nameOfCache);
Когда мы запустили приложение, оно просто не сработало. Все, что мы получили, было ошибкой «такой хост не известен». Интересно, что у одного из членов моей команды было другое приложение, которое использовало кеш и работало безупречно. Мы были полностью сбиты с толку. Тот же кусок кода работал в одном облачном проекте, но не работал в другом. Он и еще один мой коллега внимательно изучили и обнаружили, что в работающем проекте использовалась библиотека кэширования Windows Azure 2.0.0.0, а в неработающей версии библиотеки использовалась библиотека кэширования Windows Azure 2.1.0.0. Мы использовали Windows Azure SDK версии 2.0. Затем они посмотрели описание пакета на Nuget и обнаружили, что версия 2.1.0.0 будет работать только с SDK версии 2.1.
Более подробную информацию об этом можно найти в этих темах на StackOverflow:
- http://stackoverflow.com/questions/17991166/exception-while-using-windows-azure-caching-no-such-host-is-known
- http://stackoverflow.com/questions/18045279/configure-azure-shared-cache-locally-and-on-the-cloud
Поэтому мы понизили библиотеку кэширования Windows Azure до версии 2.0.0.0, и наше кэширование начало работать правильно. Все идет нормально!
Проблема 2: Кэширование работало с перерывами
Это была действительно нелепая проблема . Мы написали некоторый код, и когда мой коллега запустил код, он отлично работал на его компьютере. Однако, когда я запустил один и тот же код на моем компьютере, он побежал немного, а затем кеширование начало выдавать все виды исключений. Некоторые из ошибок, с которыми я столкнулся, были:
iisexpress.exe Information: 0 : INFORMATION: <DistributedCache.ClientChannel.1.127.0.0.1:54346; 127.255.0.1:20004> SocketException errorcode:10060 message System.Net.Sockets.SocketException (0x80004005): A connection attempt failed because the connected party did not properly respond after a period of time, or established connection failed because connected host has failed to respond at System.Net.Sockets.Socket.EndReceive (IAsyncResult asyncResult) at Microsoft.ApplicationServer.Caching.TcpSocketChannel.AsyncReceiveCallback(IAsyncResult result)
iisexpress.exe Information: 0 : INFORMATION: <DistributedCache.ClientChannel.1.127.0.0.1:54346; 127.255.0.1:20004> Aborting channel 127.0.0.1:54346; 127.255.0.1:20004. iisexpress.exe Warning: 0 : WARNING: <SimpleSendReceiveModule> DeadServerCallback Called, Server URI: [net.tcp://127.255.0.1:20004], Underlying exception -
Я искал по всему Интернету и обнаружил, что было много людей, которые сталкивались с подобной проблемой. Однако никто из них не нашел решения проблемы.
Затем я обратился к команде кэширования Windows Azure, и они были чрезвычайно полезны. Они усердно работали со мной над решением этой проблемы. Мы ходили туда-сюда, но из этого ничего не вышло. Все это время код продолжал работать на машине моего коллеги. Это заставило меня понять, что с моей машиной что-то не так. Мы сравнили обе машины и обнаружили, что у нас обоих были разные версии Visual Studio 2012 и Windows 8. Поскольку мы никуда не денлись, я решил восстановить свою машину.
Поэтому у меня были Windows 8 Enterprise Edition и Visual Studio 2012 Premium Edition, а у моего коллеги были Windows 8 Pro и Visual Studio 2012 Ultimate. Я решил восстановить свою машину так же, как мой коллега в надежде, что все может работать. Я провел около пары часов и все установил. Затем я запустил приложение и все еще получил тот же результат . Затем я понял, что мой коллега также применил «Обновление 3» Visual Studio 2012, чего у меня не было. Поэтому я подумал , что, черт возьми, давайте попробуем , что хорошо .
Угадай, что? Как только я обновил Visual Studio до последнего обновления, волшебным образом все заработало . Я знаю, я знаю … это неудачное решение, но оно сработало для меня. Вы можете попробовать это.
Резюме
Подводя итог, можно сказать, что если кэширование вообще не работает, проверьте, не совпадают ли версии библиотеки кэширования и SDK. Если кэширование работает с перерывами, рассмотрите возможность обновления вашей копии Visual Studio до последней версии. Последние несколько дней были довольно разочаровывающими и непродуктивными, и если вы сталкиваетесь с похожими проблемами, я надеюсь, что одно из этих решений работает для вас, и вам не нужно проходить то же испытание, что и я.
Надеюсь это поможет.