Одновременная поддержка Beta 2 и RC0 (RTW)

  Я уже писал о выходе RC0 и о хорошей возможности подготовиться к выходу финальной версии Silverlight - т.н. Ready to Web (RTW). То есть релиз.

  Возникает резонный вопрос - вот в день Х выходит RTW. Часть пользователей ставит финальную версию, а часть пользователей все еще использует Beta 2. Последним будет предложено обновится до финальной версии, но ведь не все сразу это делают. Что же делать? Текущие сайты на Beta 2 работать не будут под релиз. Сайты на RC0 работать под релиз будут.

  Что ж, существует интересный выход из этой ситуации, если вы считаете, что часть пользователей все равно какое-то время будет оставаться на Beta2. Его в своем блоге изложил Лоренс Мороуни.

  Пусть у вас есть две версии приложения:

  • Версия на Beta 2 - 'MyB2App.xap'
  • Версия на RC0 (совместим с RTW) - 'MyRTWApp.xap'

  При внедрении объекта Silverlight на страницу в первый период вы используете следующий код (в это время еще много пользователей используют Beta2):

    1: <object data="data:application/x-silverlight," type="application/x-silverlight-2-b2" width="100%" height="100%">
    2:     <param name="source" value="MyB2App.xap"/>
    3:       <param name="onerror" value="onSilverlightError" />
    4:       <param name="background" value="white" />
    5:         
    6:       <object data="data:application/x-silverlight," type="application/x-silverlight-2" width="100%" height="100%">
    7:           <param name="source" value="MyRTWApp.xap"/>
    8:             <param name="onerror" value="onSilverlightError" />
    9:             <param name="background" value="white" />
   10:             
   11:             <a href="https://go.microsoft.com/fwlink/?LinkID=115261" style="text-decoration: none;">
   12:                 <img src="https://go.microsoft.com/fwlink/?LinkId=108181" alt="Get Microsoft Silverlight" style="border-style: none"/>
   13:         </a>
   14:     </object>
   15: </object>

   Как видно, в этом случае сначала идет объект на Beta 2 (обратите внимание на type = "application/x-silverlight-2-b2" и далее ссылка на MyB2App.xap), а внутри этого объекта используется объект под RTW (application/x-silverlight-2 и MyRTWApp.xap).

  Это означает, что если у пользователя установлена Beta 2, то у него запустится версия под нее. Если у пользователя установлен уже RTW, то он пропустит первый объект (в системе нет обработчика типа x-silverlight-2-b2 и затем запустит версию под RTW.

  С течением некоторого периода времени все больше пользователей перейдут на RTW. В этом случае можно сделать код наоборот:

    1: <object data="data:application/x-silverlight," type="application/x-silverlight-2" width="100%" height="100%">            
    2:     <param name="source" value="MyRTWApp.xap"/>   
    3:     <param name="onerror" value="onSilverlightError" />
    4:     <param name="background" value="white" />
    5:     <object data="data:application/x-silverlight," type="application/x-silverlight-2-b2" width="100%" height="100%">
    6:         <param name="source" value="MyB2App.xap"/>
    7:         <param name="onerror" value="onSilverlightError" />
    8:         <param name="background" value="white" />
    9:         <a href=https://go.microsoft.com/fwlink/?LinkID=&lt;RTW LINK> style="text-decoration: none;">
   10:             <img src="https://go.microsoft.com/fwlink/?LinkId=108181" alt="Get Microsoft Silverlight" style="border-style: none"/>
   11:         </a>
   12:     </object>
   13: </object>

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