• Выиграй $10 000 с Silverlight

    Компания Component Art проводит конкурс по Silverlight-приложениям. Период проведения конкурса с 22 июня по 22 сентября. С правилами конкурса можно ознакомится здесь.
    Надіслане 26-06-2009 02:15 від Sergey Lutay | 0 коментарів
    Зареєстрований як , ,
  • Материалы доклада: Обзор ASP.NET 4.0

    Презентацию и код можно скачать здесь. Для решения необходима Visual Studio 2010 Beta 1. Часть решения, которая касается ASP.NET AJAX, можно добавить в проект VS2008.

    Надіслане 20-06-2009 03:33 від Sergey Lutay | 0 коментарів
    Зареєстрований як ,
  • Карта выхода .Net RIA Services

    Сегодня на форуме .Net RIA Services была опубликована карта выхода этого продукта.

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

     И так, в июле 2009 мы увидим CTP версию с go-live лицензией, в ней будет улучшено существующий API и добавлены новые возможности.

    PDC 2009 Beta - будет работать с VS 2010, получим еще порцию дополнительных возможностей уровня ядра и возможность использовать ADO.NET Services протокол.

    Релиз продукта следует ожидать в первой половине 2010 года.

    Больше о карте читайте в оригинале.

    Надіслане 09-06-2009 10:02 від Sergey Lutay | 1 коментарів
    Зареєстрований як , , ,
  • Событие посвященное выходу Silverlight 3 и Expression Tool

    Microsoft объявила дату проведения события посвященного выходу 3-й версии Silverlight и Expression Tool. Данное мероприятие будет проходить 10 июля .

    image Оригинал.

    Надіслане 04-06-2009 11:51 від Sergey Lutay | 1 коментарів
    Зареєстрований як ,
  • Virtual Earth Silverlight Map Control

    В одном из своих постов я делал обзор существующих, на тот момент, решений по использованию GIS(Geographic Information System) в Silverlight-приложениях. Во время MIX09 анонсировали выход элемента управления от компании Microsoft по управлению картами Virtual Earth. Текущая версия компонента CTP. Его возможности это лишь вершина айcберга, по сравнению с тем, что планируется еще реализовать.

    Как говорится “Лучше один раз увидеть, чем сто раз услышать”, поэтому увидеть элемент управления можно в Online SDK и еще в нескольких приложениях:

    • http://xtourl.com/52w – проект команды Virtual Earth. Случайным образом показывает пользователей Twitter’a с их сообщениями.
    • OnTheRoad – позволяет создавать маршруты ваших путишествий и др.
    Надіслане 03-06-2009 11:23 від Sergey Lutay | 1 коментарів
    Зареєстрований як , , ,
  • Bing - новый поисковик от Microsoft

    Компания майкрософт анансировала новую поисковую машину возможности которой, намного шире существующих на текущий день поисковиков. 3-го июня проект будет доступен всему миру по адрессу www.Bing.com. Картография, информация о местонахождениях и изображения являются важными инвестиционными областями онлайновых поисковых систем. Что и будет воплощено в Bing.

    С 1 июня, картографическая платформа Microsoft Virtual Earth сменит название на Bing maps.

    Больше о новинке читайте и смотрете здесь:

    Надіслане 29-05-2009 12:01 від Sergey Lutay | 5 коментарів
    Зареєстрований як , , ,
  • Silverlight 3 и WCF: исключения

    Как писал раньше, используя WCF и Silverlight 3, можно передавать ошибки сервера на клиент. Сейчас расскажу как это можно сделать.

    Что же было до появления этой возможности? Если на сервере возникало исключение, оно заворачивалось в SOAP и отправлялось на клиент. Вот только в Silverlight-приложение в том виде как есть оно не попадало. Почему? Да потому, что браузер не пропускал. И вот почему. Браузер имеет стандартный набор ошибок и когда с сервера приходит код ответа не 200, браузер отображать сообщение согласно коду ответа. Когда же на стороне сервера возникает исключение, то по умолчанию код ответа присваивается 500 и в Silverlight-приложении мы видим сообщение "Not found". Хотя, если обращения к серверу мониторить Fiddler'ом, то можно получить общую информацию о серверной ошибке.

    Сейчас же есть возможность передать в само Silverlight-приложение полную информацию об ошибке сервера. И так, приступим.

    По накатаной схеме создаем Silverlight 3 приложение с Web-приложением для тестирования. В Web-приложение добавляем новый елемент Silverlight-enabled WCF Service . И в решение добавляем еще один проект Class Library. В Class Library создаем класс:

    public class SilverlightFaultBehavior : BehaviorExtensionElement, IEndpointBehavior
        {
            
            public override Type BehaviorType
            {
                get { return typeof(SilverlightFaultBehavior); }
            }
    
            protected override object CreateBehavior()
            {
                return new SilverlightFaultBehavior();
            }
    
            #region IEndpointBehavior Members
    
            public void AddBindingParameters(ServiceEndpoint endpoint, BindingParameterCollection bindingParameters)
            {
    
            }
    
            public void ApplyClientBehavior(ServiceEndpoint endpoint, ClientRuntime clientRuntime)
            {
    
            }
    
            public void ApplyDispatchBehavior(ServiceEndpoint endpoint, EndpointDispatcher endpointDispatcher)
            {
                SilverlightFaultMessageInspector inspector = new SilverlightFaultMessageInspector();
                endpointDispatcher.DispatchRuntime.MessageInspectors.Add(inspector);
            }
    
            public void Validate(ServiceEndpoint endpoint)
            {
    
            }
    
            #endregion
    
            public class SilverlightFaultMessageInspector : IDispatchMessageInspector
            {
                #region IDispatchMessageInspector Members
    
                public object AfterReceiveRequest(ref Message request, IClientChannel channel, InstanceContext instanceContext)
                {
                    return null;
                }
    
                public void BeforeSendReply(ref Message reply, object correlationState)
                {
                    if (reply.IsFault)
                    {
                        HttpResponseMessageProperty property = new HttpResponseMessageProperty();
                        property.StatusCode = System.Net.HttpStatusCode.OK;
                        reply.Properties[HttpResponseMessageProperty.Name] = property;
                    }
                }
    
                #endregion
            }
        }

    SilverlightFaultMessageInspector – класс, который в случае ошибки обеспечит код ответа 200, тем самым обеспечит попадание всей информации об ошибке прямо в Silverlight-приложение.

    BehaviorExtensionElement – абстрактный класс, который представляет конфигурацию елемента. Специфика данного елемента заключается в том, что он определяет дополнительное поведение сервиса или конечной точки. BehaviorType и CreateBehavior() абстрактные члены этого класса, которые возвращают тип поведения и объект типа поведения соответственно.

    Реализуя интерфейс IEndpointBehavior нам важен лишь метод ApplyDispatchBehavior(), что бы добавить нашего “инспектора”. Остальные методы оставим пустыми.

    Теперь необходимо в файле конфигурации Web-приложения зарегистрировать наше расширение поведения. Потом, в области конфигурации поведения конечной токи(endpointBehaviors) указать наше зарегистрированое расширение и непосредственно в описании конечной точки указать имя конфигурации поведения(в примере SilverlightFaultBehavior). Также нужно включить передачу ошибок на клиент <serviceDebug includeExceptionDetailInFaults="true"/>. Пример:

    <system.serviceModel>
            <extensions>
                <behaviorExtensions>
                    <add name="SilverlightFaults" 
                        type="SilverlightFaults.SilverlightFaultBehavior,
    		 SilverlightFaults, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null"/>
                </behaviorExtensions>
            </extensions>
            <behaviors>
                <serviceBehaviors>
                    <behavior name="Faults.Web.CalculatorServiceBehavior">
                        <serviceMetadata httpGetEnabled="true"/>
                        <serviceDebug includeExceptionDetailInFaults="true"/>
                    </behavior>
                </serviceBehaviors>
                <endpointBehaviors>
                    <behavior name="SilverlightFaultBehavior">
                        <SilverlightFaults/>
                    </behavior>
                </endpointBehaviors>
            </behaviors>
            <bindings>
                <customBinding>
                    <binding name="customBinding0">
                        <binaryMessageEncoding/>
                        <httpTransport/>
                    </binding>
                </customBinding>
            </bindings>
            <serviceHostingEnvironment aspNetCompatibilityEnabled="true"/>
            <services>
                <service behaviorConfiguration="Faults.Web.CalculatorServiceBehavior" name="Faults.Web.CalculatorService">
                    <endpoint address="" binding="customBinding" bindingConfiguration="customBinding0" 
                        contract="Faults.Web.CalculatorService"
                        behaviorConfiguration="SilverlightFaultBehavior"/>
                    <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange"/>
                </service>
            </services>
        </system.serviceModel>

     

    После описанной конфигурации, все серверные ошибки можно будет получать в Silverlight-приложении с полным описанием. К тому же можно использовать механизм WCF’a c Fault.

    Скачть пример.

    Больше о передаче ошибок в Silverlight-приложение:

     Как видите, если выбирать между WCF-сервисами и Web-сервисами, то предпочтительнее использовать связку Silverlight и WCF

    Надіслане 23-05-2009 12:39 від Sergey Lutay | 2 коментарів
    Зареєстрований як , , ,
  • Silverlight Multicast Plug-in

    Компания Qumu, во время конференции Streaming Media East, анонсировала выход нового расширения Silverlight для широковещания. Данное расширение, разработанное совместно с Microsoft, позволяет компаниям предоставлять широковещательное видео по сети тысячам пользователям с установленным Silverlight. Компоненты анонсированного расширения можно скачать на странице проекта (текущая версия RC1, стала доступна вчера, 19 мая).

    Ключевые моменты Silverlight Multicast расширения:

    • Использует существующую Windows Media Services широковещательную инфраструктуру;
    • Хороший пример того, как Silverlight “Extensible by Design”;
    • Легко интегрируется с существующими Silverlight-приложениями;
    • Работает там, где работает Silverlight.
    • Доступен как open source проект на CodePlex

    Больше информации в оригинале и:

    Надіслане 20-05-2009 08:55 від Sergey Lutay | 1 коментарів
    Зареєстрований як , , , , , , ,
  • Карта выхода главных продуктов Microsoft.

    Bruce Kyle в своем блоге выложил "дорожную карту" выхода главных продуктов компании Microsoft. В списку присутствуют такие продукты как Silverlight 3, Windows 7, Server 2008 R2, Exchange 2010, VS2010, .Net 4.0, а также продукты с кодовыми названиями "Dublin", "Geneva", "Stirling" ... Полную карту смотрите здесь.
    Надіслане 16-05-2009 03:00 від Sergey Lutay | 0 коментарів
    Зареєстрований як , ,
  • Silverlight 3 и WCF: Duplex

    Одним из нескольких нововведений в Silverlight 3, которые касаются взаимодействия с WCF сервисами, является упрощение реализации двухстороней связи между клиентом и сервером.

    Об этом хочу рассказать на примере создания простого чата. Для начало создадим новое Silverlight-приложение:

    image

    Добавляем WCF-сервис в наше ASP.NET-приложение: 

    image

    Дальше, удаляем из файла-конфигурации веб-приложения описание endpoint’a с типом связывания wsHttpBinding:
                    <endpoint address="" binding="wsHttpBinding" contract="Chat.Web.IChatService">
                        <identity>
                            <dns value="localhost" />
                        </identity>
                    </endpoint>

     

     

    После удаления, необходимо программно создать хост для сервиса. Для этого добавляем в проект веб-приложения новый файл:

    image

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

    c PollingDuplexBindingElement (для типа PollingDuplexBindingElement необходимо в проект добавить ссылку на сборку System.ServiceModel.PollingDuplex):

    using System;
    usingSystem.Collections.Generic;
    usingSystem.Linq;
    usingSystem.Web;
    usingSystem.ServiceModel;
    usingSystem.ServiceModel.Channels;

    namespaceChat.Web
    {
        public class ChatServiceHostFactory : ServiceHostFactoryBase
        {
            public override ServiceHostBase CreateServiceHost(string constructorString, Uri[] baseAddresses) { return new ChatServiceHost(baseAddresses);
            }
        }

        classChatServiceHost : ServiceHost
      
    {
            public ChatServiceHost(params Uri[] addresses)
            {
                base.InitializeDescription(typeof(ChatService), new UriSchemeKeyedCollection(addresses));
            }

            protected override void InitializeRuntime()
            {
                PollingDuplexBindingElement pdbe = new PollingDuplexBindingElement()
                {
                    ServerPollTimeout = TimeSpan.FromSeconds(3),

                    //Duration to wait before the channel is closed due to inactivity
                    InactivityTimeout = TimeSpan.FromMinutes(10)
                };
                this.AddServiceEndpoint(typeof(ChatService),
                    new CustomBinding(
                        pdbe,
                        new BinaryMessageEncodingBindingElement(),
                        new HttpTransportBindingElement()), string.Empty);
                base.InitializeRuntime();
            }
        }
    }

    Теперь нужно в файле сервиса (ChatService.svc) указать созданый хост для сервиса. Выбираем пункт “View Markup” контекстного меню файла сервиса:

    image

    и заменяем существующую строку на: 

    <%@ServiceHost Language="C#" Debug="true" Factory="Chat.Web.ChatServiceHostFactory" Service="Chat.Web.ChatService" %>

    Проверяем измененный сервис в браузере:

    image

     

     

    Теперь надо создать интерфейс взаимодействия сервиса с клиентом:

    [ServiceContract]
    public interface IChatService
    {
        [OperationContract(IsOneWay = true, AsyncPattern=true)]
        IAsyncResult BeginUserConnected(string UserName, AsyncCallback callback, object state);
    
        void EndUserConnected(IAsyncResult result);
    
        [OperationContract(IsOneWay = true, AsyncPattern=true)]
        IAsyncResult BeginUserDisconnected(string UserName, AsyncCallback callback, object state);
    
        void EndUserDisconnected(IAsyncResult result);
    
        [OperationContract(IsOneWay = true, AsyncPattern=true)]
        IAsyncResult BeginSendMessage(string Message, AsyncCallback callback, object state);
    
        void EndSendMessage(IAsyncResult result);
    }

    Связь с клентом осуществляется асинхронно, так как отправка сообщения одному пользователю не должна задерживать отправку сообщения другому.

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

    Используя синхронный подход, попадем в следующую ситуацию - когда пропадает связь с пользователем, то сервис ждет определеное время, что бы связаться с пользователем.

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

    Дальше необходимо указать сервису интерфейс работы с клиентом. Это задается на уровне атрибута для сервиса:

    [ServiceContract(Namespace = "", CallbackContract = typeof(IChatService))]
        public class ChatService
        {…}
    Создаем логику работы сервиса. Для начала добавим метод, который подключает пользователей к чату. В случае успешного подключения,
    метод возвращает клиенту True:
            [OperationContract]
            public bool Connect(string userName)
            {
                var result = false;
                if (!Users.Keys.Contains(userName))
                {
                    var clientChannel = OperationContext.Current.GetCallbackChannel<IChatService>();
                    
                    result = true;
                }
                return result;
            }

    Внутри метода получаем канал соединения с клиентом: OperationContext.Current.GetCallbackChannel<IChatService>()

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

    clientChannel.BeginUserConnected(newUserName, new AsyncCallback(EndUserConnected), null);
     

    В Silverlight-приложении необходимо добавить ссылку на сервис и реализовать логику обработки сообщений сервиса.

    При создании прокси, для работы с сервисом, необходимо программно создать  адрес сервиса и тип связывания с ним:

    address = new EndpointAddress("http://localhost:12345/ChatService.svc");
    binding = new CustomBinding(
         new PollingDuplexBindingElement(), 
         new BinaryMessageEncodingBindingElement(),
         new HttpTransportBindingElement()
    );
    proxy = new ChatServiceClient(binding, address);
    После создания необходимой логики запускаем приложение в нескольких окнах браузера:
    image 
    Скачать решение.
    P.S.: В сервис необходимо добавить логику для многопоточности!

    Дополнительные ссылки:

    Надіслане 08-05-2009 12:15 від Sergey Lutay | 5 коментарів
    Зареєстрований як , , , ,
  • Silverlight и Rutube

    Портал Rutube запустил видео трансляцию с использованием Smooth Streaming и Silverlight. Смотреть здесь. О технологии Smooth Streaming я писал ранее.

    Надіслане 23-04-2009 01:07 від Sergey Lutay | 0 коментарів
    Зареєстрований як , ,
  • Silverlight 3 и WCF

    На ряду с множеством новых возможностей в Silverlight 3, которые описал в своем блоге Сергей Байдачный, происходит улучшение механизма взаимодействия с серверной стороной. А именно, взаимодействия Silverlight-приложений и WCF-сервисов. Добавлена:

    • возможность использования Binary XML для передачи данных;
    • возможность передачи исключений в Silverlight-приложение;
    • улучшен механизм реализации “Duplex” режима;
    • и др.

    В данном посте хочу рассказать о возможности передачи данных с использованием Binary XML.

    Передавая данные в формате Binary XML, мы ускоряем время передачи данных от клиента к серверу, тем самым уменьшая время ожидания ответа от сервера. Это результат того, что сериализованные данные в таком формате меньше по объему, чем при SOAP. И архивирование данных на уровне IIS’а происходит быстрее.

    Для реализации возможности использования Binary XML особо утруждаться не надо. Достаточно в серверное приложение добавить “Silverlight-enabled WCF Service” сервис. По-умолчанию сервис уже настроен на передачу данных в формате Binaty XML, эта опция находится в файле конфигурации:

    <bindings>
        <customBinding>
            <binding name="customBinding">
                <binaryMessageEncoding/>
                <httpTransport/>
            </binding>
        </customBinding>
    </bindings>

    Чтобы данные передавались в формате SOAP, необходимо выделенную выше строку заменить на:

    <textMessageEncoding/>

    Для сравнения обеих форматов, я создал сервис, который выполняет сложение двух чисел. При сравнении Fiddler’ом передаваемых данных, вот что он показал:

     

     Binary XMLSOAP
    Headersimage image
    TreeViewimage image

    Тестовый пример

    Надіслане 23-04-2009 12:14 від Sergey Lutay | 1 коментарів
    Зареєстрований як , , ,
  • Статистика установленных Silverlight-плагинов

    Обычно, перед началом внедрения в проект Silverlight-приложения, заказчик интересуется: “какое количество пользователей ставит на свои компьютеры Silverlight-плагин?”. Поспрашивав немного у поисковиков, нашел несколько свежих ссылок по интересующей статистике:

    Общая статистика хорошо. Но еще лучше знать статистику пользователей вашего сайта. И здесь нам в помощь приходит несколько решений. На том же сайте Rich Internet Application Statistics можно сформировать JavaScript, который будет собирать информацию о установленных Silverlight-плагинах на машинах пользователей вашего веб-проекта. Еще можно использовать для этих целей Google Analytics. Как это сделать описано здесь.

    Таким образом можно заказчику показать не только общую статистику интернета, а и статистику установленных плагинов на компьютерах “ваших” пользователей.

    P.S.: Надеюсь Microsoft организует трансляцию Eurovision 2009 с использованием Silverlight и Smooth Streaming, что еще добавит процентов для Silverlight :)

    Надіслане 15-04-2009 11:44 від Sergey Lutay | 4 коментарів
    Зареєстрований як , ,
  • Youtube и Silverlight

    Да, это так. Один из мощнейших видео порталов интернета использует возможности Silverlight. Не спешите идти на его страницу и смотреть, какой плеер используется для проигрывания видео, там еще флеш. А вот здесь находится Silverlight-приложение. Спросите где? Вот здесь:

    clip_image002По клику на кнопке появляется приложение.

    Надіслане 26-03-2009 04:55 від Sergey Lutay | 4 коментарів
    Зареєстрований як , ,
  • Silverlight Out Of Browser: Как?

    Одно из мощных нововведений в Silverlight 3 это возможность запускать приложения вне браузера. По умолчанию, приложение работает в браузере и только по инициативе пользователя может быть “установлено” в ОС, если разработчик предоставил такую возможность в приложении. Как разработчику добавить такую функциональность, описано здесь.

    Я же хочу пролить свет на то, как это работает.

    Во время установки плагина Silverlight 3, в его каталог добавляется приложение sllauncher.exe (С:\Program Files (x86)\Microsoft Silverlight\3.0.40307.0\sllauncher.exe). SLLauncher и занимается обеспечением работы нашего приложения в офлайн режиме. Если посмотреть на свойста ярлыка, который создается при “инсталляции” нашего приложения, то в SLLauncher передается параметр, такой себе ApplicationId. Где же хранится наше приложение? Оно находится недалеко от изолированного хранилища Silverlight’a, а именно C:\Users\<AccountName>\AppData\LocalLow\Microsoft\Silverlight\Offline. Название каталога внутри Offline – это идентификатор нашего приложения. Внутри каждой такой папки находится файл приложения и еще несколько вспомогательных файлов. Например, в файле metadata.txt хранится описание Silverlight-приложения.

    При открытии офлайн Silverlight-приложения, происходит запуск sllauncher.exe. Он в свою очередь, по передаваемому параметру ищет каталог приложения и вытягивает описание из metadata файла. И вуаля – приложение работает офлайн.

    Надіслане 25-03-2009 06:22 від Sergey Lutay | 3 коментарів
    Зареєстрований як , ,
Більше повідомлень Наступна сторінка »

Новини

Календар повідомлень

<July 2009>
SMTWTFS
2829301234
567891011
12131415161718
19202122232425
2627282930311
2345678

Пошук

Go

Синдикація

SkinName:iroha_Blog2