Blog » Silverlight w SharePoint
Aktualna ocena: 5 (0)

Silverlight w SharePoint

 
Silverlight w SharePoint
Dużo ostatnio było słychać o nowej wersji Silverlight (3.0). Staje się on coraz popularniejszy więc myślę, że warto dowiedzieć w jaki sposób używać tej technologii w SharePoint. Godne uwagi jest to, że rozwija się bardzo dynamicznie. W ciągu dwóch lat doszedł do takiego poziomu, że może konkurować z Flash. Microsoft zapowiada również zastosowanie Silverlight w technologiach mobilnych, ma zostać przeniesiony jeden do jeden.

Silverlight podobnie jak Flash jest uruchamiany po stronie klienta. Jeśli wejdziemy na stronę która używa Silverlight i nie mamy go zainstalowanego to wyświetli się komunikat którego kliknięcie automatycznie przeniesie nas na stronkę z której możemy ściągnąć wtyczkę do Silverlight (ok 1,5 MB) i zainstalować. To wszystko jeśli chodzi o stację kliencka.

Znalazłem dwie metody osadzenia moduł Silverlight na stronie w SharePoint:

I Sposób
1. Zainstalować .NET 3.5
2. Zainstalować Silverlight Plug-in
3. Zainstalować Silverlight SDK
4. Skopiować bibliotekę System.Web.Silverlight.dll z katalogu $:\Program Files\Microsoft SDKs\Silverlight\v2.0\Libraries\Server do Global Assembly Cache (GAC).
5. Dodać w IIS MIME type
Extension: *.xap
MIME type:
application/x-silverlight-app
6. Zmodyfikować plik web.config aplikacji

a) W sekcji <configSections> poniżej <configuration> ale przed  </configSections>

      <sectionGroup name="scripting" type="System.Web.Configuration.ScriptingSectionGroup, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35">

        <section name="scriptResourceHandler" type="System.Web.Configuration.ScriptingScriptResourceHandlerSection, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" allowDefinition="MachineToApplication" />

        <sectionGroup name="webServices" type="System.Web.Configuration.ScriptingWebServicesSectionGroup, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35">

          <section name="jsonSerialization" type="System.Web.Configuration.ScriptingJsonSerializationSection, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" allowDefinition="Everywhere" />

          <section name="profileService" type="System.Web.Configuration.ScriptingProfileServiceSection, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" allowDefinition="MachineToApplication" />

          <section name="authenticationService" type="System.Web.Configuration.ScriptingAuthenticationServiceSection, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" allowDefinition="MachineToApplication" />

          <section name="roleService" type="System.Web.Configuration.ScriptingRoleServiceSection, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" allowDefinition="MachineToApplication" />

        </sectionGroup>

      </sectionGroup>

</sectionGroup>

b) W sekcji <SafeControls> </SafeControls> należy dodać
<SafeControl Assembly="System.Web.Silverlight, Version=2.0.5.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" Namespace="System.Web.UI.SilverlightControls" TypeName="*" Safe="True" />

c) W sekcji <httpHandlers></httpHandlers>

<remove verb="*" path="*.asmx" />

<add verb="*" path="*.asmx" validate="false" type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />

<add verb="*" path="*_AppService.axd" validate="false" type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />

<add verb="GET,HEAD" path="ScriptResource.axd" type="System.Web.Handlers.ScriptResourceHandler, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" validate="false" />

d) W sekcji <httpModules></httpModules>
<add name="ScriptModule" type="System.Web.Handlers.ScriptModule, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />

e) W sekcji <pages></pages>

<controls>

    <add tagPrefix="asp" namespace="System.Web.UI" assembly="System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />

    <add tagPrefix="asp" namespace="System.Web.UI.WebControls" assembly="System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />

</controls>

f) W sekcji <assemblyBinding></assemblyBinding>

<dependentAssembly>

    <assemblyIdentity name="System.Web.Extensions" publicKeyToken="31bf3856ad364e35" />

    <bindingRedirect oldVersion="1.0.0.0-1.1.0.0" newVersion="3.5.0.0" />

</dependentAssembly>

<dependentAssembly>

    <assemblyIdentity name="System.Web.Extensions.Design" publicKeyToken="31bf3856ad364e35" />

    <bindingRedirect oldVersion="1.0.0.0-1.1.0.0" newVersion="3.5.0.0" />

</dependentAssembly>

Dzięki modyfikacji pliku web.config możliwe jest użycie w WebParcie kontrolki System.Web.UI.SilverlightControls.Silverlight

