Silverlight Webparts für WSS oder MOSS

 share-point-logo[1]silverlightlogo[1]

Silverlight bietet die Möglichkeit SharePoint (egal ob WSS oder MOSS) um RichUI Elemente zu erweitern, mit wenigen Handgriffen kann SharePoint die Silverlight-Unterstützung beigebracht werden. In diesem kurzen Post möchte ich zunächst die Rahmenbedingungen etwas erläutern was genau benötigt wird um Silverlight Lösungen für SharePoint bereitzustellen.

Allgemeines SharePoint Developer System

  • Windows Server >= 2k3
  • Microsoft Visual Studio 2008
  • Windows SharePoint Services 3.0 oder Microsoft Office SharePoint Server 2007
  • .Net Framework 3.5
  • SharePoint Extensions for Visual Studio

Um Silverlight Lösungen erstellen zu können, müssen noch folgende Komponenten auf dem System installiert werden

  • Visual Studio 2008 ServicePack 1
  • Silverlight Tools for Visual Studio 2008
  • Silverlight SDK

Microsofts Designer Tools aus der Expression Serie werden nicht zwingend benötgt, bieten sich aber für größere Projekte an.

 

Die Installation der Komponenten brauche ich nicht zu beschreiben, da es sich hierbei um Setuppakete handelt, die durch einfaches Doppelklicken installiert werden können. Nachdem nun alle Komponenten auf dem System verfügbar sind, müssen noch wenige Schritte durchgeführt werden um  SharePoint und Silverlight zu verheiraten.

  • Die Silverlight Library (System.Web.Silverlight.dll) muss im GAC installiert werden
    • Die Lib ist unter C:\Programme\Microsoft SDKs\Silverlight\v2.0\Libraries\Server\ zu finden
  • Der Silverlight MIME Type “.xap” muss im IIS installiert werden
    • Hierbei kann dies entweder auf root-Ebene im IIS geschehen, oder explizit auf einer SharePoint Instanz realisiert werden
Property Value
Extension .xap
MIME type application/x-silverlight-app
  • Die web.config der gewünschten SharePoint Instanzen muss angepasst werden

 

Anpassungen einer SharePoint web.config

Sollte das XML nicht vollständig lesbar sein, könnt ihr alle relevanten Snippets auch hier downloaden.

In der web.config müssen neue Config-Sections eigetragen werden.Dafür wird das Node <configuration><configSections> um folgendes erweitert

   1:  <sectionGroup name="system.web.extensions" 
   2:      type="System.Web.Configuration.SystemWebExtensionsSectionGroup, 
System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35">
   3:              
   4:     <sectionGroup name="scripting" type="System.Web.Configuration.ScriptingSectionGroup, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35">
   5:             <section name="scriptResourceHandler" type="System.Web.Configuration.ScriptingScriptResourceHandlerSection, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" allowDefinition="MachineToApplication"/>
   6:                  <sectionGroup name="webServices" type="System.Web.Configuration.ScriptingWebServicesSectionGroup, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35">
   7:                      <section name="jsonSerialization" type="System.Web.Configuration.ScriptingJsonSerializationSection, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" allowDefinition="Everywhere"/>
   8:                      <section name="profileService" type="System.Web.Configuration.ScriptingProfileServiceSection, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" allowDefinition="MachineToApplication"/> 
   9:                      <section name="authenticationService" type="System.Web.Configuration.ScriptingAuthenticationServiceSection, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" allowDefinition="MachineToApplication"/>
  10:                      <section name="roleService" type="System.Web.Configuration.ScriptingRoleServiceSection, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" allowDefinition="MachineToApplication"/>
  11:                  </sectionGroup>
  12:              </sectionGroup>
  13:          </sectionGroup>

 

Um SharePoint die Silverlight Library bekannt zu machen, erweitert man den Knoten <configuration><system.web><compilation><assemblies>

   1:  <add assembly="System.Web.Silverlight, Version=2.0.5.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>

 

Nun muss SharePoint noch ein paar Controls kennenlernen, diese sollten den ASP.Net Entwicklern bekannt sein und müssen unter <configuration><system.web><pages><controls> eingefügt werden

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

 

Jetzt kommen noch die Ajax Http-Handler unter <configuration><system.web><httpHandlers>  hinzu

   1:  <remove verb="*" path="*.asmx"/>
   2:  <add verb="*" path="*.asmx" validate="false" type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
   3:  <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"/>
   4:  <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"/>

 

Dann noch ein Http-Modul unter <configuration><system.web><httpModules>

   1:  <add name="ScriptModule" type="System.Web.Handlers.ScriptModule, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
 
Eine Custom Configuration Section für den IIS wird am Ende der <configuration> Node eingefügt
   1:  <system.webServer>
   2:        <validation validateIntegratedModeConfiguration="false"/>
   3:          <modules>
   4:               <remove name="ScriptModule"/>
   5:             <add name="ScriptModule" preCondition="managedHandler" type="System.Web.Handlers.ScriptModule, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
   6:          </modules>
   7:          <handlers>
   8:             <remove name="WebServiceHandlerFactory-Integrated"/>
   9:             <remove name="ScriptHandlerFactory"/>
  10:             <remove name="ScriptHandlerFactoryAppServices"/>
  11:             <remove name="ScriptResource"/>
  12:             <add name="ScriptHandlerFactory" verb="*" path="*.asmx" preCondition="integratedMode" type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
  13:              <add name="ScriptHandlerFactoryAppServices" verb="*" path="*_AppService.axd" preCondition="integratedMode" type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
  14:              <add name="ScriptResource" preCondition="integratedMode" verb="GET,HEAD" path="ScriptResource.axd" type="System.Web.Handlers.ScriptResourceHandler, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
  15:          </handlers>
  16:      </system.webServer>

 

Zum guten Schluss kommen noch Assembly-Abhängigkeiten unter <configuration><runtime>< assemblyBinding>  dazu

 

   1:      <dependentAssembly>
   2:          <assemblyIdentity name="System.Web.Extensions" publicKeyToken="31bf3856ad364e35"/>
   3:          <bindingRedirect oldVersion="1.0.0.0-1.1.0.0" newVersion="3.5.0.0"/>
   4:      </dependentAssembly>
   5:      <dependentAssembly>
   6:          <assemblyIdentity name="System.Web.Extensions.Design" publicKeyToken="31bf3856ad364e35"/>
   7:          <bindingRedirect oldVersion="1.0.0.0-1.1.0.0" newVersion="3.5.0.0"/>
   8:      </dependentAssembly>

 

 

Nach diesem XML-Fight ;-) spricht die SharePoint Instanz Silverlight und die neue Art der SharePoint Anpassung kann begonnen werden…

 

Ein kleines Beispiel SilverLight WebPart for SharePoint folgt bald…

 

DotNetKicks-DE Image
Published Freitag, 19. Juni 2009 15:52 von ThorstenHans
Abgelegt unter: , , ,

Kommentare

# Silverlight Webpart für SharePoint

Samstag, 20. Juni 2009 21:43 von Thorsten Hans

&#160; Wie man den SharePoint Silverlight sprechen lernt, habe ich in diesem Post beschrieben . Im heutigen

Kommentar abgeben

(verpflichtend) 
(verpflichtend) 
(optional)
(verpflichtend)