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-app6. 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