public class SilverlightWebPart: System.Web.UI.WebControls.WebParts.WebPart
{
protected override void CreateChildControls()
          {
            base.CreateChildControls();

            System.Web.UI.SilverlightControls.Silverlight silverlightControl = new System.Web.UI.SilverlightControls.Silverlight();
            silverlightControl .ID = " silverlightControl1 ";
            silverlightControl .Source = "http://omega/sites/Developerska/_layouts/Silverlight/Test.xap";
            silverlightControl .Width = new Unit(400);
            silverlightControl .Height = new Unit(300);
            Controls.Add( silverlightControl );
        }
}

Kontrolka SilverlightControls.Silverlight służy do hostowania modułów silverlight. Koniecznie musimy podać ścieżkę do pliku *.xap. Musi on być dostępny przez http, najprościej skopiować plik do katalogu 12/Template/Layouts/... . Podajemy także wysokość i szerokość modułu.
Kontrolka hostująca używa AJAX'a więc konieczne jest umieszczenie ScriptManager'a na stronie. Można to zrobić z kodu:

protected override void OnLoad(EventArgs e)
{
     base.OnLoad(e);
     ScriptManager sm = ScriptManager.GetCurrent(this.Page);
     if (sm == null)
     {
          sm = new ScriptManager();
          Controls.AddAt(0, sm);
     }
}

II Sposób
Drugi sposób jest dużo prostszy i nie wymaga modyfikacji pliku web.config. Jedynie co trzeba zrobić do dodać w IIS MIME type:
Extension: *.xap
MIME type: application/x-silverlight-app

i wyrenderować obiekt w metodzie Render (w WebParcie):

StringBuilder result = new StringBuilder();
result.Append("    <div id=\"silverlightControlHost\" align=\"center\">");
result.Append("         <object data=\"data:application/x-silverlight-2,\" type=\"application/x-silverlight-2\" width=\"" + wight + "\" height=\"" + height + "\">");
result.Append("              <param name=\"source\" value=\""+ PathXAP +"\" />");
result.Append("              <param name=\"onerror\" value=\"onSilverlightError\" />");
result.Append("              <param name=\"background\" value=\"white\" />");
result.Append("              <param name=\"minRuntimeVersion\" value=\"2.0.31005.0\" />");
result.Append("              <param name=\"autoUpgrade\" value=\"true\" />");
result.Append("              <param name=\"initParams\" value=\"XmlUrl="+ PathXML + " \" />");
result.Append("              <a href=\"http://go.microsoft.com/fwlink/?LinkID=124807\" style=\"text-decoration: none;\">");
result.Append("                   <img src=\"http://go.microsoft.com/fwlink/?LinkId=108181\" alt=\"Get Microsoft Silverlight\" style=\"border-style: none\" />");
result.Append("              </a>");
result.Append("         </object>");
result.Append("         <iframe style=\"visibility:hidden;height:0;width:0;border:0px\">");
result.Append("         </iframe>");
result.Append("    </div>");
writer.WriteLine(result);

w pogrubione miejsca wstawiamy:
PathXAP - ścieżka do pliku *.xap
wight - szerokość
height - wysokość

Zaznaczyłem też "initParams" bo jest to jeden ze sposobów przekazania parametru do modułu silverlight. Ważne jest to, że kolejne parametry dodaje się po przecinku w Value. Następnie pobrać wartość możemy w pliku App.xml w metodzie Application_Startup:
string nazwa = e.InitParams["XmlUrl"]

Aby komfortowo pracować z Silverlight należy mieć zainstalowane:
Dodany: 2009-04-11 21:53:22 przez Michał Nikołajuk | Wypowiedzi: 4
Dodaj do MySpace Dodaj do Twitter Dodaj do Yahoo Bookmarks Dodaj do Facebook Dodaj do Google Bookmarks Dodaj do Yahoo MyWeb
Komentarze
Michał Nikolajuk
Cieszę się, że ci się podoba. Co do wymiany informacji to nigdy tego nie robiłem, nie miałem jeszcze takiej potrzeby.
2010-05-04 12:00:27
Bartek
Bardzo dobry artykul. Przydatny, ale testowales kiedys wymiane informacji pomiedzy dwoma aplikacjami silverlighotwymi w sharepointcie ;>
2010-05-04 11:51:08
Kola
Dzięki ;)
2009-04-13 10:47:01
Gutek
no :) nareszcie, nie moglem sie juz doczekac bloga ;)

brawo za start :) na pewno sie przyda - juz rozeslalem do ludzi z firmy jako "KB" aby pamietali ;)
2009-04-12 22:10:20
Zostaw komentarz Subskrybuj



 Security code